- tags: Solana
Solana 101: Create an Escrow dApp
Links to this note
Reverse Proxy to bypass Network Issue of Solana RPC Node
tags: Nginx One Endpoint for Both WebSocket and Normal Requests,Solana,Solana 101: Create an Escrow dApp I met a lot network issues about connecting to RPC node of Solana, so I’m using a nginx server as a reverse proxy to bypass this problem: location / { # https://serverfault.com/a/923254 try_files /nonexistent @$http_upgrade; } location @ { proxy_pass https://api.testnet.solana.com; proxy_read_timeout 300s; proxy_send_timeout 300s; proxy_set_header Host "api.testnet.solana.com"; } location @websocket { proxy_redirect off; proxy_pass https://api....
Solana 101: 5. Escrow dApp
tags: Solana 101: Create an Escrow dApp
Solana 101: 3. SPL Token
tags: Solana 101: Create an Escrow dApp 连接钱包 安装 Phantom 钱包; 使用 @solana/wallet-adapter 连接钱包。官方提供了 React 相关的实现,Vue 可以通过社区提供的库:https://github.com/lorisleiva/solana-wallets-vue。 npm install solana-wallets-vue @solana/wallet-adapter-wallets 创建 SPL Token 安装依赖 npm install --save @solana/spl-token 创建代币 通过 Token Program 创建 Token,Solana 通过其特有的账号机制,通过创建一个账号并将 Owner 设置为一个统一的 Token Program 即可发行一种代币。1 发行代币 要持有代币必须创建一个对应的 Associated Token Account(ATA),也就是要接收一个代币首先要检查有没有对应代币的 ATA,没有则创建,然后给对应的 ATA 转移代币。 代币转帐 燃烧代币 SPL Token 交互:授权 Program 转帐 Libraries: spl_associated_token_account Steps: Delegate token to Program – in frontend. Create a Associated Token Account for Program to hold token....
Solana 101: 4. SPL NFT
tags: Solana 101: Create an Escrow dApp
Solana 101: 2. Anchor
tags: Solana 101: Create an Escrow dApp 链上数据存储 账号所有权 账号可以通过 Metadata 指定一个 Program 作为拥有者(Owner); Program 作为拥有者可以: 修改账号数据; 可以使用该 PDA 进行签名。 PDA(Program Derived Address) 1 使用 PDA 进行合约状态链上存储。 PDA 只有一个类似公钥的地址,但是没有对应的私钥; 链下生成:通过 PublicKey.findProgramAddress 生成 PDA,seeds 用于生成多个 PDA; 链上创建:将 PDA 作为账号传递给 Program 进行链上创建:填充足够的 lamports 用于支付租金、开辟空间、指定 program 作为 Owner。 创建一个计数器 部署智能合约; 生成一个 PDA 并进行链上创建; 增加计数器; 其他账号获取 PDA,并增加计数器; 使用 Anchor 重写计数器 安装 Anchor 安装 Yarn 安装 avm cargo install --git https://github.com/project-serum/anchor avm --locked --force 使用 avm 安装 anchor avm install latest avm use latest 创建 anchor 项目 anchor init hello-anchor anchor 项目结构 Understanding Program Derived Addresses ↩︎
Solana 101: 1. Develop Model
tags: Solana 101: Create an Escrow dApp Account UTXO Unspend Transaction Output. EVM Accounts1 EOA(Externally-owned acount) - 用户用私钥控制的账号; 合约账号(Contract account) - 代码控制的账号,用于部署智能合约代码。 账号模型通过用户地址为用户开辟一块单独的存储,简单的理解就是用公私钥导出的唯一地址作为主键存储在节点的存储系统里(RocksDB); 这样只要将链上转账或者智能合约产生的结果或副作用存储在账号下面即可。 Solana Account Model Accounts2 账号用于提供给智能合约(Program)跨交易存储状态,类似文件系统; 包含元数据(metadata)说明谁有权限访问这些状态; Solana 独特的创新:账号伴有生命周期,也就是对应的私钥并不完全拥有一个账号,而是从链上租借(rent)了一个账号,并支付对应的租金,当租借过期且没有足够的余额(lamports)支付租金的情况下,账号下的数据将被链回收; 一笔交易里可以参与的账号类型有: Signers 一笔交易可以包含一个或多个签名者,表示授权此笔交易(多签机制); Read-only 交易里对该账号只读; Executable 其账号可以作为智能合约进行调用(将其账号对应的公钥地址作为 program id); Programs or Smart Contract3 账号被标记为 Executable 可以部署代码(Program)作为智能合约。两种类型的智能合约: Native Programs – 区块链系统提供的标准库; On Chain Programs – 用户开发部署到链上的智能合约。 同时智能合约可以控制多个其他账号,并且只能修改它所拥有的账号数据,但是可以读取其他账号的数据。 Solana 的 Program 可以被更新。 搭建开发环境 命令行钱包 sh -c "$(curl -sSfL https://release.solana.com/stable/install)" 连接到测试节点 solana config set --url https://api....
Solana 101: 0. Prelude
tags: Solana 101: Create an Escrow dApp 聊聊区块链 一个完整的区块链系统生态: 主币:进行 gas 费结算:BitCoin / ETH / TRX 等等 节点服务(JSONRPC 2.0):提供数据查询、广播交易,交易广播(P2P -> 挖矿节点); 交易验证:挣取 gas 费,出块奖励(挖矿); PoW(Proof of Work):通过算力证明提供交易验证(出块);sha256(nonce + body) -> sha256 import hashlib from typing import Tuple raw_block = b'block data' dificulty = 5 def proof_my_work(dificulty, raw_block) -> Tuple[int, str]: nonce = 1 while True: body = bytes(nonce) + raw_block h = hashlib.sha256(body) hex_value = h.hexdigest() if hex_value[:dificulty] == '0' * dificulty: return nonce, hex_value nonce += 1 proof_my_work(dificulty, raw_block) PoS(Proof of Stake):通过质押主币提供交易验证,一旦被发现作弊则扣除质押的主币; 链浏览器:通过 Web UI 进行链上数据查询; 钱包 == 私钥:资产证明,交易授权,公钥导出地址,私钥则是证明拥有该地址; 智能合约(Smart Contract):对资产进行编程; 代币(Tokens):基于智能合约实现,Fungible Tokens(ERC20 / TRC20) 和 Non-Fungible Tokens (ERC721) dApp:通过桥接钱包和链上智能合约实现一定的链上操作; 从智能合约来看各个区块链生态之间的区别 主要是虚拟机的区别,为了执行智能合约,区块链系统需要虚拟机来执行代码,目前主流的虚拟机包括:...