步骤
A) 安装先决条件
(Run in dir - dev5@ubuntu:~$)
1) 您可以从更新和升级包管理器开始
sudo apt-get update
sudo dpkg --configure -a
2 安装 curl
sudo apt-get install curl
3 检查 curl 版本
curl --version
4 安装 Go 语言
$ cd $HOME/
wget https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz
$ tar -xvf go1.8.1.linux-amd64.tar.gz
$ mkdir $HOME/gopath
$ export GOPATH=$HOME/gopath
$ export GOROOT=$HOME/go
$ export PATH=$PATH:$GOROOT/bin
$ go version
5 使用以下命令下载必备文件 \
curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh
6 安装 libltdl-dev
apt-get install libltdl-dev
7 打开 preres-ubuntu.sh 文件以供参考。从文件中获取以下命令。检查它们是否匹配。如果不是,则使用文件中的那个。
8 此命令位于字符串“支持的版本数组”中。运行它
declare -a versions=('trusty' 'xenial' 'yakkety', ‘bionic’);
9 更新将来使用的 CODENAME var
if [ -z "$1" ]; then
source /etc/lsb-release || \
(echo "Error: Release information not found, run script passing Ubuntu version codename as a parameter"; exit 1)
CODENAME=${DISTRIB_CODENAME}
else
CODENAME=${1}
fi
10 检查是否支持版本
if echo ${versions[@]} | grep -q -w ${CODENAME}; then
echo "Installing Hyperledger Composer prereqs for Ubuntu ${CODENAME}"
else
echo "Error: Ubuntu ${CODENAME} is not supported"
exit 1
fi
11 更新包管理器
sudo apt-get update
12 安装 Git
sudo apt-get install -y git
13 安装 nvm 依赖项
sudo apt-get -y install build-essential libssl-dev
14 执行nvm安装脚本
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
15 在不重启shell的情况下设置nvm环境
export NVM_DIR="${HOME}/.nvm"
[ -s "${NVM_DIR}/nvm.sh" ] && . "${NVM_DIR}/nvm.sh"
[ -s "${NVM_DIR}/bash_completion" ] && . "${NVM_DIR}/bash_completion"
16 安装节点
nvm install --lts
17 配置 nvm 使用 6.9.5 版本
nvm use --lts
nvm alias default 'lts/*'
18 安装最新版npm
npm install npm@latest -g
19 将 Docker 存储库密钥添加到 APT 钥匙串
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
20 更新 APT 搜索 Docker 包的位置
echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu
${CODENAME} stable" | \
sudo tee /etc/apt/sources.list.d/docker.list
21 更新包列表
sudo apt-get update
22 验证 APT 是否从正确的存储库中提取
sudo apt-cache policy docker-ce
23 安装 Docker
sudo apt-get -y install docker-ce
24 安装 docker compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.13.0/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
25 如果需要,安装 python v2
set +e
COUNT="$(python -V 2>&1 | grep -c 2.)"
if [ ${COUNT} -ne 1 ]
then
sudo apt-get install -y python-minimal
fi
26 安装解压缩,安装超级账本结构所需。
sudo apt-get -y install unzip
27 需要将 docker-compose 升级为 >= 1.18
sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker- compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
28 从 github 克隆 fabric-samples
git clone https://github.com/mahoney1/fabric-samples.git
B 安装 hyperledger composer 开发工具
(在目录中运行 - dev5@ubuntu:~$)
1 安装 CLI 工具 -
composer-cli npm install -g composer-cli
composer-rest-server npm install -g composer-rest-server
generator-hyperledger-composer npm install -g generator-hyperledger-composer
Yeoman npm install -g yo
2 设置你的 IDE
https://code.visualstudio.com/download
Open VSCode, go to Extensions, then search for and install the Hyperledger Composer extension from the Marketplace.
C 运行 Fabric 网络
(Run in dir - dev5@ubuntu:~$ fabric-samples)
1 将目录更改为 fabric-samples
cd fabric-samples
2 使用此命令下载平台二进制文件,包括 cryptogen(bash 命令需要三个参数):
3 要使用当前结构级别,请运行此命令
git checkout multi-org
4 检查下载的二进制文件。将目录更改为 bin
cd bin
ls
5 切换到第一个网络目录
cd ../
cd first-network
ls
6 为您的第一个网络生成所需的证书和文件
./byfn.sh -m generate
7 启动结构
sudo ./byfn.sh -m up -s couchdb -a
On error - "Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?"
检查docker是否处于活动状态
sudo systemctl is-active docker
如果不活跃,那么
sudo docker 图片
sudo usermod -aG docker $(whoami)
sudo usermod -a -G docker $USER
sudo docker --version
要启动docker,运行
sudo service docker restart
8 再次启动结构
$ sudo ./byfn.sh -m up -s couchdb -a
9 如果仍然无法启动网络,则重新启动频道
sudo ./byfn.sh -m restart -c mychannel
D Run Fabric 网络
*Organization Org1 is represented by Alice
Organization Org2 is represented by Bob*
1 创建一个临时工作目录(和子目录)来管理 Composer 连接配置文件和密钥/证书文件
mkdir -p /tmp/composer/org1
mkdir -p /tmp/composer/org2
2 创建一个描述此结构网络的基本连接配置文件,该配置文件可以提供给
爱丽丝和鲍勃
转到 /tmp/composer
cd /
cd tmp
cd composer
Open editor and copy paste the contents of byfn-network.json sheet in the editor and save it as byfn-network.json
nano
3 打开 byfn-network.json 并将文本 INSERT_ORG1_CA_CERT 的所有实例替换为 Org1 对等节点的 CA 证书
[在目录中运行-dev5@ubuntu:~$ fabric-samples/first-network]
3.1 运行命令,从生成的.pem文件中获取证书,以便嵌入到上面的连接配置文件中
3.11 转到第一个网络文件夹
光盘 /
cd 主页/dev5
cd fabric-samples/first-network
3.12 执行命令生成/tmp/composer/org1/ca-org1.txt
awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt > /tmp/composer/org1/ca-org1.txt
3.13 打开ca-org1
3.14 复制文件/tmp/composer/org1/ca-org1.txt的内容,替换.json文件中的文本INSERT_ORG1_CA_CERT
4 在同一个 .json 文件中 - 您需要将文本 INSERT_ORG2_CA_CERT 的所有实例替换为 Org2 对等节点的 CA 证书
4.1 运行命令,从生成的.pem文件中获取证书,以便嵌入到上面的连接配置文件中
4.11 执行命令生成/tmp/composer/org1/ca-org2.txt
awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt > /tmp/composer/org2/ca-org2.txt
4.12 打开ca-org2
4.13 复制文件/tmp/composer/org1/ca-org2.txt的内容并替换文本
INSERT_ORG2_CA_CERT in the .json file
5 替换文本的所有实例
INSERT_ORDERER_CA_CERT with the CA certificate for the orderer node
5.1 运行命令,从生成的.pem文件中获取证书,以便嵌入到上面的连接配置文件中
5.11 执行命令生成/tmp/composer/org1/ca-orderer.txt
awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt > /tmp/composer/ca-orderer.txt
5.12 打开ca-orderer.txt
5.13 复制文件/tmp/composer/org1/ca-orderer.txt的内容,替换.json文件中的文本INSERT_ORDERER_CA_CERT
6 将此文件另存为 /tmp/composer/byfn-network.json
此连接配置文件现在描述了结构网络设置、作为网络一部分的所有对等方、订购者和证书颁发机构,它定义了参与网络的所有组织,还定义了该网络上的通道。 {{site.data.conrefs.composer_full}} 只能与单个频道交互,因此只应定义一个频道。
7 自定义 Org1 的连接配置文件
In the connection profile /tmp/composer/byfn-network.json between the version property and just before the channel property, add this block that specifies the organization that alice belongs to, in a client section with optional timeouts. Save the connection profile file as a NEW file called byfn-network-org1.json in /tmp/composer/org1/
"client": {
"organization": "Org1",
"connection": {
"timeout": {
"peer": {
"endorser": "300",
"eventHub": "300",
"eventReg": "300"
},
"orderer": "300"
}
}
},
8 自定义 Org2 的连接配置文件
在 version 属性和 channel 属性之前的连接配置文件 /tmp/composer/byfn-network.json 中,在带有可选超时的客户端部分中添加此块,该块指定 bob 所属的组织。将连接配置文件保存为 /tmp/composer/org2/ 中名为 byfn-network-org2.json 的新文件
"client": {
"organization": "Org2",
"connection": {
"timeout": {
"peer": {
"endorser": "300",
"eventHub": "300",
"eventReg": "300"
},
"orderer": "300"
}
}
},
9 将证书和私钥复制到 /tmp/composer/org1 for Org1
export ORG1=crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
cp -p $ORG1/signcerts/A*.pem /tmp/composer/org1
cp -p $ORG1/keystore/*_sk /tmp/composer/org1
10 将证书和私钥复制到 /tmp/composer/org2 for Org2
export ORG2=crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
cp -p $ORG2/signcerts/A*.pem /tmp/composer/org2
cp -p $ORG2/keystore/*_sk /tmp/composer/org2
11 为 Org1 的管理员创建业务网卡
composer card create -p /tmp/composer/org1/byfn-network-org1.json -u PeerAdmin -c /tmp/composer/org1/Admin@org1.example.com-cert.pem -k /tmp/composer/org1/*_sk -r PeerAdmin -r ChannelAdmin -f PeerAdmin@byfn-network-org1.card
12 为 Org2 的管理员创建业务网卡
composer card create -p /tmp/composer/org2/byfn-network-org2.json -u PeerAdmin -c /tmp/composer/org2/Admin@org2.example.com-cert.pem -k /tmp/composer/org2/*_sk -r PeerAdmin -r ChannelAdmin -f PeerAdmin@byfn-network-org2.card
13 为 Org1 的管理员导入业务网卡
composer card import -f PeerAdmin@byfn-network-org1.card --card PeerAdmin@byfn-network-org1
14 为 Org2 的管理员导入业务网卡
composer card import -f PeerAdmin@byfn-network-org2.card --card PeerAdmin@byfn-network-org2
15 为所需的业务网络创建业务网络存档文件
16 将业务网络安装到 Org1 的对等节点上
composer network install --card PeerAdmin@byfn-network-org1 --archiveFile trade-network.bna
17 将业务网络安装到 Org2 的对等节点上
composer network install --card PeerAdmin@byfn-network-org2 --archiveFile fta-fab-net.bna
18 定义业务网络的背书策略
使用表单 endorsement-policy.json 的内容创建一个背书策略文件,并将其保存在 /tmp/composer/ 中,名称为 endorsement-policy.json
The endorsement policy you have just created states that both Org1 and Org2 must endorse transactions in the business network before they can be committed to the blockchain. If Org1 or Org2 do not endorse transactions, or disagree on the result of a transaction, then the transaction will be rejected by the business network.
19 检索 Org1 的业务网络管理员证书
运行 composer identity request 命令来为 Alice 检索证书以用作 Org1 的业务网络管理员
composer identity request -c PeerAdmin@byfn-network-org1 -u admin -s adminpw -d alice
20 检索 Org2 的业务网络管理员证书
运行 composer identity request 命令来检索证书,让 Bob 用作 Org2 的业务网络管理员
composer identity request -c PeerAdmin@byfn-network-org2 -u admin -s adminpw -d bob
21 启动业务网络
composer network start -c PeerAdmin@byfn-network-org1 -n fta-fab-net -V 0.1.14 -o endorsementPolicyFile=/tmp/composer/endorsement-policy.json -A alice -C alice/admin-pub.pem -A bob -C bob/admin-pub.pem
注意:此命令中应使用bna文件的版本号
如果命令失败,则检查 docker,启动 fabric n/w,安装 bna 文件,检查 tmp/compser 是否存在
一旦业务网络启动。 Alice 和 Bob 都将能够访问业务网络,开始设置业务网络,并加入各自组织的其他参与者。
Alice 和 Bob 必须使用他们在前面步骤中创建的证书创建新的业务网络卡,以便他们可以访问业务网络。
22 创建业务网卡,以 Org1 身份访问业务网
创建一个商业 n/w 卡
composer card create -p /tmp/composer/org1/byfn-network-org1.json -u alice -n fta-fab-net -c alice/admin-pub.pem -k alice/admin-priv.pem
导入商务网卡
composer card import -f alice@fta-fab-net.card
测试与区块链业务网络的连接
composer network ping -c alice@fta-fab-net
23 创建业务网卡,以 Org2 身份访问业务网
创建一个商业 n/w 卡
composer card create -p /tmp/composer/org2/byfn-network-org2.json -u bob -n fta-fab-net -c bob/admin-pub.pem -k bob/admin-priv.pem
导入商务网卡
composer card import -f bob@fta-fab-net.card
测试与区块链业务网络的连接
composer network ping -c bob@fta-fab-net
24 启动 RESTful API composer-rest-server
回答以下问题:
输入要使用的名片名称:alice@fta-fab-net
指定是否要在生成的 REST API 中使用命名空间:从不使用命名空间
指定是否要使用 API 密钥来保护 REST API:否
指定是否要使用 Passport 为 REST API 启用身份验证:否
指定是否要启用资源管理器测试界面:是
如果要启用动态日志记录,请指定密钥:dts
指定是否要启用事件发布 oevr websockets:是
指定是否要为 REST API 启用 TLS 安全性:否
打开浏览器并转到网址
http://localhost:3000/explorer
这将打开休息服务器