超级账本结构链码签名和安装如何工作?



在超级账本结构设置中,参与网络的各种组织需要执行链码(假设每个组织都有一个背书者(。我的问题是关于链码的签名以防止篡改。我看到任何对等方都可以使用(例如(创建签名CDS

peer chaincode package -n mycc -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -v 0 -s -S -i "AND('OrgA.admin'(" ccpack.out

现在,我的问题是 1. 我们如何指定链码应该由所需数量的所有者签名,我没有看到任何可以指定所有者的参数? 2. 我如何验证链码是否已由所有者签名,即通过查看 CDS 进行验证? 3. 我们如何确保每个所有者是否都部署了实际的签名版本并且没有被篡改链码?

谢谢

-S 选项指示进程使用由文件 .yaml 中的 localMspid 属性的值标识的 MSP 对包进行签名。

ChaincodeDeploymentSpec可以选择由集体所有者签名,以创建SignedChaincodeDeploymentSpec(或SignedCDS(。签名光盘包含 3 个元素:

CDS 包含链码的源代码、名称和版本。 链码的实例化策略,表示为背书策略。 链码所有者列表,通过背书定义。 参见:https://hyperledger-fabric.readthedocs.io/en/stable/chaincode4noah.html

链码包签名的目的与您想象的略有不同。假设您是主要的频道管理员,您的频道中有 50 个组织。只有您可以执行链码更新,但是两个组织非常重要,除非他们批准,否则您不得进行任何更改。为了确保满足此条件,您准备一个新的链码包,将自己设置为可以实例化它的唯一实体:

peer chaincode package -n mycc -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -v 0 -s -S -i "AND('OrgA.admin')" ccpack.out

您将此包发送给必须接受它的两个组织。一周后,你让他们重新签名。您手动确保签名正确,并且包裹未被篡改(如果是,您可以立即看到它,因为您在发送包裹之前已经对包裹进行了签名(。对它们进行签名对您来说也是一个信号,即这些组织已经在其背书节点上安装了链码,并且它们已准备好进行实例化。在确保一切正常之后,您实例化链码。

最新更新