HyperLedger的共识之背书策略(三)

作者: Elli Androulaki, Christian Cachin, Angelo De Caro, Konstantinos Christidis, Chet Murthy, Binh Nguyen, Alessandro Sorniotti, and Marko Vukolić

翻译:梧桐树

原文:https://github.com/hyperledger/fabric/blob/master/proposals/r1/Next-Consensus-Architecture-Proposal.md

著权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文约1500字+,阅读(观看)需要9分钟

3.1. 背书策略规范

背书策略是会对交易进行背书的条件。背书策略是链码安装的时候deploy交易指定的。只有根据策略背书策略过的交易才是有效的。链码的调用交易会先获取满足链码策略的背书,否则是提交不了的。这是通过请求节点和背书节点之间的交互完成的,在第2部分已经介绍过了。

形式上,背书策略是对交易、背书和可能有的下一步状态判断是TRUE或者FALSE的断言。部署交易的背书策略是从系统层面的策略获取的(比如,从系统链码获取)。

形式上,背书策略是关于特定变量的断言。实际上,它可以是:

  1. 链码相关的键或者标识符(链码的元数据里面能找到),比如,背书节点集合;

  2. 更多的链码元数据;

  3. 交易本身的元素;

  4. 可能还有其他的。

背书策略断言的评估必须是确定性的。背书策略不能是复杂的,也不能是“小的链码(mini chaincode)”。背书策略规范语言必须是有限的,并且要能够增加确定性。

断言列表是由简单到丰富,复杂性是由易到难的。就是说,支持只有键和节点标识符的策略是相对比较简单的。

待办:确定背书策略的参数。

断言可能会包含结果是TRUE或者FALSE的逻辑表达式。一般情况下,这个条件里会包含链码背书节点对交易调用签发的数字签名。

假设链码指定了一个背书节点集合E = {Alice, Bob, Charlie, Dave, Eve, Frank, George},一些示范性的策略:

  • E集合所有元素的有效签名。

  • E集合任意一个元素的有效签名。

  • 满足(Alice OR Bob) AND (any two of: Charlie, Dave, Eve, Frank, George)这个条件的背书节点的有效签名。

  • 7个背书节点中任意5个的有效签名。(更通用的情况是,有n > 3f个背书节点的链码,需要n个背书节点中有2f+1个有有效签名,或者任意一个超过(n+f)/2个背书节点的组有有效签名。)。

  • 假设背书节点都有一个“投注”或者“权重”,比如{Alice=49, Bob=15, Charlie=15, Dave=10, Eve=7, Frank=3,George=1},总投注是100:策略要求多数投注集合的有效签名(即,一个总投注严格大于50的组),比如任何和George不一样X的{Alice, X},或者{除开Alice的所有人}等等。

  • 上面的例子里投注可以是静态的(链码的元数据里写死的)或者动态的(比如,依赖链码的状态并且可以在执行过程中修改)。

这些策略能起到多少作用还依赖于应用,对有背书节点失效或者破坏时期望的恢复力,还有其他不同的属性。

3.2. 实现

通常情况下,背书策略会根据背书节点要求的签名来制定。链码的元数据必须要包含相应的签名验证密钥。

通常,背书是由一组签名组成的。每个Peer节点或者能获取到链码元数据(包含签名验证密钥)的投票节点都可以本地验证背书,因为它们不需要和其他节点进行交互。节点也不需要访问状态才能验证背书。

链码其他元数据的背书也可以用同样的方法验证。

待办:形式化背书策略,设计具体的实现。

文章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表区块链兄弟赞同其观点或证实其描述。

本文由 区块链技术网 作者:作者: Elli Androulaki, Christian Cachin, Angelo De Caro, Konstantinos Christidis, Chet Murthy, Binh Nguyen, Alessandro Sorniotti, and Marko Vukolić 发表,其版权均为 区块链技术网 所有,文章内容系作者个人观点,不代表 区块链技术网 对观点赞同或支持。如需转载,请注明文章来源。