zoukankan      html  css  js  c++  java
  • Ledger

    分类帐是所有状态转换的有序,防篡改记录(说白了就是日志)。 状态转换是参与方提交的链码调用(“交易/事务”)的结果。 每个事务都会生成一组资产键值对,这些键值对作为创建,更新或删除提交到分类帐。

    分类帐由区块链(“链”)组成,用于以块的形式存储不可变的顺序记录,以及状态数据库以维持当前状态。 每个频道有一个分类帐。 每个peer为其所属的每个通道维护一个分类帐的副本。

    Chain

    该链是一个事务日志,结构为散列链接块,其中每个块包含一系列N个事务。 块头包括块的事务的散列,以及先前块的头的散列。 通过这种方式,分类账上的所有交易都按顺序排列并以加密方式链接在一起。 换句话说,在不破坏哈希链接的情况下,不可能篡改分类帐数据。 最新块的哈希值表示之前的每个事务,从而可以确保所有peers处于一致且可信的状态。

    链存储在peer文件系统(本地或附加存储)上,有效地支持区块链工作负载的仅附加性质。

    State Database

    分类帐的当前状态数据表示链事务日志中包含的所有密钥/键的最新值。由于当前状态表示通道已知的所有最新密钥/键值,因此有时将其称为世界状态。

    Chaincode调用针对当前状态数据执行事务。为了使这些链码交互非常有效,所有密钥/键的最新值都存储在状态数据库中。状态数据库只是链的事务日志的索引视图,因此可以随时从链中重新生成。在接受事务之前,状态数据库将在peer启动时自动恢复(或在需要时生成)。

    状态数据库选项包括LevelDB和CouchDB。 LevelDB是嵌入在peer进程中的默认状态数据库,并将链码数据存储为键值对。 CouchDB是一个可选的替代外部状态数据库,当您的链代码数据建模为JSON时,它提供额外的查询支持,允许对JSON内容进行丰富的查询。

    Transaction Flow

    在高层次上,事务流程由应用程序客户端发送给特定认可的peer的事务提议组成。支持peer验证客户端签名,并执行链码功能以模拟事务。输出是链码结果,在链代码(读取集)中读取的一组键值版本,以及用链代码(写入集)写入的键/值集。提议响应将与认可/背书签名一起发送回客户端。

    客户端将认可/背书汇总到事务有效负载中并将其广播到orderer服务。orderer服务将有序交易作为块传递给通道上的所有peers。

    在提交之前,peers将验证事务。首先,他们将检查背书/认可策略,以确保指定peer的正确分配已经签署了结果,并根据事务有效负载对签名进行身份验证。

    其次,peer将对事务/交易读取集执行版本控制检查,以确保数据完整性并防止诸如双重开销之类的威胁。 Hyperledger Fabric具有并发控制,由此事务并行执行(由背书/认可人执行)以增加吞吐量,并且在提交(由所有peers)时,每个事务都经过验证,以确保没有其他事务已修改已读取的数据。换句话说,它确保在链代码执行期间读取的数据自执行(认可)时间以来没有改变,因此执行结果仍然有效并且可以提交到分类帐状态数据库。如果已读取的数据已被另一个事务更改,则块中的事务将标记为无效,并且不会应用于分类帐状态数据库。客户端应用程序会收到警报,并可以根据警报处理错误或重试。

    此文来源于官网http://hyperledger-fabric.readthedocs.io/en/release-1.1/ledger.html

  • 相关阅读:
    如何用Android Studio打多包名APK
    EventBus框架在Android多Pane(Fragment)中的应用
    Android WebView使用深入浅出
    dp和px转换
    android button minheight问题
    Java链式编程接口
    Java多线程共享变量控制
    一致性Hash算法
    ARP (地址解析协议)
    FTP下载导致Zip解压失败的原因
  • 原文地址:https://www.cnblogs.com/apolov-fabric/p/9284491.html
Copyright © 2011-2022 走看看