{"author":{"address":null,"user":"https://learnblockchain.cn/people/12566"},"content":{"body":"作为区块链网络，以太坊和索拉纳拥有独特的数据结构，作为全球公共世界计算机，在其网络上存储和共享数据。在本章中，我们旨在探索这些链如何构建其数据集。\r\n## 以太坊中的帐户\r\n\r\n在以太坊中，“帐户”是指拥有以太并可以发送交易的实体。它包括存款和取款所需的地址，分类如下：\r\n\r\n- EOA（外部拥有的帐户）：外部拥有的帐户，拥有私钥。把它想象成个人钱包的帐户。\r\n- CA（合同账户）：合同账户，持有智能合同代码。\r\n\r\n以太坊中EOA和CA的一个关键区别是，EOA不是智能合约，通常没有自己的存储空间。因此，EOA的代码散列设置为“空”散列，表示帐户没有存储空间。\r\n\r\n\r\n![Screenshot 2024-06-20 at 7.32.39 AM.png](https://img.learnblockchain.cn/attachments/2024/06/Fzd1z29D66736a9c2c74f.png)\r\n\r\n外部拥有帐户（EOA）是具有私钥的帐户，拥有私钥意味着控制对资金或合同的访问。私钥意味着对资金或合同的访问进行控制。EOA中包含以下数据：\r\n\r\n合同帐户包含EOA根本无法持有的智能合同代码。此外，合同帐户没有私钥。相反，它由智能合约代码的逻辑控制。这个智能合同代码在创建合同帐户时记录在以太坊区块链上，是由EVM执行的软件程序。\r\n\r\n与EOA一样，合同帐户有一个地址，可以发送和接收以太币。然而，当交易的目的地是合同帐户地址时，交易和交易数据将用作在EVM中执行合同的输入。除了以太外，该事务还可以包括指示要执行的合同特定功能的数据以及要传递给该函数的参数。因此，事务可以调用合同中的函数。如果EOA要求，合同也可以调用其他合同。然而，由于合同帐户没有私钥，它不能签署交易，也不能自行启动交易。这些关系总结如下：\r\n- EOA → EOA (OK)\r\n- EOA → CA (OK)\r\n- EOA → CA → CA (OK)\r\n- CA → CA (Impossible)\r\n\r\n## Solana的帐户\r\n\r\nSolana帐户的概念比以太坊更广泛。在Solana中，所有数据都根据帐户进行存储和执行。这意味着，在每次需要在事务之间存储状态的情况下，都会使用帐户进行保存。与Linux等操作系统中的文件类似，帐户可以存储超出程序生命周期的任意数据。此外，与文件一样，帐户包含元数据，这些元数据告知运行时谁可以访问数据以及如何访问数据。\r\n\r\n在Solana的Sealevel VM中，所有帐户都能够存储数据。那么，智能合约开发人员可以在哪里存储他们的数据呢？他们可以将数据存储在可执行帐户拥有的不可执行帐户（PDA）中。开发人员可以通过分配与其可执行帐户地址相同的所有者来创建新帐户来存储数据。\r\n\r\n![Screenshot 2024-06-20 at 7.35.00 AM.png](https://img.learnblockchain.cn/attachments/2024/06/AR3Y5Knf66736b29c0a00.png)\r\n\r\n然而，存储数据的Solana网络上的“帐户”需要支付费用。这些帐户包括关于它们所含数据寿命的元数据，以名为“Lamports”的本机令牌表示。帐户存储在验证器的内存中，并支付“租金”以保留在那里。验证员定期扫描所有帐户并收取租金。Lamports降至零的帐户将自动删除，因为他们无法支付租金。如果一个帐户包含足够数量的Lamports，它将免收租金，并且不单独扣除租金。\r\n\r\nSolana的帐户分为以下两种类型，类似于以太坊：\r\n\r\n可执行帐户（程序帐户）：这些是存储代码的智能合约，通常更简单地称为“程序”。\r\n\r\n不可执行帐户（数据帐户）：这些可以接收令牌或数据，但不能执行代码，因为可执行变量设置为“false”。\r\n\r\n（*与以太坊不同，Solana使用“程序”而不是“合同”一词。）\r\n比较每个链中的帐户结构揭示了以下差异。\r\n\r\n\r\n![Screenshot 2024-06-20 at 7.37.12 AM.png](https://img.learnblockchain.cn/attachments/2024/06/NYEXl7W566736bac18903.png)\r\n\r\n那么，EOA和CA如何与Solana的帐户结构相对应？它们可以映射如下。\r\n\r\n\r\n![Screenshot 2024-06-20 at 7.38.25 AM.png](https://img.learnblockchain.cn/attachments/2024/06/rOaeOwCm66736bf4ddbc1.png)\r\n\r\n## 帐户抽象\r\n\r\n以太坊长期以来一直在探索帐户抽象的概念。以太坊有两种类型的帐户：EOA和CA，每种帐户都具有明显不同的功能。值得注意的是，合同账户（CA）无法生成或签署交易，导致重大限制。交易必须通过EOA发起和签署，这意味着使用21,000天然气的基本费用，并增加了帐户管理的复杂性。帐户抽象旨在消除这些限制，允许单个帐户同时执行EOA和合同帐户的功能。\r\n因此，可以对图表进行以下调整：\r\n\r\n- EOA → EOA（OK）\r\n- EOA → CA（OK）\r\n- EOA → CA → CA（OK）\r\n- EOA + CA（AA）→CA（现在，好的！）\r\n\r\n例如，multisig钱包或智能合约钱包需要将少量以太坊存储在单独的EOA中以支付交易费用，导致随着时间的推移不得不补充它的不便。帐户抽象允许单个帐户执行合同和签发交易，从而改善了这种不便。通过ERC-4337，Vitalik向社区提出了这个概念，并于2021年被采纳，现在在以太坊网络中实施。\r\n\r\n总之，帐户抽象提供了以下好处：\r\n\r\n- 其他人支付我的交易费用，或者我为其他人支付。\r\n- 使用ERC-20代币支付费用\r\n- 设置自定义安全规则。\r\n- 在密钥丢失的情况下恢复帐户。\r\n- 在受信任的设备或个人之间共享帐户安全。\r\n- 批量交易（例如，一次性授权和执行掉期）。\r\n- Dapp和钱包开发人员有更多机会创新用户体验。\r\n\r\n## 帐户抽象是否在索拉纳中实施？\r\n\r\nSolana自推出以来一直实施帐户抽象（AA）。如前所述，Solana将所有数据存储在称为“帐户”的单元中，分为可执行文件（程序帐户）和不可执行文件（数据帐户）。从一开始，Solana就支持程序创建和管理特定帐户（即直接发起交易）的能力。此功能扩展了Solana中的帐户抽象功能，被称为程序派生地址（PDA）。Solana程序与数据帐户不同，是包含可执行代码的可执行帐户。使用PDA，开发人员可以为交易签名设置规则和机制，允许代表Solana网络认可和批准的受控帐户（PDA）自主授权各种链上操作。因此，与以太坊不同，Solana允许直接控制另一个基于Solana程序的程序，而无需繁琐的分层。\r\n\r\n## 总结\r\n\r\nSolana的帐户概念构建了链上的所有数据，所有数据都基于帐户。\r\n\r\nSolana原生支持AA，允许在程序之间进行自调用。","title":"EVM与SVM：帐户  看看在以太坊和索拉纳上构建时帐户有何不同。"},"history":null,"timestamp":1718840686,"version":1}