Hyperledger fabric部署链码(一)打包链码

1 启动测试网络

我们将从部署 Fabric 测试网络实例开始。开始之前,请参照上文部署测试环境。使用以下命令导航到本地fabric-samples库中的测试网络目录:

cd fabric-samples/test-network

从零开始前,我们将确保fabric测试环境已关闭

./network.sh down

使用以下命令启动fabric测试环境

./network.sh up createChannel

createChannel命令创建了一个名为 mychannel 的通道,该通道有两个成员:Org1 和 Org2。该命令还将属于每个组织的一个对等·peer加入通道。如果网络和通道创建成功,你可以在日志中看到以下打印信息:

========= Channel successfully joined ===========

现在,我们可以使用peer CLI,通过以下步骤将asset-transfer (basic)链码部署到通道:

  • 打包链码
  • 部署链码
  • 批准链码定义
  • 提交链码定义到channel

2、设置日志输出(可选)

这一步不是必需的,但对排除 chaincode 故障非常有用。要监控智能合约的日志,可以使用 logspout 工具查看一组 Docker 容器的汇总输出。该工具将不同 Docker 容器的输出流收集到一个地方,可以很容易地从窗口看到正在发生记录。有效帮助我们在部署智能合约时调试bug,或帮助开发人员在调用智能合约时调试bug。由于有些容器纯粹是为了启动智能合约而创建的,只存在很短的时间,因此收集网络中的所有日志会很有帮助。

Fabric 示例的 test-network 目录中已包含用于安装和配置 Logspout 的脚本 monitordocker.sh。Logspout 工具会不断向终端发送日志流,因此需要使用新的终端窗口。打开一个新终端并导航到 test-network 目录。

cd fabric-samples/test-network

然后运行以下命令启动 Logspout:

./monitordocker.sh fabric_test

你应该会看到类似下面的输出:

Starting monitoring on all containers on the network net_basic
Unable to find image 'gliderlabs/logspout:latest' locally
latest: Pulling from gliderlabs/logspout
4fe2ade4980c: Pull complete
decca452f519: Pull complete
ad60f6b6c009: Pull complete
Digest: sha256:374e06b17b004bddc5445525796b5f7adb8234d64c5c5d663095fccafb6e4c26
Status: Downloaded newer image for gliderlabs/logspout:latest
1f99d130f15cf01706eda3e1f040496ec885036d485cb6bcc0da4a567ad84361

一开始不会看到任何日志,但当我们部署链码后,情况就会发生变化。将终端窗口变宽、字体变小可能会有帮助。

3、打包链码(智能合约)

对 chaincode 进行打包,然后才能将其部署到我们的对等peer上。如果要安装用 Go、JavaScript 或 Typescript 编写的智能合约,步骤会有所不同。本文以Go语言为例.

打包 chaincode 之前,我们需要安装chaincode的依赖项。导航到asset-transfer (basic) chaincode目录

cd fabric-samples/asset-transfer-basic/chaincode-go

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

$ cat go.mod
module github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go

go 1.14

require (
        github.com/golang/protobuf v1.3.2
        github.com/hyperledger/fabric-chaincode-go v0.0.0-20200424173110-d7076418f212
        github.com/hyperledger/fabric-contract-api-go v1.1.0
        github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e
        github.com/stretchr/testify v1.5.1
)

该go.mod文件中引用了Fabric合约API,我们可以在智能合约开头定义智能合约类型:

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

智能合约类型随后用于为智能合约中定义的函数创建交易上下文,这些函数负责向区块链账本读写数据。

// 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 {
		return err
	}
	if exists {
		return fmt.Errorf("the asset %s already exists", id)
	}

	asset := Asset{
		ID:             id,
		Color:          color,
		Size:           size,
		Owner:          owner,
		AppraisedValue: appraisedValue,
	}
	assetJSON, err := json.Marshal(asset)
	if err != nil {
		return err
	}

	return ctx.GetStub().PutState(id, assetJSON)
}

您可以访问官方文档了解有关 Go 合约 API 的更多信息。

要安装智能合约依赖项,请在 asset-transfer-basic/chaincode-go 目录下运行以下命令。

GO111MODULE=on go mod vendor

如果命令成功执行,go 软件包将安装在vendor文件夹内。

接下来开始打包智能合约,先导航回到 test-network 文件夹

cd ../../test-network

您可以使用peer CLI 按所需格式创建链码包。对等二进制文件位于 fabric-samples 资源库的 bin 文件夹中。使用以下命令将这些二进制文件添加到 CLI 路径中:

export PATH=${PWD}/../bin:$PATH

还需要设置 FABRIC_CFG_PATH,使其指向 fabric-samples 资源库中的 core.yaml 文件:

export FABRIC_CFG_PATH=$PWD/../config/

要确认能否使用peer CLI,请检查二进制文件的版本。要运行本教程,二进制文件必须是 2.0.0 或更高版本。

peer version

现在可以用命令peer lifecycle chaincode package创建链码包:

peer lifecycle chaincode package basic.tar.gz --path ../asset-transfer-basic/chaincode-go/ --lang golang --label basic_1.0

该命令将在当前目录下创建一个名为 basic.tar.gz 的链码包。

  • –lang标志用于指定 chaincode 语言
  • –path 标志提供智能合约代码的位置。路径必须是完全限定路径或与当前工作目录相对的路径。
  • –label标志用于指定chaincode标签,以便在安装后识别你的chaincode。建议标签包含链码名称和版本。
    现在我们创建了 chaincode 软件包,可以在测试网络的peer上安装 chaincode(见下篇)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值