在 Solana 中,最重要的概念之一是账户。账户起着关键作用,因为作为分布式区块链系统,所有信息都存储在这些账户中。这包括智能合约(在 Solana 中称为链上程序)、状态信息、代币数据、配置详细信息等。
在了解Solana账户之前,我们先来回顾一下以太坊中的账户类型。
以太坊账户类型
以太坊将账户分为两种类型:外部拥有账户(EOA)和合约账户。
外部自有账户 (EOA)
EOA,即外部拥有账户,是个人通过私钥创建的账户。这些账户反映了现实世界的金融账户,任何拥有私钥的人都可以控制该账户。与银行卡类似,以太坊中的交易需要在从 ATM 取款时输入正确的密码。这是人类与以太坊账本之间唯一的沟通方式,因为以太坊中的交易需要签名,只有拥有私钥的 EOA 才能签名。通过 MetaMask 创建的账户就是外部拥有账户的示例。
外部自有账户的主要特点:
1.拥有以太坊余额。
2。可以发送交易,包括转账和执行合约代码。
3.由私钥控制。
4.没有相关的可执行代码。
合约账户
合约账户包含合约代码,由外部自有账户或其他合约创建。合约创建后会自动分配一个账户地址,用于存储合约代码以及合约部署或执行过程中产生的存储数据。合约账户地址是通过SHA3哈希算法生成的,不是私钥,合约账户没有私钥,所以不能作为外部自有账户使用,只能通过外部自有账户进行合约执行和代码调用。
让我们了解一下外部自有账户与合约账户之间的相同点和不同点:
Solana 账户
在以太坊中,代码和数据/状态直接存储在智能合约中。而 Solana 则区分了可执行账户和不可执行账户,从而产生了程序账户和数据账户的概念。
●程序账户(可执行账户):存储不可变数据,主要用于存储程序代码(BPF 字节码)。
●数据账户(不可执行账户):存储可变数据,主要用于存储程序的状态。
在 Solana 中,链上程序是只读或无状态的。这意味着程序账户(可执行账户)只存储代码而不存储状态。程序将其状态存储在其他独立账户(非可执行账户)中。如果程序账户拥有数据账户,则可以修改该数据账户内的状态。