fabric2.2环境搭建,链码部署至通道

这篇具有很好参考价值的文章主要介绍了fabric2.2环境搭建,链码部署至通道。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 Fabric-X86
1.查看虚拟机环境

uname -a 

显示X86架构 centos7发行版本
fabric2.2环境搭建,链码部署至通道

2.源码克隆
选定位置进行GitHub代码克隆,命令为

git clone https://github.com/hyperledger/fabric.git

fabric2.2环境搭建,链码部署至通道

克隆成功后生成文件夹fabric,源码克隆成功

在fabric目录切换版本至V2.2.5

cd fabric
git checkout v2.2.5

3.golang版本升级
根据要求部署fabric2.2.5版本,go的版本需要最低达到1.14.1版本
下载安装包

wget https://storage.googleapis.com/golang/go1.19.3.linux-amd64.tar.gz

解压至固定位置

tar -xvf go1.19.3.linux-amd64.tar.gz -C /usr/local/

配置环境变量

vi /etc/profile

末尾添加

export GOROOT=/usr/local/go
export GOPATH=/root/go
export PATH=$PATH:/usr/local/go/bin

刷新环境变量:

source /etc/profile

查看go版本信息

go version

fabric2.2环境搭建,链码部署至通道

4.拉取fabric镜像
进入 /fabric/scripts 目录

cd fabric/scripts/

修改 bootstrap.sh 脚本

vi bootstrap.sh

fabric2.2环境搭建,链码部署至通道
完整脚本:

#!/bin/bash
#
# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#

# if version not passed in, default to latest released version
VERSION=2.2.5
# if ca version not passed in, default to latest released version
CA_VERSION=1.5.0
ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')")
MARCH=$(uname -m)

printHelp() {
    echo "Usage: bootstrap.sh [version [ca_version]] [options]"
    echo
    echo "options:"
    echo "-h : this help"
    echo "-d : bypass docker image download"
    echo "-s : bypass fabric-samples repo clone"
    echo "-b : bypass download of platform-specific binaries"
    echo
    echo "e.g. bootstrap.sh 2.2.5 1.5.2 -s"
    echo "will download docker images and binaries for Fabric v2.2.5 and Fabric CA v1.5.2"
}

# dockerPull() pulls docker images from fabric and chaincode repositories
# note, if a docker image doesn't exist for a requested release, it will simply
# be skipped, since this script doesn't terminate upon errors.

