我阅读了协议规范https://github.com/hyperledger/fabric/blob/master/docs/protocol-spec.md#5-byzantine-consensus-1
我想知道:
例如,A,B,C,D是四方,它们运行在四个验证对等方。 链码A中存在权限的编码块,只有A方有权运行编码块。 并且在链码A中存在事件的编码块,只有A方可以获得事件的结果。
因此只有A方可以进入编码区。乙方,C,D不能进入编码区。
PBFT如何在这种情况下就A,B,C,D达成共识?
答案 0 :(得分:0)
考虑到上述评论,这个问题可以改为:
“示例asset_management.go具有”isCaller“方法,该方法只能由”调用者“执行。在这种情况下如何达成PBFT共识? “
但是这个定义是不正确的,因为如果事务是用原始的“admin”证书签名的话,所有A,B,C和D验证对等方都可以在“transfer”,“assign”和“isCaller”中执行代码。
让我们来看看这个例子,一步一步地研究它。
在部署期间,在Init
方法中,此用户的证书将作为“admin”保存在分类帐中:
adminCert, err := stub.GetCallerMetadata()
...
stub.PutState("admin", adminCert)
当有人想将assign
或transfer
交易提交到分类帐时,他必须使用自己的证书签署此请求
每个VP都会从分类帐中加载“admin”证书,并将其与用于签署此特定请求的证书进行比较:
adminCertificate, err := stub.GetState("admin")
...
ok, err := t.isCaller(stub, adminCertificate)
如果证书不相同 - 在PBFT共识阶段,VP将不接受此请求。
如果证书相同 - 所有VP都知道此请求是由原始“调用者”签名的,并且将继续执行链代码,因为他们拥有所有必要的信息。