实例化交易调用生命周期系统链码(LSCC)来创建和初始化通道上的链码。这是一个链码信道绑定过程:链码可以绑定到任何数量的信道,并且在每个信道上单独和独立地操作。换句话说,无论链码可能被安装和实例化了多少其他频道,状态将与交易提交的频道保持隔离。
实例化交易的创建者必须满足SignedCDS中包含的链码的实例化策略,并且还必须是通道上的写入器,它被配置为通道创建的一部分。这对于通道的安全性很重要,以防止流氓实体部署链式代码或欺骗成员来执行未绑定通道上的链式代码。
例如,请记住,默认实例化策略是任何MSP管理员通道,因此链码实例化事务的创建者必须是通道管理员的成员。当交易建议到达代理人时,它会根据实例化策略来验证创建者的签名。在提交到分类帐之前,在事务验证期间再次完成此操作。
实例交易还在该频道上设置了该代码的认可政策。认可政策描述了渠道成员接受的交易结果的认证要求。
例如,使用CLI实例化sacc chaincode并用john和0初始化状态,命令如下所示:
peer chaincode instantiate -n sacc -v 1.0 -c '{"Args":["john","0"]}' -P "OR ('Org1.member','Org2.member')"
注意认可政策(CLI使用抛光符号),这需要Org1或Org2的任何成员的所有交易的认可。也就是说,Org1或Org2必须对sacc执行Invoke的结果进行签名,以使事务生效。
在成功实例化之后,链码在通道上进入活动状态,并准备处理ENDORSER_TRANSACTION类型的任何交易提案。这些交易在到达支持对等体时同时处理。
链码实例化实现的整体流程图如下: