目录
1.Solana 核心概念简述
Solana 是一个高性能的区块链平台,其核心概念包括 账户(Account)、交易(Transaction)、合约(Program) 和 租约(Rent)。以下是对这些概念的简短易懂概括:
1.1. 账户(Account)
- “一切皆账户”:类似 Linux 系统把所有资源抽象为“文件”,Solana 中所有的信息(如代币余额、合约代码等)都存储在账户对象中。
- 账户结构:
- lamports:账户余额(Solana 的原生代币单位)。
- data:存储的数据(对于合约账户,这里是代码;对于用户账户,这里可能是代币信息)。
- owner:账户的所有者(通常是一个合约地址,决定谁能操作这个账户)。
- executable:是否为可执行合约(如果是合约账户,此值为 true)。
- rent_epoch:下次需要支付租金的周期。
- 账户与签名:
1.2. 交易(Transaction)
- 用户账户本质是一个 私钥,通过 Ed25519 算法生成(高效、安全、签名短)。
- 账户地址是私钥对应的 公钥,经过 Base58 编码后变成可读形式(如 HawRVHh7t4d3H3bitWHFt25WhhoDmbJMCfWdESQQoYEy)。
- 私钥签名用于证明对账户的控制权。
- 定义:交易是用户与区块链交互的方式,例如转账或调用合约。
- 组成:
- 一系列 交易指令(Instruction):指定要执行的操作、涉及的账户和数据。
- 签名:由发起者的私钥生成,用于验证交易有效性。
- 账户列表:交易中涉及的所有账户地址。
- 最近区块哈希:确保交易的时效性。
1.3. 交易指令(Instruction)
- 定义:交易的核心单元,描述具体的操作。
- 结构:
- program_id_index:要调用的合约地址(在账户列表中的索引)。
- accounts:操作涉及的账户。
- data:输入的具体数据。
1.4. SPL 代币(SPL)
在以太坊中,普通代币被一个叫ERC20的提案定了规范,可以认为普通代币合约统一叫做ERC20代币。
那么Solana世界里的ERC20代币是什么呢?答案就是SPL代币。
The Solana Program Library (SPL) is a collection of on-chain programs targeting the Sealevel parallel runtime.
SPL Token是 " Solana Program Library"中的一个组成部分,叫做"Token Program",简称为SPL Token。
所有的代币都有这个合约来管理,该合约代码在 https://github.com/solana-labs/solana-program-library/tree/master/token
不同于以太坊中,一个代币就是一个合约。
SPL Token中,一个代币,仅仅是一个归Token合约管理的普通的Account对象,这个对象里面的二进制数据定义了 这个代币的基本属性
1.5. 合约(Program)
- 类型:
- 系统合约(Native Program):由 Solana 官方提供,如 System Program(创建账户、转账)、BPF Loader Program(部署合约)。
- 普通合约(On Chain Program):用户开发并部署的合约,如代币相关合约。
- 特点:
- 合约是存储在账户中的可执行代码(executable = true)。
- 用户通过交易调用合约执行逻辑。
- Solana 的合约可以更新或销毁,销毁时存储资源会退还给部署者。
1.6. 租约(Rent)
- 什么是租约:
- 账户需要支付“租金”来保持数据存储在区块链上,租金根据存储的数据量和时间计算。
- 规则:
- 免租:账户余额超过“两年租金”的阈值则无需支付租金。
- 租金不足:余额低于免租阈值或付不出租金的账户会被“垃圾收集”(删除)。
- 与交易费用的区别:
- 租金是为存储付费。
- 交易费用是为处理指令付费。
2通过RPC与Solana交互
2.1.配置环境
首先,将钱包配置指向 Devnet 环境:
solana config set --url https://api.devnet.solana.com
2.2.查看钱包信息
查看当前钱包地址:
solana address
获取开发网 SOL(开发资金):
solana airdrop 2
#或则
solana airdrop 2 $(solana address) --url https://api.devnet.solana.com
查看钱包 SOL 余额:
solana balance
查看钱包中所有 SPL Token 余额:
spl-token accounts --verbose