Chaincode 有权限或事件的编码块时,究竟如何达成共识?
How exactly to make consensus when Chaincode has coding block of authority or event?
我阅读了协议规范https://github.com/hyperledger/fabric/blob/master/docs/protocol-spec.md#5-byzantine-consensus-1
我在想:
- 当 chaincode 拥有授权编码块时到底发生了什么?
- 当链码有事件编码块时到底发生了什么?
例如,A、B、C、D 是四个参与方,它们 运行 在四个验证节点上。
chaincode A 中有一个编码块的权限,只有甲方有权限 运行 该编码块。
而chaincode A中有一个event的编码块,只有A方才能得到event的结果。
所以只有甲方可以运行进入编码块。乙方、丙方、丁方不能运行进入编码块
PBFT如何在这种情况下对A、B、C、D达成共识?
考虑到上面的评论,这个问题可以改成这样:
“示例 asset_management.go 具有只能由“调用者”执行的“isCaller”方法。在这种情况下如何达成PBFT共识? ”
但是这个定义是不正确的,因为如果交易是用原始的“admin”证书签名的,所有A、B、C和D验证节点都可以在“transfer”、“assign”和“isCaller”中执行代码。
让我们通过这个例子逐步研究它。
- “asset_management.go”链码可以由任何角色为“client”的用户部署到账本
在部署过程中,在Init
方法中,该用户的证书将作为“admin”保存在账本中:
adminCert, err := stub.GetCallerMetadata()
...
stub.PutState("admin", adminCert)
当有人想要将 assign
或 transfer
交易提交到分类帐中时,他必须使用自己的证书签署此请求
- 此请求将传播到网络中的所有 VP。
每个 VP 都会从分类帐中加载“admin”证书,并将其与用于签署此特定请求的证书进行比较:
adminCertificate, err := stub.GetState("admin")
...
ok, err := t.isCaller(stub, adminCertificate)
如果证书不相同 - 在 PBFT 共识阶段,VPs 不会接受此请求。
如果证书 相同 - 所有 VPs 将知道此请求是由原始“调用者”签名的,并将继续执行链代码,因为他们拥有所有必要的这样做的信息。
我阅读了协议规范https://github.com/hyperledger/fabric/blob/master/docs/protocol-spec.md#5-byzantine-consensus-1
我在想:
- 当 chaincode 拥有授权编码块时到底发生了什么?
- 当链码有事件编码块时到底发生了什么?
例如,A、B、C、D 是四个参与方,它们 运行 在四个验证节点上。 chaincode A 中有一个编码块的权限,只有甲方有权限 运行 该编码块。 而chaincode A中有一个event的编码块,只有A方才能得到event的结果。
所以只有甲方可以运行进入编码块。乙方、丙方、丁方不能运行进入编码块
PBFT如何在这种情况下对A、B、C、D达成共识?
考虑到上面的评论,这个问题可以改成这样:
“示例 asset_management.go 具有只能由“调用者”执行的“isCaller”方法。在这种情况下如何达成PBFT共识? ”
但是这个定义是不正确的,因为如果交易是用原始的“admin”证书签名的,所有A、B、C和D验证节点都可以在“transfer”、“assign”和“isCaller”中执行代码。
让我们通过这个例子逐步研究它。
- “asset_management.go”链码可以由任何角色为“client”的用户部署到账本
在部署过程中,在
Init
方法中,该用户的证书将作为“admin”保存在账本中:adminCert, err := stub.GetCallerMetadata() ... stub.PutState("admin", adminCert)
当有人想要将
assign
或transfer
交易提交到分类帐中时,他必须使用自己的证书签署此请求- 此请求将传播到网络中的所有 VP。
每个 VP 都会从分类帐中加载“admin”证书,并将其与用于签署此特定请求的证书进行比较:
adminCertificate, err := stub.GetState("admin") ... ok, err := t.isCaller(stub, adminCertificate)
如果证书不相同 - 在 PBFT 共识阶段,VPs 不会接受此请求。
如果证书 相同 - 所有 VPs 将知道此请求是由原始“调用者”签名的,并将继续执行链代码,因为他们拥有所有必要的这样做的信息。