【Hyperledger Fabric 学习】部署智能合约到通道上

本文档详细介绍了如何在Hyperledger Fabric网络中部署和管理智能合约。首先,介绍了Fabric链码生命周期,强调了组织在链码部署前的共识。接着,详细阐述了四个关键步骤:打包智能合约、安装链码包、批准链码定义以及提交链码定义到通道。此外,还提到了可选的Logspout工具,用于监控智能合约日志。整个过程涵盖了Go语言的链码打包、安装和升级,以及不同组织间的协作操作。
摘要由CSDN通过智能技术生成

HyperLedger Fabric官方文档

中文网址:https://hyperledger-fabric.readthedocs.io/zh_CN/latest
英文网址:https://hyperledger-fabric.readthedocs.io/en/latest
一般情况英文网址的内容更全面,版本也比中文新。

前言

终端用户通过调用智能合约与区块链账本进行交互。在 Hyperledger Fabric 中,智能合约部署在称为链码的包中。想要验证交易或查询账本的组织需要在其Peer节点上安装链码。在加入通道的节点上安装链码后,通道成员可以将链码部署到通道并使用链码中的智能合约在通道账本上创建或更新资产。

链码部署到通道使用称为 Fabric 链码生命周期的过程。Fabric 链码生命周期允许多个组织在链码用于创建交易之前就如何操作链码达成一致。例如,虽然背书策略指定了哪些组织需要执行链码来验证交易,但通道成员需要使用 Fabric 链码生命周期来就链码背书策略达成一致。有关如何在通道上部署和管理链代码的更深入概述,请参阅Fabric 链代码生命周期

使用Peer CLI部署asset-transfer-basic链码的四个步骤:

  • 第一步:打包智能合约
  • 第二步:安装链码包
  • 第三步:批准链码定义
  • 第四步:将链码定义提交到通道

设置Logspout(可选)
此步骤不是必需的,但对于排查链代码非常有用。要监控智能合约的日志,管理员可以使用该logspout工具查看一组 Docker 容器的聚合输出。该工具将来自不同 Docker 容器的输出流收集到一个位置,从而可以轻松地从单个窗口查看正在发生的事情。这可以帮助管理员在安装智能合约或开发人员调用智能合约时调试问题。由于某些容器纯粹是为了启动智能合约而创建的,并且只存在很短的时间,因此从您的网络收集所有日志会很有帮助。

Fabric 示例的目录中monitordocker.sh已经包含一个用于安装和配置 Logspout 的脚本,位于test-network目录中。Logspout 工具会不断地将日志流式传输到您的终端,因此您需要使用新的终端窗口。打开一个新终端并导航到该test-network目录。
cd fabric-samples/test-network

然后,您可以通过运行以下命令来启动 Logspout:
./monitordocker.sh fabric_test

打包智能合约

这里只介绍GO语言
在打包链码之前,我们需要安装链码依赖项。导航到包含资产转移(基本)链码的 Go 版本的文件夹。
cd fabric-samples/asset-transfer-basic/chaincode-go

该示例使用 Go 模块来安装链码依赖项。依赖项列在asset-transfer-basic/chaincode-go目录中的go.mod文件。

go.mod文件将 Fabric 合约 API 导入到智能合约包中。您可以打开asset-transfer-basic/chaincode-go/chaincode/smartcontract.go以查看如何使用合约 API 来定义SmartContract智能合约开头的类型:

// SmartContract provides functions for managing an Asset
type SmartContract struct {
   
    contractapi.Contract
}

然后,使用Smartcontract类型为在智能合约中定义的功能创建事务上下文,这些功能将数据读写到区块链账本。

// CreateAsset issues a new asset to the world state with given details.
func (s *SmartContract) CreateAsset(ctx contractapi.TransactionContextInterface, id string, color string, size int, owner string, appraisedValue int) error {
   
    exists, err := s.AssetExists(ctx, id)
    if err != nil 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值