- 环境安装
- sudo apt-get update
- sudo apt install ssh
- sudo apt install golang-go (1.12.x+)
- sudo apt install git
- sudo apt install nodejs
- sudo apt install npm
- sudo npm install [email protected] -g
- sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
- npm install -g n
- sudo n v8.11.2
- sudo apt install docker (17.06.2+)https://docs.docker.com/install/linux/docker-ce/ubuntu/
- sudo apt install docker-compose ( 1.14.0+ https://docs.docker.com/compose/install/
- sudo apt install curl
- sudo apt install vim
- sudo apt-get install postgresql (9.5+)
- sudo apt install jq
- 环境配置
- export GOPATH=/opt/gopath
- export PATH=$PATH:$GOPATH/bin
- source /etc/profile
- 添加docker组
- sudo groupadd docker
- 将当前的用户添加进docker
- sudo usermod -aG docker $USER
- 退出然后在登陆回来
- 验证不用sudo也能运行docker命令
- docker run hello-world
- 通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://wnlrybca.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
-
- 设置npm源为淘宝
- npm config set registry https://registry.npm.taobao.org
- 验证
- npm config get registry
- 设置npm源为淘宝
- Samples 二进制执行文件 docker 镜像 源码
- git clone https://github.com/hyperledger/fabric-samples.git
- 检出指定版本
- git checkout v1.4.2
- https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric (手动在里面找适合的二进制执行文件,上传,用流量)
- 在下载到的bin中有镜像下载脚本运行即可
- git clone https://github.com/hyperledger/fabric.git (太慢手动下载上传到/opt/soft/go/src/github.com/hyperledger/下)
- 修改 sudo vim /etc/hosts 为本机
10.0.8.93 localhost
10.0.8.93 orderer.example.com
10.0.8.93 peer0.org1.example.com
10.0.8.93 peer1.org1.example.com
10.0.8.93 peer0.org2.example.com
10.0.8.93 peer1.org2.example.com
- 第一个网络
- 在fabric-sample下
- cd fabric-samples/first-network
- 开启ca
- vim byfn.sh
- CERTIFICATE_AUTHORITIES=true
- 生成证书,创世块
- ./byfn.sh generate
- 启动
- ./byfn.sh up ./byfn.sh up -l node (使用-l 指定链码语言 java 还是node )
- 关闭网络
- ./byfn.sh down
- 修改/home/wei/fabric-samples/first-network/connection-org1.json 把路径配成绝对路径有节点发现机制不用全配
- 修改fabcar中的函数名和参数,就可以注册用户,使用查询和执行文件了。
- 证书的配置文件 crypto-config.yaml
- 自己配置生成证书
- ../bin/cryptogen generate --config=./crypto-config.yaml
- 指定配置文件目录
- export FABRIC_CFG_PATH=$PWD
- 生成证书
- ../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
- 通道配置
- 生成通道
- export CHANNEL_NAME=mychannel && ../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
- 锚定节点 org1
- ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
- 锚定节点 org2
- ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP
- 开始网络
- docker-compose -f docker-compose-cli.yaml up -d
- 环境变量(可以配置在docker-compose-base.yaml)
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
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
-
- 启动cli
- docker exec -it cli bash
- 配置peer0环境变量
- 启动cli
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051
export CORE_PEER_LOCALMSPID="Org1MSP"
export 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
-
- 创建通道
- export CHANNEL_NAME=mychannel
- peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
- peer0.org1.example.com加入通道
- peer channel join -b mychannel.block
- peer0.org2.example.com加入通道
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp CORE_PEER_ADDRESS=peer0.org2.example.com:7051 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 peer channel join -b mychannel.block
- 更新锚定节点
- peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp CORE_PEER_ADDRESS=peer0.org2.example.com:7051 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 peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org2MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
- 安装链码
- peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/
- 实例化
- peer chaincode instantiate -o orderer.example.com:7050 --tls --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 $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
- 查询
- peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
- 看交易日志
- docker logs -f cli
- 看容器日志
- docker logs dev-peer0.org2.example.com-mycc-1.0
- 创建通道
- 查看所有容器 docker ps -a
- 删除所有镜像 docker rmi -f $(docker images -q)
- 删除所有容器 docker rm -f $(docker ps -aq)
- 关闭集群 docker-compose -f docker-compose-cli.yaml down --volumes --remove-orphans
- 删除映射卷 docker volume prune 清除缓存 docker network prune
调用中出现未找到链码是因为在查询的节点中没有安装链码