dockerPull() {
    #three_digit_image_tag is passed in, e.g. "1.4.7"
    three_digit_image_tag=$1
    shift
    #two_digit_image_tag is derived, e.g. "1.4", especially useful as a local tag for two digit references to most recent baseos, ccenv, javaenv, nodeenv patch releases
    two_digit_image_tag=$(echo "$three_digit_image_tag" | cut -d'.' -f1,2)
    while [[ $# -gt 0 ]]
    do
        image_name="$1"
        echo "====> hyperledger/fabric-$image_name:$three_digit_image_tag"
        docker pull "hyperledger/fabric-$image_name:$three_digit_image_tag"
        docker tag "hyperledger/fabric-$image_name:$three_digit_image_tag" "hyperledger/fabric-$image_name"
        docker tag "hyperledger/fabric-$image_name:$three_digit_image_tag" "hyperledger/fabric-$image_name:$two_digit_image_tag"
        shift
    done
}

cloneSamplesRepo() {
    # clone (if needed) hyperledger/fabric-samples and checkout corresponding
    # version to the binaries and docker images to be downloaded
    if [ -d first-network ]; then
        # if we are in the fabric-samples repo, checkout corresponding version
        echo "===> Checking out v${VERSION} of hyperledger/fabric-samples"
        git checkout v${VERSION}
    elif [ -d fabric-samples ]; then
        # if fabric-samples repo already cloned and in current directory,
        # cd fabric-samples and checkout corresponding version
        echo "===> Checking out v${VERSION} of hyperledger/fabric-samples"
        cd fabric-samples && git checkout v${VERSION}
    else
        echo "===> Cloning hyperledger/fabric-samples repo and checkout v${VERSION}"
        git clone -b master https://github.com/hyperledger/fabric-samples.git && cd fabric-samples && git checkout v${VERSION}
    fi
}

# This will download the .tar.gz
download() {
    local BINARY_FILE=$1
    local URL=$2
    echo "===> Downloading: " "${URL}"
    curl -L --retry 5 --retry-delay 3 "${URL}" | tar xz || rc=$?
    if [ -n "$rc" ]; then
        echo "==> There was an error downloading the binary file."
        return 22
    else
        echo "==> Done."
    fi
}

pullBinaries() {
    echo "===> Downloading version ${FABRIC_TAG} platform specific fabric binaries"
    download "${BINARY_FILE}" "https://github.com/hyperledger/fabric/releases/download/v${VERSION}/${BINARY_FILE}"
    if [ $? -eq 22 ]; then
        echo
        echo "------> ${FABRIC_TAG} platform specific fabric binary is not available to download <----"
        echo
        exit
    fi

    echo "===> Downloading version ${CA_TAG} platform specific fabric-ca-client binary"
    download "${CA_BINARY_FILE}" "https://github.com/hyperledger/fabric-ca/releases/download/v${CA_VERSION}/${CA_BINARY_FILE}"
    if [ $? -eq 22 ]; then
        echo
        echo "------> ${CA_TAG} fabric-ca-client binary is not available to download  (Available from 1.1.0-rc1) <----"
        echo
        exit
    fi
}

pullDockerImages() {
    command -v docker >& /dev/null
    NODOCKER=$?
    if [ "${NODOCKER}" == 0 ]; then
        FABRIC_IMAGES=(peer orderer ccenv tools)
        case "$VERSION" in
        1.*)
            FABRIC_IMAGES+=(javaenv)
            shift
            ;;
        2.*)
            FABRIC_IMAGES+=(nodeenv baseos javaenv)
            shift
            ;;
        esac
        echo "FABRIC_IMAGES:" "${FABRIC_IMAGES[@]}"
        echo "===> Pulling fabric Images"
        dockerPull "${FABRIC_TAG}" "${FABRIC_IMAGES[@]}"
        echo "===> Pulling fabric ca Image"
        CA_IMAGE=(ca)
        dockerPull "${CA_TAG}" "${CA_IMAGE[@]}"
        echo "===> List out hyperledger docker images"
        docker images | grep hyperledger
    else
        echo "========================================================="
        echo "Docker not installed, bypassing download of Fabric images"
        echo "========================================================="
    fi
}

DOCKER=true
SAMPLES=true
BINARIES=true

# Parse commandline args pull out
# version and/or ca-version strings first
if [ -n "$1" ] && [ "${1:0:1}" != "-" ]; then
    VERSION=$1;shift
    if [ -n "$1" ]  && [ "${1:0:1}" != "-" ]; then
        CA_VERSION=$1;shift
        if [ -n  "$1" ] && [ "${1:0:1}" != "-" ]; then
            THIRDPARTY_IMAGE_VERSION=$1;shift
        fi
    fi
fi

# prior to 1.2.0 architecture was determined by uname -m
if [[ $VERSION =~ ^1\.[0-1]\.* ]]; then
    export FABRIC_TAG=${MARCH}-${VERSION}
    export CA_TAG=${MARCH}-${CA_VERSION}
    export THIRDPARTY_TAG=${MARCH}-${THIRDPARTY_IMAGE_VERSION}
else
    # starting with 1.2.0, multi-arch images will be default
    : "${CA_TAG:="$CA_VERSION"}"
    : "${FABRIC_TAG:="$VERSION"}"
    : "${THIRDPARTY_TAG:="$THIRDPARTY_IMAGE_VERSION"}"
fi

BINARY_FILE=hyperledger-fabric-${ARCH}-${VERSION}.tar.gz
CA_BINARY_FILE=hyperledger-fabric-ca-${ARCH}-${CA_VERSION}.tar.gz

# then parse opts
while getopts "h?dsb" opt; do
    case "$opt" in
        h|\?)
            printHelp
            exit 0
            ;;
        d)  DOCKER=false
            ;;
        s)  SAMPLES=false
            ;;
        b)  BINARIES=false
            ;;
    esac
done

if [ "$SAMPLES" == "true" ]; then
    echo
    echo "Clone hyperledger/fabric-samples repo"
    echo
#    cloneSamplesRepo
fi
if [ "$BINARIES" == "true" ]; then
    echo
    echo "Pull Hyperledger Fabric binaries"
    echo
#    pullBinaries
fi
if [ "$DOCKER" == "true" ]; then
    echo
    echo "Pull Hyperledger Fabric docker images"
    echo
    pullDockerImages
