超级账本 hyperledger fabric v2.x 安装与搭建一个测试网络

官方安装教程:https://hyperledger-fabric.readthedocs.io/en/latest/install.html

1、安装docker,docker-compose,golang
	docker版本号:20.10.1
	docker-compose版本号:1.24.1
	golang版本号:1.15.5
2、Download the latest release of Fabric samples, docker images, and binaries
	(1)由于网络被墙,链接可能无法打开,如果没VPN跳过此步骤:
		$ curl -sSL https://bit.ly/2ysbOFE | bash -s]
	(2)打开下面的链接,新建bootstrap.sh文件,并把网页的内容复制进去:
		# https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh
		$ chmod -R 0777 bootstrap.sh
		$ ./bootstrap.sh
		================================打印日志开始================================
		root@aa:~/block# ./bootstrap.sh 

		Clone hyperledger/fabric-samples repo

		===> Cloning hyperledger/fabric-samples repo
		Cloning into 'fabric-samples'...
		remote: Enumerating objects: 8272, done.
		remote: Counting objects: 100% (547/547), done.
		remote: Compressing objects: 100% (347/347), done.
		remote: Total 8272 (delta 248), reused 410 (delta 190), pack-reused 7725
		Receiving objects: 100% (8272/8272), 4.91 MiB | 10.21 MiB/s, done.
		Resolving deltas: 100% (4282/4282), done.
		fabric-samples v2.3.3 does not exist, defaulting to main. fabric-samples main branch is intended to work with recent versions of fabric.

		Pull Hyperledger Fabric binaries

		===> Downloading version 2.3.3 platform specific fabric binaries
		===> Downloading:  https://github.com/hyperledger/fabric/releases/download/v2.3.3/hyperledger-fabric-linux-amd64-2.3.3.tar.gz
		  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
										 Dload  Upload   Total   Spent    Left  Speed
		100   680  100   680    0     0   2645      0 --:--:-- --:--:-- --:--:--  2635
		100 69.2M  100 69.2M    0     0   594k      0  0:01:59  0:01:59 --:--:-- 4830k
		==> Done.
		===> Downloading version 1.5.2 platform specific fabric-ca-client binary
		===> Downloading:  https://github.com/hyperledger/fabric-ca/releases/download/v1.5.2/hyperledger-fabric-ca-linux-amd64-1.5.2.tar.gz
		  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
										 Dload  Upload   Total   Spent    Left  Speed
		100   652  100   652    0     0   1179      0 --:--:-- --:--:-- --:--:--  1179
		100 25.4M  100 25.4M    0     0  19251      0  0:23:08  0:23:08 --:--:-- 17463
		==> Done.

		Pull Hyperledger Fabric docker images
		FABRIC_IMAGES: peer orderer ccenv tools baseos
		===> Pulling fabric Images
		====> hyperledger/fabric-peer:2.3.3
		2.3.3: Pulling from hyperledger/fabric-peer
		Digest: sha256:fc9a143aaf528e407817baf658aff3b258f632464ad32bcfd0d17054b352b782
		Status: Image is up to date for hyperledger/fabric-peer:2.3.3
		docker.io/hyperledger/fabric-peer:2.3.3
		====> hyperledger/fabric-orderer:2.3.3
		2.3.3: Pulling from hyperledger/fabric-orderer
		Digest: sha256:e5192e8619b9b0abd03ec6ce8babe65493d7db7e71faee3c1c8714bddf19b507
		Status: Image is up to date for hyperledger/fabric-orderer:2.3.3
		docker.io/hyperledger/fabric-orderer:2.3.3
		====> hyperledger/fabric-ccenv:2.3.3
		2.3.3: Pulling from hyperledger/fabric-ccenv
		Digest: sha256:e95a727aed88456b496a4e4b1ddbc77e81c26a0cc7ff234c7d3d085dafd637cd
		Status: Image is up to date for hyperledger/fabric-ccenv:2.3.3
		docker.io/hyperledger/fabric-ccenv:2.3.3
		====> hyperledger/fabric-tools:2.3.3
		2.3.3: Pulling from hyperledger/fabric-tools
		Digest: sha256:634c66833a264939b9920cfa0a47b028c20b39475d0bc7ca02841137ea2c4e86
		Status: Image is up to date for hyperledger/fabric-tools:2.3.3
		docker.io/hyperledger/fabric-tools:2.3.3
		====> hyperledger/fabric-baseos:2.3.3
		2.3.3: Pulling from hyperledger/fabric-baseos
		Digest: sha256:3af16c343deaa5b837e2581b6b72523643e8572fd2981ed6bfea4a9fbf43bd20
		Status: Image is up to date for hyperledger/fabric-baseos:2.3.3
		docker.io/hyperledger/fabric-baseos:2.3.3
		===> Pulling fabric ca Image
		====> hyperledger/fabric-ca:1.5.2
		1.5.2: Pulling from hyperledger/fabric-ca
		Digest: sha256:faa3b743d9ed391c30f518a7cc1168160bf335f3bf60ba6aaaf1aa49c1ed023e
		Status: Image is up to date for hyperledger/fabric-ca:1.5.2
		docker.io/hyperledger/fabric-ca:1.5.2
		===> List out hyperledger docker images
		hyperledger/fabric-ca        1.5                 4ea287b75c63        7 weeks ago         69.8MB
		hyperledger/fabric-ca        1.5.2               4ea287b75c63        7 weeks ago         69.8MB
		hyperledger/fabric-ca        latest              4ea287b75c63        7 weeks ago         69.8MB
		hyperledger/fabric-tools     2.3                 98fa0bfb0fd2        7 weeks ago         445MB
		hyperledger/fabric-tools     2.3.3               98fa0bfb0fd2        7 weeks ago         445MB
		hyperledger/fabric-tools     latest              98fa0bfb0fd2        7 weeks ago         445MB
		hyperledger/fabric-peer      2.3                 a491b5ab42f6        7 weeks ago         53.3MB
		hyperledger/fabric-peer      2.3.3               a491b5ab42f6        7 weeks ago         53.3MB
		hyperledger/fabric-peer      latest              a491b5ab42f6        7 weeks ago         53.3MB
		hyperledger/fabric-orderer   2.3                 9e1952b8840d        7 weeks ago         35.4MB
		hyperledger/fabric-orderer   2.3.3               9e1952b8840d        7 weeks ago         35.4MB
		hyperledger/fabric-orderer   latest              9e1952b8840d        7 weeks ago         35.4MB
		hyperledger/fabric-ccenv     2.3                 56fa403e02ee        7 weeks ago         502MB
		hyperledger/fabric-ccenv     2.3.3               56fa403e02ee        7 weeks ago         502MB
		hyperledger/fabric-ccenv     latest              56fa403e02ee        7 weeks ago         502MB
		hyperledger/fabric-baseos    2.3                 b35a8ef578c0        7 weeks ago         6.87MB
		hyperledger/fabric-baseos    2.3.3               b35a8ef578c0        7 weeks ago         6.87MB
		hyperledger/fabric-baseos    latest              b35a8ef578c0        7 weeks ago         6.87MB
		root@aa:~/block# 
		================================打印日志结束==================================
	(3)bootstrap.sh脚本一共有三个部分:
		第一部分:下载fabric的源文件,源码;
			download() {}
		第二部分:把fabric测试用例从github 上克隆下来;
			cloneSamplesRepo() {}
		第三部分:把fabric所需的所有镜像下载下来;
			pullDockerImages() {}
	(4)执行成功之后会在当前目录下,多出一个fabric-samples文件夹,
		root@aa:~/block# tree fabric-samples -L 2
		fabric-samples-------------包含了fabric的测试项目,以及fabric的二进制文件
		├── asset-transfer-abac
		│   ├── chaincode-go
		│   └── README.md
		├── asset-transfer-basic
		│   ├── application-gateway-typescript
		│   ├── application-go
		│   ├── application-java
		│   ├── application-javascript
		│   ├── application-typescript
		│   ├── application-typescript-hsm
		│   ├── chaincode-external
		│   ├── chaincode-go
		│   ├── chaincode-java
		│   ├── chaincode-javascript
		│   └── chaincode-typescript
		├── asset-transfer-events
		│   ├── application-javascript
		│   ├── chaincode-java
		│   ├── chaincode-javascript
		│   └── README.md
		├── asset-transfer-ledger-queries
		│   ├── application-java
		│   ├── application-javascript
		│   ├── chaincode-go
		│   └── chaincode-javascript
		├── asset-transfer-private-data
		│   ├── application-javascript
		│   ├── chaincode-go
		│   └── chaincode-java
		├── asset-transfer-sbe
		│   ├── application-javascript
		│   ├── chaincode-java
		│   ├── chaincode-typescript
		│   └── README.md
		├── asset-transfer-secured-agreement
		│   ├── application-javascript
		│   └── chaincode-go
		├── auction-dutch
		│   ├── application-javascript
		│   ├── chaincode-go
		│   ├── chaincode-go-auditor
		│   └── README.md
		├── auction-simple
		│   ├── application-javascript
		│   ├── chaincode-go
		│   └── README.md
		├── bin--------------------------------------fabric的二进制文件在bin目录下(用来生成证书,通道的文件,初始块文件)
		│   ├── configtxgen
		│   ├── configtxlator
		│   ├── cryptogen
		│   ├── discover
		│   ├── fabric-ca-client
		│   ├── fabric-ca-server
		│   ├── idemixgen
		│   ├── orderer
		│   ├── osnadmin
		│   └── peer
		├── chaincode
		│   ├── abstore
		│   ├── fabcar
		│   ├── marbles02
		│   ├── marbles02_private
		│   ├── README.md
		│   └── sacc
		├── CHANGELOG.md
		├── ci
		│   ├── azure-pipelines.yml
		│   ├── scripts
		│   └── templates
		├── CODE_OF_CONDUCT.md
		├── CODEOWNERS
		├── commercial-paper
		│   ├── img
		│   ├── network-clean.sh
		│   ├── network-starter.sh
		│   ├── organization
		│   └── README.md
		├── config
		│   ├── configtx.yaml
		│   ├── core.yaml
		│   └── orderer.yaml
		├── CONTRIBUTING.md
		├── fabcar
		│   ├── go
		│   ├── java
		│   ├── javascript
		│   ├── networkDown.sh
		│   ├── startFabric.sh
		│   └── typescript
		├── high-throughput
		│   ├── application-go
		│   ├── chaincode-go
		│   ├── networkDown.sh
		│   ├── README.md
		│   └── startFabric.sh
		├── interest_rate_swaps
		│   ├── chaincode
		│   ├── network
		│   └── README.md
		├── LICENSE
		├── MAINTAINERS.md
		├── off_chain_data
		│   ├── addAssets.js
		│   ├── blockEventListener.js
		│   ├── blockProcessing.js
		│   ├── config.json
		│   ├── couchdbutil.js
		│   ├── deleteAsset.js
		│   ├── enrollAdmin.js
		│   ├── network-clean.sh
		│   ├── package.json
		│   ├── README.md
		│   ├── registerUser.js
		│   ├── startFabric.sh
		│   └── transferAsset.js
		├── README.md
		├── scripts
		│   └── changelog.sh
		├── SECURITY.md
		├── test-application
		│   └── javascript
		├── test-network
		│   ├── addOrg3
		│   ├── configtx
		│   ├── docker
		│   ├── network.sh
		│   ├── organizations
		│   ├── README.md
		│   ├── scripts
		│   ├── setOrgEnv.sh
		│   └── system-genesis-block
		├── test-network-k8s
		│   ├── chaincode
		│   ├── config
		│   ├── docs
		│   ├── kube
		│   ├── network
		│   ├── README.md
		│   └── scripts
		├── test-network-nano-bash
		│   ├── configtx.yaml
		│   ├── crypto-config.yaml
		│   ├── generate_artifacts.sh
		│   ├── orderer1.sh
		│   ├── orderer2.sh
		│   ├── orderer3.sh
		│   ├── peer1admin.sh
		│   ├── peer1.sh
		│   ├── peer2admin.sh
		│   ├── peer2.sh
		│   ├── peer3admin.sh
		│   ├── peer3.sh
		│   ├── peer4admin.sh
		│   ├── peer4.sh
		│   ├── README.md
		│   └── terminal_setup.png
		├── token-erc-1155
		│   ├── chaincode-go
		│   └── README.md
		├── token-erc-20
		│   ├── chaincode-go
		│   ├── chaincode-javascript
		│   └── README.md
		├── token-erc-721
		│   ├── chaincode-javascript
		│   └── README.md
		└── token-utxo
			├── chaincode-go
			└── README.md
