IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> Fabric2.3 智能合约的打包及安装 -> 正文阅读

[区块链]Fabric2.3 智能合约的打包及安装

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完成的,所以如果智能合约代码有问题,错误信息将从链码返回。

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-09-26 10:12:56  更:2021-09-26 10:14:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:49:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码