摘要
Monad 全节点提供对所有历史交易数据(区块、交易、收据、事件和 trace)的访问。 Monad 全节点不提供对任意历史状态的访问。有一个特殊的 RPC 服务位于提供对历史数据的访问。该服务的以下方法支持引用历史状态的查询:
背景
区块链是有状态的系统;主要有两种数据:- 交易数据(交易列表及其产物);以及
- 状态数据(世界的当前状态,由按顺序应用这些交易得出;存储在 merkle trie 中)。
- 区块
- 交易
- 执行这些交易产生的收据
- 智能合约在执行过程中发出的事件(日志)
- 每笔交易执行的详细 trace
- 每个账户的原生代币余额
- 每个智能合约的存储映射(将存储槽映射到值)
INSERT 或 UPDATE 查询都是一笔交易。
如果表足够小,那么缓存表的每个新版本可能是可行的,但如果是一个大表,您可能只能访问当前版本。
以下描述了 Monad 中的历史数据访问:
交易数据
Monad 全节点提供对所有历史交易数据(区块、交易、收据、事件和 trace)的访问。1状态
在以太坊中,“全节点”提供当前区块以及最多 128 个区块前每个区块的链状态, 而”归档节点”提供自创世以来每个区块的链状态。也就是说,以太坊的”归档节点”是配置不同的全节点, 运行在具有大磁盘的机器上。此术语在此处有进一步描述。 在 Monad 中,从每个节点尽可能多地维护历史每区块状态 trie 的意义上讲, 每个”全节点”都是一个”归档节点”。这意味着回溯深度取决于 RPC 提供商选择的磁盘大小。 对于 2 TB SSD,最近这大约对应于 40,000 个区块,尽管这取决于每个区块中的状态差异量。 由于 Monad 的高吞吐量,全节点不提供对任意历史状态的访问,因为这将需要过多的存储。2eth_call 等方法可以引用直到状态 trie 被驱逐的近期状态。
编写智能合约时,建议使用事件记录任何以后需要的状态,或使用智能合约索引器
在链下计算它。

