区块链研究实验室|Hyperledger Fabric v2.1安装指南

  • 时间:
  • 浏览:48
  • 来源:区块链技术网

本次教程我们将在Linux机器上安装Hyperledger Fabric v2.1。在开始安装之前,我们要安装好一些条件环境。

安装Git:使用下面的命令安装最新版本的Git。

sudoapt-getinstallgit

安装cURL:使用以下命令安装最新版本的cURL。

sudoapt-getinstallcurl

安装wget:使用以下命令安装最新版本的wget。下载Fabric二进制文件将需要它。

sudoapt-getinstallwget

安装Docker和Docker Compose:使用以下命令安装最新版本的docker。然后将当前用户添加到docker组中。

sudoapt-get-yinstalldocker-composesudousermod-aGdocker${USER}===>logoutandloginareneededafteraddingdockergroup,

checkeverythingisokwiththecommandbelowid-nG

安装Go:使用下面的命令安装并解压缩1.14.x版本的Go。然后我们将go文件夹放到/usr/local目录下。

wgethttps://golang.org/dl/go1.14.2.linux-amd64.tar.gzsudotar-xvfgo1.14.2.linux-amd64.tar.gzsudochown-Rroot:root./gosudomvgo/usr/local

我们需要将go path添加到$path变量中,但是添加的内容在用户登录时总是被擦除。为了避免每次登录时执行该命令,我们打开.profile文件,该文件位于$HOME/.profile,将导出命令写入.profile文件的末尾。

sudogedit$HOME/.profileexportPATH=$PATH:/usr/local/go/bin

安装Node.js和NPM:使用以下命令下载并安装Node.js和NPM。我们可以安装版本8(支持8.9.4和更高版本)或版本10(支持10.15.3和更高版本)。

curl-sLhttps://deb.nodesource.com/setup_8.x|sudobash-sudoapt-getinstallnodejs

安装Python:使用以下命令安装2.7版的Python。另外,将使用node.js安装来安装相应的版本。

sudoapt-getinstallpython

就是这样,我们终于安装了所有需要的东西,我们将继续安装Fabric示例,二进制文件和docker映像。

安装fabric,Binaries和Docker映像

现在我们将使用以下命令安装Fabric示例,Binaries和docker映像。

curl-sSLhttp://bit.ly/2ysbOFE|bash-s

要安装特定的发行版,我们可以将版本标识符传递给curl命令,例如以下几行。

curl-sSLhttp://bit.ly/2ysbOFE|bash-s--<fabric_version><fabric-ca_version><thirdparty_version>curl-sSLhttp://bit.ly/2ysbOFE|bash-s--1.4.11.4.10.4.15

fabric-samples/bin文件夹保存了设置网络并将其放入克隆的repo所需的所有特定于平台的二进制文件,在curl命令之后如下图所示。

我们可以使用以下命令检查镜像。

dockerimages

测试Hyperledger Fabric网络

因为我们已经成功地安装了所需的一切,所以我们可以使用脚本部署和测试Hyperledger Fabric网络。

启动网络:我们转到fabric-samples / test-network目录,并使用脚本启动网络。

cdfabric-samples/test-network./network.shup=>weneedrootauthorizationif$USERisnotinDockergroup:sudo./network.shup

在这里,我们可能会面临以下警告:“本地结构二进制文件和docker映像不同步。这可能会引起问题”,并且出现错误“ Fabric Docker映像版本1.4.6与测试网络支持的版本不匹配”。如下图所示。

为了解决这个问题,我们首先通过执行以下命令,删除docker映像并仅提取映像,而无需克隆存储库和下载二进制文件。如果一切正常,我们将必须看到所有如下的hyperledger docker镜像。

dockerrmi$(dockerimages|grephyperledger)curl-sSLhttps://bit.ly/2ysbOFE|bash-s---s-b-

创建一个通道:我们可以使用createChannel子命令在Org1和Org2之间创建一个通道,将其同级加入该通道。

./network.shcreateChannel

如果我们不使用-c标志,它将使用默认名称mychannel创建频道,因此我们可以使用-c标志更改频道名称。

./network.shcreateChannel-c<channel_name>

如果命令成功,我们可以在下面看到消息。

部署链码:我们可以使用deployCC子命令来部署链码。

sudo./network.shdeployCC-ljavascript

deployCC子命令将在peer0.org1.example.com和peer0.org2.example.com上安装fabcar链码,然后将链码部署在使用channel标志指定的通道上。由于我们使用默认名称mychannel创建了一个频道,因此无需进行任何修改。

默认情况下,该脚本会安装fabcar链码的Go版本。如上所见,我使用语言标志-l来安装链式代码的javascript版本。可以在fabric-samples目录的chaincode文件夹中找到用不同语言编写的所有Fabcar链码。

使用Hyperledger Fabric 2.0,链代码的生命周期已更改,并且deployCC子命令提供了链代码,可以针对该新生命周期正确安装,部署和调用。

自从调用initLedger函数以来,chaincode将cars的初始列表放在分类帐中。如您在下面的代码中看到的,fabcar链码和cars JSON数组中的initLedger函数已被填充。然后每一个都使用一个putState方法放入分类帐。

asyncinitLedger(ctx){console.info('=============START:InitializeLedger===========');constcars=[{color:'blue',make:'Toyota',model:'Prius',owner:'Tomoko',},{color:'red',make:'Ford',model:'Mustang',owner:'Brad',},{color:'green',make:'Hyundai',model:'Tucson',owner:'JinSoo',},{color:'yellow',make:'Volkswagen',model:'Passat',owner:'Max',},{color:'black',make:'Tesla',model:'S',owner:'Adriana',},{color:'purple',make:'Peugeot',model:'205',owner:'Michel',},{color:'white',make:'Chery',model:'S22L',owner:'Aarav',},{color:'violet',make:'Fiat',model:'Punto',owner:'Pari',},{color:'indigo',make:'Tata',model:'Nano',owner:'Valeria',},{color:'brown',make:'Holden',model:'Barina',owner:'Shotaro',},];for(leti=0;i<cars.length;i++){cars[i].docType='car';awaitctx.stub.putState('CAR'+i,Buffer.from(JSON.stringify(cars[i])));console.info('Added<-->',cars[i]);}console.info('=============END:InitializeLedger===========');}

如果链码已正确安装、部署和调用,则您应在日志中看到与上面相同的以下汽车列表:

与网络交互:现在,我们将使用对等CLI,该CLI使我们可以从CLI调用已部署的智能合约,更新通道或安装和部署新的智能合约。在这里,我们只专注于与我们的网络进行交互。要添加已安装“安装示例”,“二进制文件”和“ Docker映像”部分的二进制文件,请使用以下命令。

exportPATH=${PWD}/../bin:${PWD}:$PATHexportFABRIC_CFG_PATH=$PWD/../config/exportCORE_PEER_TLS_ENABLED=trueexportCORE_PEER_LOCALMSPID="Org1MSP"exportCORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crtexportCORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/mspexportCORE_PEER_ADDRESS=localhost:7051

之后,我们可以从CLI查询分类帐。以下命令用于查询。它接受我们要查询的函数名称作为第一个参数,因此如果要查询的方法需要它,可以添加参数作为参数。通过queryCar函数获得编号为CAR9的汽车信息。

peerchaincodequery-Cmychannel-nfabcar-c'{"Args":["queryCar","CAR9"]}'

由于我们要更改资产,因此我们调用链码。当网络成员想要转移或更改分类账上的资产时,将调用链码。使用以下命令,我们通过调用changeCarOwner函数来更改编号为CAR9的汽车的所有者。

peerchaincodeinvoke-olocalhost:7050--ordererTLSHostnameOverrideorderer.example.com--tlstrue--cafile${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem-Cmychannel-nfabcar--peerAddresseslocalhost:7051--tlsRootCertFiles${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt--peerAddresseslocalhost:9051--tlsRootCertFiles${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt-c'{"function":"changeCarOwner","Args":["CAR9","Dave"]}'

如果命令已成功执行,则会看到Chaincode invoke successful. result: status:200message.

更改资产后,我们将像对Org1 peer一样添加二进制文件,以在其他peer上对其进行检查,并执行以下命令来定义变量。

exportCORE_PEER_TLS_ENABLED=trueexportCORE_PEER_LOCALMSPID="Org2MSP"exportCORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crtexportCORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/mspexportCORE_PEER_ADDRESS=localhost:9051

之后我们可以从CLI中以Org2 peer身份查询分类帐。以下命令用于查询,我们将看到CAR9的所有者已更改。

使用以下命令结束使用网络后,我们必须关闭网络。

./network.shdown

猜你喜欢

区块链研究实验室 | 深入了解FabCar:Hyperledger Fabric的完整应用程序示例(part1)

概述HyperledgerFabric附带了许多应用示例,其中FabCar是一个完整的端到端应用程序。完整的区块链应用程序有两部分代码:在Fabric网络内部署和执行的Chai

2021-11-29

深入了解FabCar:Hyperledger Fabric的完整应用程序示例(part2)

这是本系列的第2部分。在第1部分中,我们介绍了Fabcar是什么以及应用程序架构。在本部分中,我们将介绍链代码,了解它的结构并使用CLI模拟链代码函数的流。区块链研究实验室|深

2021-11-29

深入了解FabCar:Hyperledger Fabric的完整应用程序示例(part3)

我们已经讲解完了FabCar应用的Chaincode部分。现在我们继续前进到客户端部分。我们在第2部分中介绍如何使用SDK与Chaincode进行交互。区块链研究实验室|深入了

2021-11-29

区块链研究实验室|使用Hyperledger Composer和React.js构建保险应用程序-part2

在本节中,我们将介绍如何通过RESTfulAPI将HyperledgeFabric网络与Web应用程序集成,并使用react.js作为前端。本教程中构建的Web应用程序仅是保单

2021-11-29

区块链研究实验室|使用Hyperledger Composer和React.js构建保险应用程序-part3

接下来,我们要创建将用于显示和实现添加新资产的功能的组件。在组件中创建新组件AddAsset.js:importReact,{Component}from'react';imp

2021-11-29