Fabric 环境安装
我安装的时候遇到很多问题,也不会解决,我就是将fabric文件夹删除重新下,然后一步步再按,反正最后是能运行。
官网的安装方法http://hyperledger-fabric.readthedocs.io/en/latest/build_network.html
1.Go语言安装
sudo apt-get install golang
sudo vim ~/.bashrc
结尾输入以下
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
export GOPATH=$HOME/MyGo
重启终端输入go env 查看配置是否成功
<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"
o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="图片_x0020_6" o:spid="_x0000_i1043" type="#_x0000_t75"
style='width:414.75pt;height:249.75pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
具体环境变量配置参考window上的
2.Docker安装
sudo apt install docker.io //docker安装
sudo usermod -aG docker $USER //更改用户权限
sudo service docker start //启动docker
chmod 777 /var/run/docker.sock //进入root操作
3.Docker-compose安装
sudo apt install python-pip
sudo pip install docker-compose
4.Fabric安装
4.1.Fabric源码下载
先在GOPATH路径下建立以下文件夹
<!--[if gte vml 1]><v:shape id="图片_x0020_8" o:spid="_x0000_i1042" type="#_x0000_t75"
style='width:320.25pt;height:31.5pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
进入hyperLedger文件夹下在终端输入:
git clone https://github.com/hyperledger/fabric.git //从github上下载fabric
下载完成后hyperLedger文件夹下会多出一个fabric文件夹
4.2. Fabric Docker镜像的下载
进入如下文件夹
<!--[if gte vml 1]><v:shape id="图片_x0020_9" o:spid="_x0000_i1041" type="#_x0000_t75"
style='width:369pt;height:33.75pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image005.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
输入
source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0
文件较大,等待
下载完成后输入 docker images 可查看下载好的镜像
<!--[if gte vml 1]><v:shape id="图片_x0020_10" o:spid="_x0000_i1040" type="#_x0000_t75"
style='width:414.75pt;height:198.75pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image007.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
4.3. 启动Fabric网络并完成ChainCode的测试
依旧在e2e_cli文件夹下运行终端输入
./network_setup.sh up
正常运行完出现如下界面,其中运行内容参考hyperledger技术与应用一书
<!--[if gte vml 1]><v:shape id="图片_x0020_1" o:spid="_x0000_i1039" type="#_x0000_t75"
style='width:414.75pt;height:185.25pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image009.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
4.4. 测试Fabric网络
在官方例子中,channel名字是mychannel,链码的名字是mycc。我们首先进入CLI,我们重新打开一个命令行窗口,输入:
docker exec -it cli bash
查询a账户的余额:
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
可看出现在余额为90
<!--[if gte vml 1]><v:rect id="矩形_x0020_12"
o:spid="_x0000_s1027" style='position:absolute;left:0;text-align:left;
margin-left:.3pt;margin-top:95.5pt;width:69pt;height:9.75pt;z-index:251658240;
visibility:visible;mso-wrap-style:square;mso-wrap-distance-left:9pt;
mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;
mso-wrap-distance-bottom:0;mso-position-horizontal:absolute;
mso-position-horizontal-relative:text;mso-position-vertical:absolute;
mso-position-vertical-relative:text;v-text-anchor:middle' o:gfxdata="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
SwUGAAAAAAUABQBnAQAAnwwAAAAA
" filled="f" strokecolor="red" strokeweight="2.25pt"/><![endif]--><!--[if !vml]--><!--[endif]--><!--[if gte vml 1]><v:shape id="图片_x0020_2" o:spid="_x0000_i1038" type="#_x0000_t75"
style='width:414.75pt;height:119.25pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image012.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]-->
<!--[endif]-->
把a账户的余额再转20元给b账户
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -c '{"Args":["invoke","a","b","20"]}'
<!--[if gte vml 1]><v:shape id="图片_x0020_3" o:spid="_x0000_i1037" type="#_x0000_t75"
style='width:414.75pt;height:167.25pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image014.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
再次查询a的余额
<!--[if gte vml 1]><v:rect id="矩形_x0020_13"
o:spid="_x0000_s1026" style='position:absolute;left:0;text-align:left;
margin-left:1.05pt;margin-top:92.65pt;width:69pt;height:9.75pt;z-index:251659264;
visibility:visible;mso-wrap-style:square;mso-wrap-distance-left:9pt;
mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;
mso-wrap-distance-bottom:0;mso-position-horizontal:absolute;
mso-position-horizontal-relative:text;mso-position-vertical:absolute;
mso-position-vertical-relative:text;v-text-anchor:middle' o:gfxdata="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
c1BLBQYAAAAABQAFAGcBAAChDAAAAAA=
" filled="f" strokecolor="red" strokeweight="2.25pt"/><![endif]--><!--[if !vml]--><!--[endif]--><!--[if gte vml 1]><v:shape id="图片_x0020_4" o:spid="_x0000_i1036" type="#_x0000_t75"
style='width:414.75pt;height:110.25pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image017.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]-->
<!--[endif]-->
4.5. 关闭fabric网络
依旧在e2e_cli文件夹下运行终端输入
./network_setup.sh down
<!--[if gte vml 1]><v:shape id="图片_x0020_5" o:spid="_x0000_i1035" type="#_x0000_t75"
style='width:414.75pt;height:153pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image019.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
5. 生成公私钥和证书
进入fabric文件夹下运行
make cryptogen
<!--[if gte vml 1]><v:shape id="图片_x0020_11" o:spid="_x0000_i1034" type="#_x0000_t75"
style='width:414.75pt;height:93.75pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image021.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
进入examples/e2e_cli/文件夹下运行
../../build/bin/cryptogen generate --config=./crypto-config.yaml
<!--[if gte vml 1]><v:shape id="图片_x0020_12" o:spid="_x0000_i1033" type="#_x0000_t75"
style='width:414.75pt;height:42pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image023.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
<!--[if !supportLists]-->6. <!--[endif]-->生成创世区块和Channel配置区块
进入fabric文件夹下运行
make configtxgen
<!--[if gte vml 1]><v:shape id="图片_x0020_13" o:spid="_x0000_i1032" type="#_x0000_t75"
style='width:414.75pt;height:89.25pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image025.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
6.1. 生成创世区块
进入examples/e2e_cli/文件夹下运行
../../build/bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
6.2. 生成Channel配置区块
../../build/bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
../../build/bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP
../../build/bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP
运行完后可在channel-artifacts文件夹中看见如下文件
<!--[if gte vml 1]><v:shape id="图片_x0020_15" o:spid="_x0000_i1031" type="#_x0000_t75"
style='width:308.25pt;height:84.75pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image027.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
<!--[if !supportLists]-->7. <!--[endif]-->配置Fabric环境的docker-compose文件
Orderer的配置是在base/docker-compose-base.yaml里面
Peer的配置是在base/docker-compose-base.yaml和peer-base.yaml里面
CLI在整个Fabric网络中扮演客户端的角色,我们在开发测试的时候可以用CLI来代替SDK,执行各种SDK能执行的操作。CLI会和Peer相连,把指令发送给对应的Peer执行。CLI的配置在docker-compose-cli.yaml中
我们这里全部采用默认配置,只把CLI中的command: /bin/bash -c './scripts/script.sh ${CHANNEL_NAME}; sleep $TIMEOUT' 这行注释掉,后面我们手动执行。
我们要安装的ChainCode都是在fabric/examples/chaincode/go目录下,以后我们要开发自己的ChainCode,只需要把我们的代码复制到该目录即可
<!--[if !supportLists]-->8. <!--[endif]-->初始化Fabric环境
8.1. 启动Fabric环境的容器
docker-compose -f docker-compose-cli.yaml up -d
<!--[if gte vml 1]><v:shape id="图片_x0020_16" o:spid="_x0000_i1030" type="#_x0000_t75"
style='width:414.75pt;height:165.75pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image029.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
8.2. 创建Channel
现在我们要进入cli容器内部,在里面创建Channel。先用以下命令进入CLI内部Bash:
docker exec -it cli bash
创建Channel的命令是peer channel create,我们前面创建Channel的配置区块时,指定了Channel的名字是mychannel,那么这里我们必须创建同样名字的Channel
ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls true --cafile $ORDERER_CA
<!--[if gte vml 1]><v:shape id="图片_x0020_17" o:spid="_x0000_i1029" type="#_x0000_t75"
style='width:414.75pt;height:33.75pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image031.png"
o:title="" croptop="55726f"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
8.3. 各个Peer加入Channel
CLI默认连接的是peer0.org1 那么将其加入运行如下
peer channel join -b mychannel.block
其他的就需要修改CLI的环境变量,使其指向另外的Peer。比如我们要把peer1.org1加入mychannel
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ADDRESS=peer1.org1.example.com:7051
peer channel join -b mychannel.block
<!--[if gte vml 1]><v:shape id="图片_x0020_18" o:spid="_x0000_i1028" type="#_x0000_t75"
style='width:414.75pt;height:42.75pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image033.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
同样的方法,将peer0.org2加入mychannel:
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ADDRESS=peer0.org2.example.com:7051
peer channel join -b mychannel.block
最后把peer1.org2加入mychannel:
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ADDRESS=peer1.org2.example.com:7051
peer channel join -b mychannel.block
<!--[if !supportLists]-->9. <!--[endif]-->链上代码的安装与运行
以上,整个Fabric网络和Channel都准备完毕,接下来我们来安装和运行ChainCode
链上代码的安装需要在各个相关的Peer上进行,对于我们现在这种Fabric网络,如果4个Peer都想对Example02进行操作,那么就需要安装4次。
我们先切换到peer0.org1这个节点
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
使用peer chaincode install命令可以安装指定的ChainCode并对其命名:
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
9.1 Instantiate ChainCode实例化链上代码
实例化链上代码主要是在Peer所在的机器上对前面安装好的链上代码进行包装,生成对应Channel的Docker镜像和Docker容器。并且在实例化时我们可以指定背书策略。我们运行以下命令完成实例化:
peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
<!--[if gte vml 1]><v:shape
id="图片_x0020_19" o:spid="_x0000_i1027" type="#_x0000_t75" style='width:415.5pt;
height:39pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image035.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]-->
<!--[endif]-->
9.2 在一个Peer上查询并发起交易
查询a账户
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
<!--[if gte vml 1]><v:shape
id="图片_x0020_20" o:spid="_x0000_i1026" type="#_x0000_t75" style='width:415.5pt;
height:57.75pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image037.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]-->
<!--[endif]-->
a账户的10元转给b
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc -c '{"Args":["invoke","a","b","10"]}'
<!--[if gte vml 1]><v:shape
id="图片_x0020_21" o:spid="_x0000_i1025" type="#_x0000_t75" style='width:414.75pt;
height:47.25pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\ADMINI~1.BJX\AppData\Local\Temp\msohtmlclip1\01\clip_image039.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
同样我们可以在org2节点下操作,首先给peer0.org2安装链上代码:
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ADDRESS=peer0.org2.example.com:7051
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
其他操作同上
相关推荐
hyperledger_fabric环境安装参考手册,主要针对新手的建议安装配置
### 前置环境安装 在开始安装 Fabric 之前,需要确保系统已经安装了一些必要的软件包。这些包括 `pip`、`curl` 和 `git`,它们是开发环境中常用的工具。在 CentOS 7 系统中,可以使用以下命令进行安装: ```bash ...
在“hyperledger-fabric环境”中,`hyperledger-fabric1.0`指的是Hyperledger Fabric的1.0版本。这个版本是Fabric项目的一个早期稳定版本,引入了许多核心特性,包括通道(Channels)、排序服务(Ordering Service)...
区块链fabric1.0环境搭建手册,完整配置流程,以及启动脚本等
在“fabric安装”这个主题中,我们将深入探讨如何在Python环境中安装和配置Fabric。首先,你需要确保你的系统已经安装了Python,因为Fabric是Python的一个库。通常,Python 2.7或更高版本(推荐使用Python 3.x)是...
在开始安装 Fabric 之前,确保您的系统环境已经准备好,并且满足 Fabric 的最低要求。由于 Fabric 是一个用于执行远程命令的任务自动化工具,主要用于简化通过 SSH 连接的服务器管理任务,因此它依赖于 Python 和...
本文将详细介绍如何在Fabric 2.2环境中安装和使用Hyperledger Explorer。 首先,我们关注的是Blockchain-Explorer的1.1.2版本,这是与Fabric 2.2兼容的一个稳定版本。你可以通过以下链接下载:...
在虚拟机Ubuntu上,部署hyperledger fabric 的环境搭建
Hyperledger Fabric 搭建 mac and centos7 压缩包包含 1.boot2docker.iso version:17.09.1-ce 2.fabric 官方例子 3.mac and centos7 一键安装脚本
在Ubuntu16.04系统上的Fabric环境搭建,包括创建网络,链码(合约)的安装等。
fabric前期硬件资源准备、必要软件环境、源码安装、测试网络调测、blockchain-explore部署、合约部署实践【待续】
网络有时访问不了链接地址,可以直接分析这个脚本内容,从而下载及安装配置Fabric网络的测试环境。脚本中引用的下载文件:hyperledger-fabric-linux-amd64-2.4.4.tar.gz 及hyperledger-fabric-ca-linux-amd64-1.5.5....
【超级账本Hyperledger Fabric环境搭建】 Hyperledger Fabric是一个企业级的开源区块链框架,由Linux基金会托管,旨在提供一个可扩展、安全且私有的区块链解决方案。在CentOS 7操作系统上搭建Hyperledger Fabric的...
"Hyperledger Fabric开发环境搭建(MacOS系统)" 在本文中,我们将讲述如何在MacOS系统上搭建Hyperledger Fabric开发环境。 Hyperledger Fabric是基于区块链技术的开源项目,旨在提供一个通用的分布式账本解决方案...
总的来说,部署Hyperledger Fabric环境涉及多个步骤,包括虚拟机的安装、Ubuntu和Docker的配置、源的更换,以及Hyperledger Fabric组件的安装和网络的创建。通过这个过程,我们可以搭建一个本地的区块链网络,用于...
区块链 Hyperledger Fabric v1.3 环境搭建,从环境准备到合约安装全流程。
本篇将详细介绍如何在CentOS 7.2系统上进行基础环境的部署,包括Docker的安装、GO语言环境的配置、Fabric环境的搭建以及运行e2e_cli测试案例。 首先,确保你的Linux内核版本不低于3.10,这是HyperLedger Fabric 1.1...
Hyperledger Fabric 是用 Go 语言编写的,因此需要先安装 Go 语言环境。 **步骤:** 1. **下载 Go 安装包:** ```bash wget https://studygolang.com/dl/golang/go1.13.4.linux-amd64.tar.gz ``` 2. **解压...
本文档旨在详细介绍如何在本地搭建一个用于测试的Hyperledger Fabric环境,并集成fabric-java-sdk进行功能测试。我们将按照以下步骤进行: 1. **安装Java Development Kit (JDK)** 2. **安装Apache Maven** 3. **...
7. **安装和实例化链码**:链码是Fabric中的智能合约,需要在每个参与的Peer节点上安装,并在一个或多个通道上实例化。 8. **进行交易**:通过调用`peer chaincode invoke`或`peer chaincode query`命令,进行链码的...