Nodeos 使用之最佳实践
EOSIO平台在事务生命周期的不同阶段以不同的数据结构存储区块链信息。其中一些描述如下。生产节点是当前正在为区块链创建块的块生产者运行的nodeos
实例(每6秒更改一次,在切换到另一个生产者之前按顺序生成12个块)
Blockchain State and Storage
每个nodeos
实例都创建一些内部文件来保存区块链状态。这些文件位于~/eosio/nodeos/data
安装目录中,其用途如下所述:
当有新块写入磁盘时,向
blocks.log
追加日志,包含所有不可逆块。这些区块包含最终确认的交易。reversible_blocks
是一个内存映射文件,包含已写入区块链但尚未变为不可逆的块。这些块包含有效的推送事务,这些事务仍在等待通过协商一致协议确认为最终事务。头块是写入区块链的最后一个块,存储在reversible_blocks
。chain state
和chain database
当前被存储并缓存在内存映射文件中。它包含与每个区块关联的区块链状态,包括帐户详细信息、延迟交易和使用智能合约中的多索引表存储的数据。最后65536个块id也被缓存,以支持作为利害关系证明(TaPOS)的事务。事务ID/有效期也将被缓存,直到事务过期。pending block
是一个内存块,在处理事务并将其推送到块中时,它包含事务;这将/可能最终成为头块。如果nodeos
实例是生产节点,则pending block将被分发给其他nodeos
实例。在链状态之外,块数据被缓存在RAM中,直到它成为最终的/不可逆的;特别是签名块。在最后一个不可逆块(LIB)捕获到该块之后,然后从不可逆块日志中检索该块。
EOSIO Interfaces
EOSIO提供了一组服务和接口,这些服务和接口使合约开发人员能够跨操作(从而跨事务)边界持久化状态。合约可以将这些服务和接口用于各种目的。例如,eosio.token
合约为链数据库中的所有用户保存余额。nodeos
的每个实例都将数据库保存在内存中,因此合约可以轻松地读写数据。
Nodeos RPC API
nodeos
提供通过HTTP RPC API 方式访问链数据的请求。
Nodeos Read Modes
nodeos
服务可以在不同的“读”模式下运行。这些模式控制节点如何操作以及如何处理块和事务:
speculative
:包括已确认和未确认交易的副本。head
:只包括已确认交易的副本,不包括未确认交易。read-only
:此模式已弃用。通过组合选项可以实现类似的功能:read mode=head,p2p accept transactions=false,api accept transactions=false
。设置这些选项后,本地数据库将包含由链中事务到头块所做的状态更改。此外,通过P2P网络接收的事务不会被中继,并且事务不能通过链式API推送。irreversible
:此模式还包括已确认的事务,但最多不超过包含在最后一个不可逆块中的事务。
当nodeos
实例接收、处理并写入区块链上的一个块(即,它在头块或更早的块中)时,事务被视为已确认。
Speculative Mode
Head Mode
Read-Only Mode
Irreversible Mode
How To Specify the Read Mode
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 irvin.em@live.com。
文章标题:Nodeos 使用之最佳实践
文章字数:876
本文作者:dino
发布时间:2020-06-06, 00:28:51
最后更新:2020-06-07, 17:06:30
原始链接:https://blog.walkbc.com/2020/06/06/EOS-Nodeos-Usage-Implementation/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。
QQ交流群:273078549