3、把整个bin目录下的文件复制到/usr/local/bin当中<这样我们就可以全局使用这些二进制命令了>
	$ cd fabric-samples/bin
	$ cp * /usr/local/bin
==============================================================
    root@aa:~/block/fabric-samples/bin# pwd
    /root/block/fabric-samples/bin
    root@aa:~/block/fabric-samples/bin# ls
    configtxgen    cryptogen  fabric-ca-client  idemixgen  osnadmin
    configtxlator  discover   fabric-ca-server  orderer    peer
    root@aa:~/block/fabric-samples/bin# 
	# 至此fabric 的下载,安装就完成了!!!
==============================================================
4、运行一个测试网络-Bring up the test network
	参考文档:https://hyperledger-fabric.readthedocs.io/en/latest/getting_started_run_fabric.html
	(1)进入测试网络路径
		$ cd fabric-samples/test-network
	(2)开启测试网络 < ./network.sh down 停掉网络,删除所有运行容器>
		$ ./network.sh up
		================================打印日志开始==================================
		Creating network "fabric_test" with the default driver
		Creating volume "docker_orderer.example.com" with default driver
		Creating volume "docker_peer0.org1.example.com" with default driver
		Creating volume "docker_peer0.org2.example.com" with default driver
		Creating peer0.org1.example.com ... done
		Creating peer0.org2.example.com ... done
		Creating orderer.example.com    ... done
		Creating cli                    ... done
		CONTAINER ID        IMAGE                               COMMAND             CREATED             STATUS                  PORTS                                                                      NAMES
		ec81cda0949c        hyperledger/fabric-tools:latest     "/bin/bash"         1 second ago        Up Less than a second                                                                              cli
		cd7a7b1a4fe9        hyperledger/fabric-orderer:latest   "orderer"           3 seconds ago       Up 1 second             0.0.0.0:7050->7050/tcp, 0.0.0.0:7053->7053/tcp, 0.0.0.0:17050->17050/tcp   orderer.example.com
		caf0c13fb9e9        hyperledger/fabric-peer:latest      "peer node start"   3 seconds ago       Up 1 second             0.0.0.0:7051->7051/tcp, 0.0.0.0:17051->17051/tcp                           peer0.org1.example.com
		c1685ba46ca3        hyperledger/fabric-peer:latest      "peer node start"   3 seconds ago       Up 1 second             0.0.0.0:9051->9051/tcp, 7051/tcp, 0.0.0.0:19051->19051/tcp                 peer0.org2.example.com
		root@aa:~/block/fabric-samples/test-network#
		================================打印日志结束==================================
		可以看到开启了2个peer 节点的容器和1个orderer节点的容器
	(3)创建一个通道-Creating a channel
		# ./network.sh createChannel -c channel1 加 -c 指定创建的channel名,默认创建的channel名为mychannel
		$ ./network.sh createChannel
		================================打印日志开始==================================
		2021-11-03 10:34:02.196 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
		2021-11-03 10:34:02.236 UTC [channelCmd] update -> INFO 002 Successfully submitted channel update
		Anchor peer set for org 'Org2MSP' on channel 'mychannel'
		Channel 'mychannel' joined
		================================打印日志结束==================================
5、创建好通道后,就可以在通道上部署链码了-Starting a chaincode on the channel
	# you can start a chaincode on the channel using the following command
	$ ./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
	-ccn 指定链码的名称 basic
	-ccp 指定链码的路径 ../asset-transfer-basic/chaincode-go 
	-ccl 指定链码所使用的语言 go
	# 如果直接运行这条命令,是会报错的,这是官方测试用例的一个小BUG,因为在/asset-transfer-basic/chaincode-go这个目录下,链码是没有安装go依赖的
	
	# 解决办法
	(1)进入链码目录
		$ cd fabric-samples/asset-transfer-basic/chaincode-go
		$ ls
		assetTransfer.go  chaincode  go.mod  go.sum
	(2)安装go 依赖,生成vendor文件夹
		# go 语言镜像加速
        $ go env -w GO111MODULE=on
        $ go env -w GOPROXY=https://goproxy.cn,direct
		# 生成vendor文件
		$ go mod vendor
	(3)执行成功之后会在当前目录下,多出一个vendor文件夹,go语言所需要的依赖包
		root@aa:~/fabric-samples/asset-transfer-basic/chaincode-go# ls
		assetTransfer.go  chaincode  go.mod  go.sum  vendor
	(4)在通道上部署链码
		$ cd fabric-samples/test-network
		$ ls
		addOrg3            configtx  log.txt     organizations  scripts       system-genesis-block
		channel-artifacts  docker    network.sh  README.md      setOrgEnv.sh
		$ ./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
		================================打印日志开始==================================
		Committed chaincode definition for chaincode 'basic' on channel 'mychannel':
		Version: 1.0, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc, Approvals: [Org1MSP: true, Org2MSP: true]
		Query chaincode definition successful on peer0.org2 on channel 'mychannel'
		Chaincode initialization is not required
		================================打印日志结束==================================
		至此链码部署成功!!!
	
6、客户端要与我们的Org1(组织1)交互-Interacting with the network

(1)添加两个环境变量,确保它可以找到你的配置文件的路径
	# Use the following command to add those binaries to your CLI Path
	$ export PATH=${PWD}/../bin:$PATH
	# 配置文件的路径
	$ export FABRIC_CFG_PATH=$PWD/../config/
	# root@aa:~/fabric-samples/test-network# export PATH=${PWD}/../bin:$PATH
	# root@aa:~/fabric-samples/test-network# export FABRIC_CFG_PATH=$PWD/../config/
(2)客户端要与我们的Org1(组织1)交互,我们需要将Org1(组织1)的一些环境变量添加进来
	You can now set the environment variables that allow you to operate the peer CLI as Org1:

	# Environment variables for Org1

	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
(3)现在Org1(组织1)就可以与链码做一些交互
	@1、Run the following command to initialize the ledger with assets:
		$ 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 basic --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":[]}'
		# If successful, you should see similar output to below:
		# -> INFO 001 Chaincode invoke successful. result: status:200
	@2、调用链码,查询,得到所有的资产信息
		# You can now query the ledger from your CLI. Run the following command to get the list of assets that were added to your channel ledger:
		$ peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'
		# If successful, you should see the following output:
		[
		  {"ID": "asset1", "color": "blue", "size": 5, "owner": "Tomoko", "appraisedValue": 300},
		  {"ID": "asset2", "color": "red", "size": 5, "owner": "Brad", "appraisedValue": 400},
		  {"ID": "asset3", "color": "green", "size": 10, "owner": "Jin Soo", "appraisedValue": 500},
		  {"ID": "asset4", "color": "yellow", "size": 10, "owner": "Max", "appraisedValue": 600},
		  {"ID": "asset5", "color": "black", "size": 15, "owner": "Adriana", "appraisedValue": 700},
		  {"ID": "asset6", "color": "white", "size": 15, "owner": "Michel", "appraisedValue": 800}
		]
	@3、添加(组织2)与链码通信---Set the following environment variables to operate as Org2
		# Environment variables for Org2

		export CORE_PEER_TLS_ENABLED=true
		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
	@4、You can now query the asset-transfer (basic) chaincode running on peer0.org2.example.com:
		$ peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset6"]}'
		# The result will show that "asset6" was transferred to Christopher:
		{"ID":"asset6","color":"white","size":15,"owner":"Christopher","appraisedValue":800}
7、测试网络结束-Bring down the network
	# When you are finished using the test network, you can bring down the network with the following command:
	# 把所有的网络关闭
	$ cd fabric-samples/test-network
	$ ./network.sh down   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值