2. Solana 代币架构
2.1 SPL Token 标准
在 Solana 生态中,所有代币都遵循 SPL(Solana Program Library)Token 标准。SPL Token Program 是一个部署在链上的官方程序,它提供了创建和管理代币所需的全部功能。
这个设计与以太坊有本质区别:
| 维度 | Ethereum (ERC-20) | Solana (SPL Token) |
|---|---|---|
| 实现方式 | 每个代币是独立的智能合约 | 全网共用一个 Token Program |
| 创建代币 | 部署新的 Solidity 合约 | 向 Token Program 发送指令,创建数据账户 |
| 代码审计 | 每个合约需单独审计 | 统一的程序已经过严格审计 |
| 灵活性 | 可自定义任意逻辑 | 标准化操作,通过 Extensions 扩展 |
| 安全性 | 取决于开发者水平 | 高度标准化,安全性有保障 |
可以这样理解:以太坊的模式是每个人自己造一台印钞机;Solana 的模式是大家共用一台经过认证的印钞机,只是使用不同的印版。
2.2 程序与账户模型
理解 Solana 的代币系统,首先要理解其核心架构——程序与账户分离。
程序(Program)
程序是 Solana 上的可执行代码,类似于智能合约。但与以太坊不同,Solana 的程序是无状态的——它们不存储数据,只包含业务逻辑。SPL Token Program 就是这样一个程序,它定义了如何创建代币、如何转账、如何铸造等操作逻辑。
程序地址是固定的:
- Token Program:
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA - Token-2022 Program:
TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb - Associated Token Account Program:
ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL
账户(Account)
账户是 Solana 上的数据存储单元。每个账户都有:
- 地址:唯一的公钥。
- 余额:SOL,用于支付租金。
- 所有者:哪个程序可以修改它(对于代币账户,所有者是 Token Program)。
- 数据:程序定义的结构化数据(如余额、供应量)。
对于代币系统,有三种关键账户类型:
┌─────────────────────────────────────────────────────────────┐ │ SPL Token Program │ │ (无状态的执行逻辑) │ └─────────────────────────────────────────────────────────────┘ │ ┌───────────────┼───────────────┐ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Mint Account │ │Token Account│ │Token Account│ │ (代币定义) │ │ (用户 A) │ │ (用户 B) │ │ │ │ │ │ │ │ supply: 1M │◄─│ mint: xxx │ │ mint: xxx │ │ decimals: 6 │ │ owner: A │ │ owner: B │ │ authority:X │ │ amount: 100 │ │ amount: 200 │ └─────────────┘ └─────────────┘ └─────────────┘
- Mint Account (铸币账户): 存储代币的全局信息,如总供应量、精度、铸币权限。它不存储任何人的余额。
- Token Account (代币账户): 存储特定用户持有的特定代币数量。它有一个指针 (
mint) 指向它所属的 Mint Account。
2.3 与比特币的对比
比特币网络本身不支持原生代币。后来出现的 Ordinals 和 BRC-20 协议是通过在比特币交易中嵌入数据来"模拟"代币功能。
具体来说,这些协议将代币信息编码后写入交易的见证数据(Witness Data)中。比特币网络本身并不理解这些数据的含义,它只是把它们当作普通的交易附带信息。需要专门的外部索引器来解读这些数据,跟踪代币的归属和转移。
而在 Solana 上,代币是原生的一等公民。Token Program 直接在共识层处理代币逻辑,验证节点理解并执行这些操作,提供了更高的效率和更强的安全保证。