solana杂谈(1)
本文适用于“只需大致了解 Solana”的读者,部分说法可能不够准确或不够深入。如需详细了解,建议阅读 Solana 的官方文档:https://solana.com/zh/docs
solana账户模型
solana 上所有数据都是储存在账户中,也就是说你可以通过账户信息拿到链上的任意状态(将区块链理解为一个大型状态机).
solana 账户结构如下:
- 钱包账户(Wallet Account):data 字段为空。这类账户由椭圆曲线生成的公私钥对管理,拥有私钥的用户可以通过签署并发送交易来修改链上状态。
- 程序账户(Program Account):data 字段包含 Solana 程序的指令集及其 WASM 二进制代码。
- 数据账户(Data Account):data 字段包含所有编码后的数据。
在 Solana 中,程序账户和数据账户的地址通常是通过特殊方式生成的,并非由椭圆曲线公私钥对直接控制,因此无法直接通过私钥生成签名。它们的状态修改通常通过程序派生地址(Program Derived Address, PDA)代理签名,在状态机内部进行。
账户租金
账户租金是solana避免数据臃余的处理方案(evm是通过释放空间,返回eth的方式),对于solana上所有的用户都需要支付租金(或者余额大于一定值免租).
- 钱包账户:租金由账户所有者自己支付。
- 程序账户:租金通常由程序的创建者一次性支付,以确保程序的可持续运行。
租金豁免:如果账户中存储的 SOL 数量足以支付该账户两年期的租金,则该账户可以获得租金豁免,无需再支付租金。这意味着账户将永久存在,除非被关闭。
- 数据账户(Data Account):通常是程序用于保存数据的账户,其租金由创建该数据账户的交易发起者支付。
数据账户管理:对于核心项目数据,通常在程序部署时进行统一初始化,以防止意外删除。对于用户自行管理的数据账户(如链上的 Token 账户),则由用户自己创建并管理租金。
<blockquote>
rent_epoch:这是一个遗留字段,源于 Solana 曾经有一个机制会定期从账户中扣除 lamports。虽然此字段仍然存在于账户类型中,但自从租金收取被弃用后,它已不再使用。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |