01. Hello Opcodes | WTF Academy
<aside>
💡 【内存】它支持以8或256 bit写入(MSTORE8
/MSTORE
),但只支持以256 bit读取(MLOAD
)。
【存储】EVM的账户存储(Account Storage)是一种映射(mapping,键值对存储),每个键和值都是256 bit的数据,它支持256 bit的读和写
</aside>
Details
存储方式
在以太坊中,"状态" 指的是所有账户的当前信息,包括每个账户的余额、存储数据、智能合约代码以及合约的内部状态(例如,变量的值)。EVM(以太坊虚拟机)维护和更新这个状态,以反映每笔交易和智能合约执行的结果。
EVM 维护全局状态的方式如下:
- 存储结构:以太坊使用一种名为 "Merkle Patricia Trie" 的数据结构来存储状态。这种结构使得数据的插入、更新和查找都非常高效,同时还支持快速生成和验证状态的加密证明。
- 状态转换:每当发生一笔交易时,EVM 根据交易的内容和当前的状态执行相应的状态转换。这可能包括更新账户余额、执行智能合约代码、修改合约存储等。
- 区块链和状态树:每个区块都包含一个指向当前全局状态树根的指针。随着新区块的加入,这个指针会更新以反映新的全局状态。
交易数据 & 状态数据
状态的增长
确实,随着时间的推移和交易的不断发生,以太坊的全局状态会不断增长。为了管理这种增长并维持网络的可持续性,以太坊采取了一些措施:
- 状态修剪:节点可以选择删除那些很久没有被使用的状态数据,以减少存储需求。
- 状态租赁(尚未实现):这是一个提议中的机制,旨在通过对状态存储空间收取费用来限制状态的增长。
- 分层解决方案:如第二层(L2)解决方案和分片技术,旨在通过将交易和状态存储分散到多个层或分片中来减轻主链的负担。
为什么要EVM,而不直接在Linux上?
- 隔离和安全性:EVM 的设计目标之一是提供一个隔离的执行环境。智能合约在 EVM 上运行时,被限制在一个受控的虚拟机中,无法直接访问底层操作系统或计算机的资源。这种隔离性提供了额外的安全性,防止智能合约对底层系统造成潜在的风险和漏洞。