fi

修改完毕后运行脚本拉取镜像

 ./bootstrap.sh

查看拉取的镜像

docker images

fabric2.2环境搭建,链码部署至通道

5.启动测试网络
将 bin 和 config 复制到 fabric-samples 目录下:

[root@localhost ~]# cp -r bin/ fabric-samples/
[root@localhost ~]# cp -r config/ fabric-samples/

将 fabric-samples 的 bin 加入路径PATH:

vi /etc/profile
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin:/root/fabric-samples/bin
source /etc/profile

到test-network目录下运行启动脚本

./network.sh up

fabric2.2环境搭建,链码部署至通道

Fabric测试网络启动成功

关闭测试网络
./network.sh down
fabric2.2环境搭建,链码部署至通道

6.将智能合约部署到通道
创建通道

./network.sh up createChannel

该命令创建一个以两个通道成员 Org1 和 Org2 命名的通道
fabric2.2环境搭建,链码部署至通道

使用Java链码,打包智能合约

进入Java文件夹

cd fabric-samples/chaincode/fabcar/java

安装智能合约依赖项

./gradlew installDist

fabric2.2环境搭建,链码部署至通道

命令成功,能够在文件夹中找到构建的智能合约

使用 CLI 创建所需格式的链码包

cd ../../../test-network

二进制文件添加到 CLI 路径

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

检查二进制文件的版本

peer version

fabric2.2环境搭建,链码部署至通道

创建链码包

peer  lifecycle  chaincode  package fabcar.tar.gz --path ../chaincode/fabcar/java/build/
install/fabcar --lang java --label fabcar_1

安装链码包

在 Org1 上安装链码,设置以下环境变量以 Org1 管理员用户身份操作 CLI

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节点上安装链码

peer lifecycle chaincode install fabcar.tar.gz

fabric2.2环境搭建,链码部署至通道

在 Org2 上安装链码,以下环境变量设置以Org2为管理员和目标

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_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 fabcar.tar.gz

fabric2.2环境搭建,链码部署至通道

批准链码定义

peer lifecycle chaincode queryinstalled

返回包id,在下一步骤需要使用
fabric2.2环境搭建,链码部署至通道

使用包id,设置环境变量

export CC_PACKAGE_ID=fabcar_1:cf8172d318266bd1e58a4112c32340b14c1fbf4d787824c4f312dae9a701bc0d

分发给其他节点

peer  lifecycle  chaincode  approveformyorg -o  localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

fabric2.2环境搭建,链码部署至通道

设置以下环境变量以 Org1 管理员身份运行

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

批准链码定义为 Org1

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverrideorderer.example.com --channelID mychannel --name fabcar --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

fabric2.2环境搭建,链码部署至通道

将链码定义提交到通道

peer lifecycle  chaincode  checkcommitreadiness--channelID mychannel --name fabcar --version 1.0 --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json

fabric2.2环境搭建,链码部署至通道

提交命令将链码定义提交到通道

peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 1.0 --sequence 1 --tls --cafile${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

fabric2.2环境搭建,链码部署至通道

通过查询提交命令来确认链码定义已提交到通道

peer lifecycle chaincode querycommitted --channelID mychannel --name fabcar --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

返回链码定义的序列和版本

调用链码

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabcar --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"initLedger","Args":[]}'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DXe6sv7x-1670986981448)(在这里插入图片描述)]fabric2.2环境搭建,链码部署至通道

使用查询函数来读取由链码创建的汽车集

peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'

fabric2.2环境搭建,链码部署至通道文章来源地址https://www.toymoban.com/news/detail-468886.html

