Solana中账户类型 Account、AccountInfo与 SystemAccount 的区别
在Solana中 Account 的角色很重要,它就像Linux中一切皆文件的概念一样,无处不在。了解它也是开发Solana的基础,本节主要介绍我们最经常使用的 Account 、AccountInfo 和 SystemAccount 这三种账户类型的区别与使用场景。
当然除此之外还有一些账户类型也很重要,如 UncheckedAccount、Signer、TokenAccount、Mint、CpiAccount、Loader、Program、AssociatedToken 等,我们这里就不再一一讲解,有兴趣的话可以参考官方相关文档。
由于多数情况下都是使用anchor框架开发Solana合约,因此本文主要是根据 anchor-lang 文档里介绍账户来讲解
账户类型 以下我们分别对这三种账户类型做一些简单的介绍。
AccountInfo 在 Solana 中 AccountInfo 是最基础的账户类型。
其它几种账户类型都是对它的封装,它的定义
#[repr(C)] pub struct AccountInfo<'a> { pub key: &'a Pubkey, pub lamports: Rc<RefCell<&'a mut u64>>, pub data: Rc<RefCell<&'a mut [u8]>>, pub owner: &'a Pubkey, pub rent_epoch: u64, pub is_signer: bool, pub is_writable: bool, pub executable: bool, } 字段解释
key 公钥地址,当前账户的address
lamports 账户中的 lamports。可由程序修改。
data 此账户中保存的数据。
owner 当前账户的所有者(下面会有一个图解释owner关系),它也是一个公钥地址
rent_epoch 租约纪元,此账户下次需支付租金的时间点(每个账户要想在在网络中存在,必须支付一定的存储空间费用,如果达到租金两倍则可以免除)
read more