Solana全面入门:账户、交易、程序与核心架构

·

想在 5 分钟内看懂 Solana?这篇系统化教程把官方文档晦涩术语译成通俗文字,辅以实战示例与常见误区,帮你迅速构建“账户、交易、程序、运行时、代币”五大模块认知地图,真正做到「读完即部署」。

1. 账户模型:一切皆为账户

1.1 账户字段速查

pub struct Account {
    pub lamports: u64,      // 余额(最小单位:lamport)
    pub data: Vec<u8>,       // 数据载荷,可扩容到 10 MB
    pub owner: Pubkey,       // 唯一拥有写权限的程序
    pub executable: bool,    // 是否为智能合约
    pub rent_epoch: Epoch,   // 下一次计算租金的 epoch
}

💡 实战:创建免租账户的最简 CLI

rent=$(solana rent-exempt 1024)   # 假设 1 KB 数据
solana-keygen new --outfile new-key.json
solana create-account new-key.json $rent

1.2 系统合约 vs. 用户合约

官方内置合约作用
System Program开户、转账、更改 Owner
BPF Loader部署/升级用户合约(ELF 格式)
Vote Program验证人注册 & 投票

所有“用户合约”其实就是把 executable=true 的账户交给 BPF Loader 托管。


2. 交易:一次性方法调用

2.1 交易结构拆解

一条 Solana 交易 = SigArray + Message,其中关键字段:

pub struct Message {
    pub recent_blockhash: Hash,   // ≈ 1 min 19 s 有效期(150 区块)
    pub instructions: Vec<CompiledInstruction>, // 原子调用列表
    pub address_table_lookups: Vec<MessageAddressTableLookup>, // 地址压缩
}
🎯 高频坑:一笔交易最多 12 个签名(受 1232 byte 限制),切勿在 UI 一次性塞入过多多签请求。

2.2 交易费用公式

Fee = max(5000 lamports × sigs, 0)   // 基础费可忽略
优先费 = 额外“提示”让验证人前排打包
销毁 = 50 % 直接打黑洞,促进长期通缩

3. 程序(智能合约)无状态哲学

3.1 Sysvar:链上系统的只读 API

可用 Clock::get() 一键读取:


4. SPL 代币:一合约管万币

所有代币共用 Token Program,区分:

查看任意地址 ATA:spl-token address --owner YOUR_PUBKEY --mint TOKEN_MINT

5. 共识与流水线:PoH 是这样提速的

5.1 历史证明 (PoH):链上计时器

5.2 Turbine 分片协议

5.3 Tower BFT:流水线化的投票

用多次投票叠加“锁定值”,当 2/3+ 质押确认后再向前滚动,目前 31 次确认即达到“最终性”。

👉 进一步了解灵魂设计的 PoH + Turbine 提速方案

6. 开发常见 6 问

Q1:为什么合约升级前后 ABI 会变?
A:SPL 约定在 ProgramData 写入 version-u64,合约升级后 version 自增,前端可根据 version 动态选用不同 schema。

Q2:怎样确认交易是否上链?
A:RPC 返回 signatureStatus 最终态 Finalized 即完成,等同 EVM 的 12 区块确认。

Q3:Rent 以后还会收钱吗?
A:免租账户已写入共识,如无重大治理提案,免租标准不会回溯修改。

Q4:如何批量转账降低签名费?
A:链下聚合后用 createTransferInstruction 装入单交易,12 笔以内共用一个签名。

Q5:看到官方文挡最大 128 条地址,实际能放多少?
A:开启 Address Lookup Table 后,单条消息可扩容至 256 条;更多需分页。

Q6:离线签名交易过期怎么办?
A:使用 Durable Nonce:一次持久化有效期通常一周,离线批量签署后可逐笔在链上补发。
👉 查询官方代码模板示例


总结

把以上五大模块烂熟于心,你就能用 20 行 Rust 写出可复用、70 ms 内确认的 Solana 小型 DeFi。Happy building!