美文网首页
[eos29]nodeos-使用-nodeos实现

[eos29]nodeos-使用-nodeos实现

作者: FriendOfTime | 来源:发表于2020-04-13 20:27 被阅读0次

    https://developers.eos.io/manuals/eos/latest/nodeos/usage/nodeos-implementation

    eosio平台在交易的各个阶段会通过各种数据结构存储区块链信息。生产节点被区块生产者运行。

    1、 区块链状态和存储

    每个nodeos实例都会创建一些内部文件来维护区块链状态。这些文件路径和详细情况如图:

    此处主要关注data文件夹中的内容。

    ps:此处我本机展示的文件和官网上描述的并不完全一致,不过还是按照官网的描述来说明。

        1、block.log是写到磁盘上,每次追加块日志,包括所有不可逆块

        2、reversible_blocks是内存映射文件,包括已经写到区块链中但还没有变成不可逆状态的块,此处应该和data/reversible/shard_memory.bin文件对应

        3、chain state或者database是内存映射文件,存储每个块的区块链状态(账号详情,延迟交易,交易,在智能合约中使用多索引存储的数据)。一旦块变成不可逆,就不会再缓存到chian state。

        4、pending block是一个内存块,即存储在内存中区块,包括被打包进区块中的交易,这个块可能会变成head block。如果nodeos实例正在生产区块,pending block会被同步到其他nodeos实例。

        5、head block是最后一个被写进区块链中的,存储在reversible_blocks

    2. nodeos读模式

    EOSIO提供了一组服务和接口,使合约开发人员能够跨操作(从而跨事务)边界持久化状态。

    合约为了实现不同的目的,可以使用这些服务和接口。例如,eosio.token维护数据库中的所有用户的余额信息。每个nodeos实例在内存中维护数据库信息(此处应该是指所有用户的余额信息),因此合约可以读写数据。

    nodeos也通过提供HTTP RPC API接口来访问数据。

    然而,在任何特定时间,可以由多种正确方式查询数据:

           1、推测性(speculative):包括确认和未确认交易的副作用

            2、头(head):仅仅包括确认交易的副作用,这种模式会处理未确认交易,但不包括他们

            3、只读(read-only):仅仅包括确认交易的副作用

            4、不可逆(irreversible):仅包括最后一个不可逆块之前的确认交易的副作用

    所谓确认交易,是指位于head block或者在它之前的块中所包含的交易。

    综上,从1到4到来看,模式越来越严,可查的范围越来越小。

    2.1 推测性

    如上所述,推测性模式包括节点收到的任何交易,包括未确认的交易,即未包含到区块链中的交易。该模式具有低延迟,高脆弱性。不能保证交易最终会被包含进区块链中。

    nodeos能够执行带有TaPoS(基于权益证明的交易)的交易,这些TaPoS指向这个节点认为最好的fork中的任何有效块(不理解)。

    2.2 头

    因为head block还没变成不可逆状态,如果nodeos切换到一个更好的fork,该模式下的状态可能是不精确。

    该模式在延迟性和数据一致性之间有好的权衡。

    2.3 只读

    2.4 不可逆

    该模式也会跟踪fork db中的块,但是状态落后于当前最好的head block。

    3. 如何设置读模式

    在eosio::chain_plugin插件中通过--read-mode设置。

    相关文章

      网友评论

          本文标题:[eos29]nodeos-使用-nodeos实现

          本文链接:https://www.haomeiwen.com/subject/pjfomhtx.html