到了这里,关于fabric2.2环境搭建,链码部署至通道的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Fabric 超级账本学习【5】Fabric2.4网络环境下——搭建Hyperledger Fabric区块链浏览器

    博主最近在搭建Hyperledger Fabric区块链浏览器过程中也学习了很多博主的搭建流程,踩了很多雷,踩了很多 坑,现将成功搭建好的Hyperledger Fabric区块链浏览器详细流程分享如下,帮助大家避雷闭坑 Hyperledger Explorer 是一个简单,强大,易于使用,维护良好的开源实用程序,可浏

    2023年04月23日
    浏览(50)
  • 【fabric2.4】使用java sdk访问虚拟机里面的区块链网络上的链码

    链码中的函数名和参数名需要大写,不然是private无法访问 记录一下做实验写论文时,如何使用fabric2.4的java sdk 执行ccp-generate脚本,能够在指定路径下获取当前网络的配置文件,这是第一步 看看本机的IP地址和虚拟机的IP地址,互相ping一下看看能不能ping通 把一些需要的文件拷

    2024年02月15日
    浏览(41)
  • Hyperledger Fabric网络环境手动配置及其链码自动化部署

    目录 5.1 网络环境的搭建 5.1.1 生成组织结构与身份证书 5.1.2 生成创世区块和通道 5.1.3 启动Fabric网络 5.1.4  创建Fabric-SDK-GO对象并建立通道 5.1.5  Fabric-SDK-Go实现链码的自动部署 5.2 链码实现 5.1.1 生成组织结构与身份证书 Hyperledger Fabric框架通过采用大量的证书确保系统交易(签名

    2023年04月22日
    浏览(58)
  • 4.创建和加入通道相关(network.sh脚本createChannel函数分析)[fabric2.2]

    fabric的test-network例子有一个orderer组织、两个peer组织、每个组织一个节点,只有系统通道(system-channel),没有其他应用通道。我们可以使用./network.sh createChannel命令来创建一个名为mychannel的应用通道。 通道用于实现区块链网络中业务的隔离,一个联盟可以有多个通道,每个通

    2024年02月11日
    浏览(44)
  • Fabric:链码的部署及执行

    Hyperledger Fabric:V2.5.4 使用Fabric搭建自定义网络参考:https://blog.csdn.net/yeshang_lady/article/details/134113296 使用Fabric创建应用通道参考:https://blog.csdn.net/yeshang_lady/article/details/134668458 接下来将介绍如何在自定义的网络和通道上部署以及执行链码。 Fabric中链码的部署一般包括以下步骤

    2024年02月04日
    浏览(49)
  • Fabric链码部署-go语言

    最近在搞Fabric,今天刚刚明白如何把自己的链码部署并能跑通 网上的中文教程完全不友好,上来直接开始写代码,我连新建什么文件夹都不知道啊!! 于是痛定思痛,爆肝了一周多的官方文档 准备自己写一个,以便帮助后来人 看懂这个教程需要两条要求: 1、会复制粘贴

    2024年02月04日
    浏览(42)
  • Centos7 Fabric2.4 网络搭建(三)

    提示:上一篇文章讲到创建通道,orderer用osnadmin指令激活通道,peer加入通道,然后更新锚节点,现在安装链码 目录 前言 一、主脚本中安装链码 二、deployCC.sh  2.1 链码  2.2 打包链码 2.3 在peer节点上安装链码 2.4 批准链码定义 2.5 将链码定义提交到通道 2.6 调用链码 第一部分

    2024年02月07日
    浏览(39)
  • hyperledger fabric2.4.0基础搭建到区块链浏览器搭建

    基础环境借鉴  如下博客地址安装成功Ubuntu20.04下安装fabric2.4环境 从零开始超详细步骤【亲测有效】及Hyperledger Explorer安装_小草cys的博客-CSDN博客_ubuntu安装fabricq 区块链浏览器借鉴如下博客配置成功 2021-05-02-fabric浏览器搭建_Soulmate_666的博客-CSDN博客_搭建fabric浏览器 config.json

    2024年02月11日
    浏览(41)
  • 万字解析——区块链hyperledger fabric2.2部署实战教程

    本教程在ubuntu20版本下运行,请在执行操作前先部署ubuntu20环境,所有部署都按照官方文档hyperledger fabric进行,在运行过程中遇到的问题,我也会逐个说明,如果你对于区块链还不太了解,请先查阅区块链概念,文中若有理解不对的地方,欢迎批评指正。 Hyperledger Fabric 是 Hy

    2024年02月03日
    浏览(42)
  • 以docker swarm方式在两个树莓派之间搭建fabric2.2

    前提是可以单机运行test-network示例网络 网络结构: 主机IP 组织 节点 192.168.3.8(host1) org1 orderer.example.com 192.168.3.8(host1) org1 peer0.org1.example.com 192.168.3.10(host2) org2 peer0.org2.example.com 部署过程: 1.搭建swarm网络 在host1中执行: host1中执行获取其他机器连接的manager命令: 此时终端显

    2023年04月15日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包