当前位置:首页 » 《关注互联网》 » 正文

Fabric2.3 智能合约的打包及安装_JAY的博客

27 人参与  2022年01月13日 13:42  分类 : 《关注互联网》  评论

点击全文阅读


Fabric2.3 智能合约的打包及安装

  • 打包智能合约
  • 安装链码包

打包智能合约

我们需要先打包链码,然后才能将其安装到我们的peer节点上。要注意的是,如果要安装的智能合约是用 Go,JavaScript,TypeScript 语言写的话,这三种语言打包的过程是不一样的。 这里主要介绍的是Go语言。(如果有想看其它语言的可以评论区留言)

在我们打包链码前,我们需要安装链码相关依赖项。在Fabric samples目录下找到文件夹asset-transfer-basic/chaincode-go

// 进入指定目录
cd fabric-samples/asset-transfer-basic/chaincode-go

这里我们使用 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 导入到智能合约包中。可以把asset-transfer-basic/chaincode-go/chaincode/smartcontract.go在文本编辑器中打开,查看SmartContract智能合约开始时如何使用合约 API 定义类型:

// 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 {
        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)
}

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

GO111MODULE=on go mod vendor

如果命令成功,go 包将安装在一个vendor文件夹中。

现在我们有了我们的依赖项,我们可以创建链码包。导航回test-network文件夹中的工作目录,以便我们可以将链代码与其他网络打包在一起。

cd ../../test-network

可以使用peerCLI 创建所需格式的链码包。该peer二进制文件所在的bin文件夹处于fabric-samples目录下。使用以下命令将这些二进制文件添加到您的 CLI 路径:

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

然后还需要将FABRIC_CFG_PATH设置为指向存储库fabric-samples中的core.yaml文件:

export FABRIC_CFG_PATH=$PWD/../config/

要确认可以使用peerCLI,请检查二进制文件的版本。二进制文件需要版本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标志用于指定链代码语言--path标志提供智能合约代码的位置。该路径必须是完全路径或相对于您当前工作目录的路径。--label标志用于指定一个链码标签,该标签将在安装后标识打包的链码。建议标签包含链码名称和版本。

现在我们创建了链码包,我们可以在测试网络的对等节点上安装链码

安装链码包

在我们打包asset-transfer (basic)的智能合约后,我们可以在我们的peer上安装链码。链码需要安装在每个需要对交易的进行背书的peer节点上。因为我们要将背书策略设置为要求来自 Org1 和 Org2 的背书,所以我们需要在两个组织运营的节点上安装链码:

1. peer0.org1.example.com
2. peer0.org2.example.com

让我们先在 Org1 节点上安装链码。设置以下环境变量,以peerOrg1 管理员用户身份操作CLI。CORE_PEER_ADDRESS将被设置为指向peerORG1,即peer0.org1.example.com

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051

执行 peer lifecycle chaincode install 命令以在 peer 上安装链码:

peer lifecycle chaincode install basic.tar.gz

如果命令成功,peer 将生成并返回包标识符。此包 ID 将用于在下一步中批准链码。成功的话应该会看到类似于以下内容的输出:

2020-07-16 10:09:57.534 CDT [cli.lifecycle.chaincode] submitInstallProposal -> INFO 001 Installed remotely: response:<status:200 payload:"\nJbasic_1.0:e2db7f693d4aa6156e652741d5606e9c5f0de9ebb88c5721cb8248c3aead8123\022\tbasic_1.0" >
2020-07-16 10:09:57.534 CDT [cli.lifecycle.chaincode] submitInstallProposal -> INFO 002 Chaincode code package identifier: basic_1.0:e2db7f693d4aa6156e652741d5606e9c5f0de9ebb88c5721cb8248c3aead8123

我们现在可以在 Org2 节点上安装链码。设置以下环境变量以作为 Org2 管理员操作并定位 Org2 peer,peer0.org2.example.com

export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051

执行 peer lifecycle chaincode install 命令以在 peer 上安装链码:

peer lifecycle chaincode install basic.tar.gz

安装链码的时候这个搭建的过程是由peer完成的,所以如果智能合约代码有问题,错误信息将从链码返回。


点击全文阅读


本文链接:http://zhangshiyu.com/post/33179.html

安装  合约  打包  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1