安装规划
域名说明
域名 | 说明 |
---|---|
orderer.cares.com | 排序节点 |
peer0.nkg.com | nkg peer节点 |
ca.cares.com | 排序组织证书颁发节点 |
ca.nkg.com | nkg 证书颁发节点 |
tls.cares.com | 全局 tls证书颁发节点 |
peer0.weh.com | weh peer 节点 |
ca.weh.com | weh 证书颁发节点 |
peer0.tna.com | tna peer节点 |
ca.tna.com | tna证书颁发节点 |
域名规划
IP | 域名 |
---|---|
192.168.53.50 | orderer.cares.com peer0.nkg.com ca.cares.com ca.nkg.com tls.cares.com |
192.168.53.51 | peer0.weh.com ca.weh.com |
192.168.53.52 | peer0.tna.com ca.tna.com |
基础软件安装(全部机器相同操作)
1、go
将go的可执行文件路径添加到PATH
export PATH=$PATH:/root/fabric/soft/prereq/go/bin
设置GOROOT环境变量指向GO_HOME
export GOROOT=/root/fabric/soft/prereq/go
设置GOPATH环境变量指向源码编译路径
export GOPATH=/root/fabric/gopath
2、node
将node的可执行文件路径添加到PATH
export PATH=$PATH:/root/fabric/soft/prereq/node-v12.16.1-linux-x64/bin
3、docker
复制docker二进制文件到 /usr/bin
复制docker.service containerd.service docker.socket 到 /lib/systemd/system
添加docker组
groupadd docker
systemctl enable docker.service
systemctl enable docker.socket
systemctl enable containerd.service
systemctl start docker.service
4、fabric
复制fabric二进制文件到/usr/bin
复制fabric源码到 $GOPATH
fabric 网络搭建
CA 安装
tls-ca
创建目录
mkdir -p /root/workspace/tls-ca/{crypto,admin}
启动 tls-ca
export TLS_CA_HOME=/root/workspace/tls-ca
export FABRIC_CA_SERVER_HOME=$TLS_CA_HOME/crypto
export FABRIC_CA_SERVER_TLS_ENABLED=true
export FABRIC_CA_SERVER_CSR_CN=tls.cares.com
export FABRIC_CA_SERVER_CSR_HOSTS=tls.cares.com
export FABRIC_CA_SERVER_DEBUG=true
export FABRIC_CA_SERVER_OPERATIONS_LISTENADDRESS=0.0.0.0:6053
nohup fabric-ca-server start -d -b tls:tlspw --port 6052 > $TLS_CA_HOME/tls-ca-logs 2>&1 &
注册TLS证书
export FABRIC_CA_CLIENT_TLS_CERTFILES=/root/workspace/tls-ca/crypto/tls-cert.pem
export FABRIC_CA_CLIENT_HOME=/root/workspace/tls-ca/admin
fabric-ca-client enroll -d -u https://tls:tlspw@tls.cares.com:6052
fabric-ca-client register -d --id.name peer0.nkg.com --id.secret 1 --id.type peer -u https://tls.cares.com:6052
fabric-ca-client register -d --id.name peer0.weh.com --id.secret 1 --id.type peer -u https://tls.cares.com:6052
fabric-ca-client register -d --id.name peer0.tna.com --id.secret 1 --id.type peer -u https://tls.cares.com:6052
fabric-ca-client register -d --id.name orderer.cares.com --id.secret 1 --id.type orderer -u https://tls.cares.com:6052
orderer ca
创建目录
mkdir -p /root/workspace/order-ca/{crypto,admin}
启动orderer ca
export ORDERER_CA_HOME=/root/workspace/order-ca
export FABRIC_CA_SERVER_HOME=$ORDERER_CA_HOME/crypto
export FABRIC_CA_SERVER_TLS_ENABLED=true
export FABRIC_CA_SERVER_CSR_CN=ca.cares.com
export FABRIC_CA_SERVER_CSR_HOSTS=ca.cares.com
export FABRIC_CA_SERVER_DEBUG=true
export FABRIC_CA_SERVER_OPERATIONS_LISTENADDRESS=0.0.0.0:6055
nohup fabric-ca-server start -d -b rca:rcapw --port 6054 > $ORDERER_CA_HOME/orderer-ca-logs 2>&1 &
注册 orderer 组织和orderer admin
export ORDERER_CA_HOME=/root/workspace/order-ca
export FABRIC_CA_CLIENT_TLS_CERTFILES=$ORDERER_CA_HOME/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_HOME=$ORDERER_CA_HOME/admin
fabric-ca-client enroll -d -u https://rca:rcapw@ca.cares.com:6054
fabric-ca-client register -d --id.name orderer.cares.com --id.secret 1 --id.type orderer -u https://ca.cares.com:6054
fabric-ca-client register -d --id.name Admin@orderer.cares.com --id.secret 1 --id.type admin --id.attrs "hf.Registrar.Roles=client,hf.Registrar.Attributes=*,hf.Revoker=true,hf.GenCRL=true,admin=true:ecert,abac.init=true:ecert" -u https://ca.cares.com:6054
nkg ca
创建目录
mkdir -p /root/workspace/nkg-ca/{crypto,admin}
启动nkg ca
export NKG_CA_HOME=/root/workspace/nkg-ca
export FABRIC_CA_SERVER_HOME=$NKG_CA_HOME/crypto
export FABRIC_CA_SERVER_TLS_ENABLED=true
export FABRIC_CA_SERVER_CSR_CN=ca.nkg.com
export FABRIC_CA_SERVER_CSR_HOSTS=ca.nkg.com
export FABRIC_CA_SERVER_DEBUG=true
export FABRIC_CA_SERVER_OPERATIONS_LISTENADDRESS=0.0.0.0:6057
nohup fabric-ca-server start -d -b rca:rcapw --port 6056 > $NKG_CA_HOME/nkg-ca-logs 2>&1 &
注册 nkg peer0,admin,user
export NKG_CA_HOME=/root/workspace/nkg-ca
export FABRIC_CA_CLIENT_TLS_CERTFILES=$NKG_CA_HOME/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_HOME=$NKG_CA_HOME/admin
fabric-ca-client enroll -d -u https://rca:rcapw@ca.nkg.com:6056
fabric-ca-client register -d --id.name peer0.nkg.com --id.secret 1 --id.type peer -u https://ca.nkg.com:6056
fabric-ca-client register -d --id.name Admin@nkg.com --id.secret 1 --id.type user -u https://ca.nkg.com:6056
fabric-ca-client register -d --id.name User1@nkg.com --id.secret 1 --id.type user -u https://ca.nkg.com:6056
weh ca
创建目录
mkdir -p /root/workspace/weh-ca/{crypto,admin}
启动weh ca
export WEH_CA_HOME=/root/workspace/weh-ca
export FABRIC_CA_SERVER_HOME=$WEH_CA_HOME/crypto
export FABRIC_CA_SERVER_TLS_ENABLED=true
export FABRIC_CA_SERVER_CSR_CN=ca.weh.com
export FABRIC_CA_SERVER_CSR_HOSTS=ca.weh.com
export FABRIC_CA_SERVER_DEBUG=true
export FABRIC_CA_SERVER_OPERATIONS_LISTENADDRESS=0.0.0.0:6057
nohup fabric-ca-server start -d -b rca:rcapw --port 6056 > $WEH_CA_HOME/weh-ca-logs 2>&1 &
注册 weh peer0,admin,user
export WEH_CA_HOME=/root/workspace/weh-ca
export FABRIC_CA_CLIENT_TLS_CERTFILES=$WEH_CA_HOME/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_HOME=$WEH_CA_HOME/admin
fabric-ca-client enroll -d -u https://rca:rcapw@ca.weh.com:6056
fabric-ca-client register -d --id.name peer0.weh.com --id.secret 1 --id.type peer -u https://ca.weh.com:6056
fabric-ca-client register -d --id.name Admin@weh.com --id.secret 1 --id.type user -u https://ca.weh.com:6056
fabric-ca-client register -d --id.name User1@weh.com --id.secret 1 --id.type user -u https://ca.weh.com:6056
tna ca
创建目录
mkdir -p /root/workspace/tna-ca/{crypto,admin}
启动tna ca
export TNA_CA_HOME=/root/workspace/tna-ca
export FABRIC_CA_SERVER_HOME=$TNA_CA_HOME/crypto
export FABRIC_CA_SERVER_TLS_ENABLED=true
export FABRIC_CA_SERVER_CSR_CN=ca.tna.com
export FABRIC_CA_SERVER_CSR_HOSTS=ca.tna.com
export FABRIC_CA_SERVER_DEBUG=true
export FABRIC_CA_SERVER_OPERATIONS_LISTENADDRESS=0.0.0.0:6057
nohup fabric-ca-server start -d -b rca:rcapw --port 6056 > $TNA_CA_HOME/tna-ca-logs 2>&1 &
注册 tna peer0,admin,user
export TNA_CA_HOME=/root/workspace/tna-ca
export FABRIC_CA_CLIENT_TLS_CERTFILES=$TNA_CA_HOME/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_HOME=$TNA_CA_HOME/admin
fabric-ca-client enroll -d -u https://rca:rcapw@ca.tna.com:6056
fabric-ca-client register -d --id.name peer0.tna.com --id.secret 1 --id.type peer -u https://ca.tna.com:6056
fabric-ca-client register -d --id.name Admin@tna.com --id.secret 1 --id.type user -u https://ca.tna.com:6056
fabric-ca-client register -d --id.name User1@tna.com --id.secret 1 --id.type user -u https://ca.tna.com:6056
peer节点安装
nkg peer0
创建目录
mkdir -p /root/workspace/nkg/peer0
颁发 nkg peer0 证书
export FABRIC_CA_CLIENT_HOME=/root/workspace/nkg/peer0
export FABRIC_CA_CLIENT_TLS_CERTFILES=/root/workspace/nkg-ca/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://peer0.nkg.com:1@ca.nkg.com:6056
颁发 TLS 证书
export FABRIC_CA_CLIENT_MSPDIR=tls-msp
export FABRIC_CA_CLIENT_HOME=/root/workspace/nkg/peer0
export FABRIC_CA_CLIENT_TLS_CERTFILES=/root/workspace/tls-ca/crypto/ca-cert.pem
fabric-ca-client enroll -d -u https://peer0.nkg.com:1@tls.cares.com:6052 --enrollment.profile tls --csr.hosts peer0.nkg.com
将 /root/workspace/nkg/peer0/tls-msp/keystore 下的 key更名为 key.pem
颁发 nkg admin 证书
mkdir -p /root/workspace/nkg/admin
export FABRIC_CA_CLIENT_HOME=/root/workspace/nkg/admin
export FABRIC_CA_CLIENT_TLS_CERTFILES=/root/workspace/nkg-ca/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://Admin@nkg.com:1@ca.nkg.com:6056
复制admin证书
mkdir -p /root/workspace/nkg/peer0/msp/admincerts
cp /root/workspace/nkg/admin/msp/signcerts/cert.pem /root/workspace/nkg/peer0/msp/admincerts/cert.pem
mkdir -p /root/workspace/nkg/admin/msp/admincerts
cp /root/workspace/nkg/admin/msp/signcerts/cert.pem /root/workspace/nkg/admin/msp/admincerts/cert.pem
启动peer0
export FABRIC_CFG_PATH=/root/fabric/cfg
export CORE_PEER_ID=peer0.nkg.com
export CORE_PEER_ADDRESS=peer0.nkg.com:7051
export CORE_PEER_LOCALMSPID=nkgMSP
export CORE_PEER_MSPCONFIGPATH=/root/workspace/nkg/peer0/msp
export FABRIC_LOGGING_SPEC=info
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_TLS_CERT_FILE=/root/workspace/nkg/peer0/tls-msp/signcerts/cert.pem
export CORE_PEER_TLS_KEY_FILE=/root/workspace/nkg/peer0/tls-msp/keystore/key.pem
export CORE_PEER_TLS_ROOTCERT_FILE=/root/workspace/nkg/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
export CORE_PEER_GOSSIP_USELEADERELECTION=true
export CORE_PEER_GOSSIP_ORGLEADER=false
export CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.nkg.com:7051
export CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
nohup peer node start > /root/workspace/nkg/peer0/peer0.log 2>&1 &
weh peer0
创建目录
mkdir -p /root/workspace/weh/peer0
颁发 weh peer0 证书
export FABRIC_CA_CLIENT_HOME=/root/workspace/weh/peer0
export FABRIC_CA_CLIENT_TLS_CERTFILES=/root/workspace/weh-ca/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://peer0.weh.com:1@ca.weh.com:6056
颁发 TLS 证书
#sftp复制 tls.cares.com /root/workspace/tls-ca/crypto/ca-cert.pem 文件到 /root/workspace/tls-ca/crypto
mkdir -p /root/workspace/tls-ca/crypto
export FABRIC_CA_CLIENT_MSPDIR=tls-msp
export FABRIC_CA_CLIENT_HOME=/root/workspace/weh/peer0
export FABRIC_CA_CLIENT_TLS_CERTFILES=/root/workspace/tls-ca/crypto/ca-cert.pem
fabric-ca-client enroll -d -u https://peer0.weh.com:1@tls.cares.com:6052 --enrollment.profile tls --csr.hosts peer0.weh.com
将 /root/workspace/weh/peer0/tls-msp/keystore 下的 key更名为 key.pem
颁发 weh admin 证书
mkdir -p /root/workspace/weh/admin
export FABRIC_CA_CLIENT_HOME=/root/workspace/weh/admin
export FABRIC_CA_CLIENT_TLS_CERTFILES=/root/workspace/weh-ca/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://Admin@weh.com:1@ca.weh.com:6056
复制admin证书
mkdir -p /root/workspace/weh/peer0/msp/admincerts
cp /root/workspace/weh/admin/msp/signcerts/cert.pem /root/workspace/weh/peer0/msp/admincerts/cert.pem
mkdir -p /root/workspace/weh/admin/msp/admincerts
cp /root/workspace/weh/admin/msp/signcerts/cert.pem /root/workspace/weh/admin/msp/admincerts/cert.pem
启动peer0
export FABRIC_CFG_PATH=/root/fabric/cfg
export CORE_PEER_ID=peer0.weh.com
export CORE_PEER_ADDRESS=peer0.weh.com:7051
export CORE_PEER_LOCALMSPID=wehMSP
export CORE_PEER_MSPCONFIGPATH=/root/workspace/weh/peer0/msp
export FABRIC_LOGGING_SPEC=info
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_TLS_CERT_FILE=/root/workspace/weh/peer0/tls-msp/signcerts/cert.pem
export CORE_PEER_TLS_KEY_FILE=/root/workspace/weh/peer0/tls-msp/keystore/key.pem
export CORE_PEER_TLS_ROOTCERT_FILE=/root/workspace/weh/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
export CORE_PEER_GOSSIP_USELEADERELECTION=true
export CORE_PEER_GOSSIP_ORGLEADER=false
export CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.weh.com:7051
export CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
nohup peer node start > /root/workspace/weh/peer0/peer0.log 2>&1 &
tna peer0
创建目录
mkdir -p /root/workspace/tna/peer0
颁发 tna peer0 证书
export FABRIC_CA_CLIENT_HOME=/root/workspace/tna/peer0
export FABRIC_CA_CLIENT_TLS_CERTFILES=/root/workspace/tna-ca/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://peer0.tna.com:1@ca.tna.com:6056
颁发 TLS 证书
#sftp复制 tls.cares.com /root/workspace/tls-ca/crypto/ca-cert.pem 文件到 /root/workspace/tls-ca/crypto
mkdir -p /root/workspace/tls-ca/crypto
export FABRIC_CA_CLIENT_MSPDIR=tls-msp
export FABRIC_CA_CLIENT_HOME=/root/workspace/tna/peer0
export FABRIC_CA_CLIENT_TLS_CERTFILES=/root/workspace/tls-ca/crypto/ca-cert.pem
fabric-ca-client enroll -d -u https://peer0.tna.com:1@tls.cares.com:6052 --enrollment.profile tls --csr.hosts peer0.tna.com
将 /root/workspace/tna/peer0/tls-msp/keystore 下的 key更名为 key.pem
颁发 tna admin 证书
mkdir -p /root/workspace/tna/admin
export FABRIC_CA_CLIENT_HOME=/root/workspace/tna/admin
export FABRIC_CA_CLIENT_TLS_CERTFILES=/root/workspace/tna-ca/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://Admin@tna.com:1@ca.tna.com:6056
复制admin证书
mkdir -p /root/workspace/tna/peer0/msp/admincerts
cp /root/workspace/tna/admin/msp/signcerts/cert.pem /root/workspace/tna/peer0/msp/admincerts/cert.pem
mkdir -p /root/workspace/tna/admin/msp/admincerts
cp /root/workspace/tna/admin/msp/signcerts/cert.pem /root/workspace/tna/admin/msp/admincerts/cert.pem
启动peer0
export FABRIC_CFG_PATH=/root/fabric/cfg
export CORE_PEER_ID=peer0.tna.com
export CORE_PEER_ADDRESS=peer0.tna.com:7051
export CORE_PEER_LOCALMSPID=tnaMSP
export CORE_PEER_MSPCONFIGPATH=/root/workspace/tna/peer0/msp
export FABRIC_LOGGING_SPEC=info
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_TLS_CERT_FILE=/root/workspace/tna/peer0/tls-msp/signcerts/cert.pem
export CORE_PEER_TLS_KEY_FILE=/root/workspace/tna/peer0/tls-msp/keystore/key.pem
export CORE_PEER_TLS_ROOTCERT_FILE=/root/workspace/tna/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
export CORE_PEER_GOSSIP_USELEADERELECTION=true
export CORE_PEER_GOSSIP_ORGLEADER=false
export CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.tna.com:7051
export CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
nohup peer node start > /root/workspace/tna/peer0/peer0.log 2>&1 &
orderer 节点安装
orderer.cares.com
创建目录
mkdir -p /root/workspace/cares/orderer
颁发 orderer 证书
export FABRIC_CA_CLIENT_HOME=/root/workspace/cares/orderer
export FABRIC_CA_CLIENT_TLS_CERTFILES=/root/workspace/order-ca/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://orderer.cares.com:1@ca.cares.com:6054
颁发 TLS 证书
#sftp复制 tls.cares.com /root/workspace/tls-ca/crypto/ca-cert.pem 文件到 /root/workspace/tls-ca/crypto
mkdir -p /root/workspace/tls-ca/crypto
export FABRIC_CA_CLIENT_MSPDIR=tls-msp
export FABRIC_CA_CLIENT_HOME=/root/workspace/cares/orderer
export FABRIC_CA_CLIENT_TLS_CERTFILES=/root/workspace/tls-ca/crypto/ca-cert.pem
fabric-ca-client enroll -d -u https://orderer.cares.com:1@tls.cares.com:6052 --enrollment.profile tls --csr.hosts orderer.cares.com
将 /root/workspace/cares/orderer/tls-msp/keystore 下的 key更名为 key.pem
颁发 orderer admin 证书
mkdir -p /root/workspace/cares/admin
export FABRIC_CA_CLIENT_HOME=/root/workspace/cares/admin
export FABRIC_CA_CLIENT_TLS_CERTFILES=/root/workspace/order-ca/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_MSPDIR=msp
fabric-ca-client enroll -d -u https://Admin@orderer.cares.com:1@ca.cares.com:6054
复制admin证书
mkdir -p /root/workspace/cares/orderer/msp/admincerts
cp /root/workspace/cares/admin/msp/signcerts/cert.pem /root/workspace/cares/orderer/msp/admincerts/cert.pem
mkdir -p /root/workspace/cares/admin/msp/admincerts
cp /root/workspace/cares/admin/msp/signcerts/cert.pem /root/workspace/cares/admin/msp/admincerts/cert.pem
创建组织msp目录
mkdir -p /root/workspace/orgs-msp/{nkg,weh,tna,cares}
复制各自peer0 下admin 目录msp到上述目录,这里以nkg为例
cp -r /root/workspace/nkg/admin/* /root/workspace/orgs-msp/nkg
mkdir -p /root/workspace/orgs-msp/nkg/{admincerts,tlscacerts}
cp /root/workspace/orgs-msp/nkg/signcerts/cert.pem /root/workspace/orgs-msp/nkg/admincerts
cp /root/workspace/nkg/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem /root/workspace/orgs-msp/nkg/admincerts/tlscacerts
编写 /root/workspace/cfg/configtx.yaml
Organizations:
- &cares
Name: 华东凯亚
ID: ordererMSP
MSPDir: /root/workspace/orgs-msp/cares
- &nkg
Name: 南京机场
ID: nkgMSP
MSPDir: /root/workspace/orgs-msp/nkg
AnchorPeers:
- Host: peer0.nkg.com
Port: 7051
- &weh
Name: 威海机场
ID: wehMSP
MSPDir: /root/workspace/orgs-msp/weh
AnchorPeers:
- Host: peer0.weh.com
Port: 7051
- &tna
Name: 济南机场
ID: tnaMSP
MSPDir: /root/workspace/orgs-msp/tna
AnchorPeers:
- Host: peer0.tna.com
Port: 7051
Application: &ApplicationDefaults
# Organizations is the list of orgs which are defined as participants on
# the application side of the network
Organizations:
Profiles:
OrgsOrdererGenesis:
Orderer:
OrdererType: solo
Addresses:
- orderer.cares.com:7050
BatchTimeout: 2s
BatchSize:
MaxMessageCount: 10
AbsoluteMaxBytes: 99 MB
PreferredMaxBytes: 512 KB
Organizations:
- *cares
Consortiums:
SampleConsortium:
Organizations:
- *nkg
- *weh
- *tna
OrgsChannel:
Consortium: SampleConsortium
Application:
<<: *ApplicationDefaults
Organizations:
- *nkg
- *weh
- *tna
生成 anchor 节点文件
nkg
export FABRIC_CFG_PATH=/root/workspace/cfg/
configtxgen -profile OrgsChannel -outputAnchorPeersUpdate /root/workspace/blocks/nkgMSPanchors.tx -channelID securitycheck -asOrg nkg
weh
export FABRIC_CFG_PATH=/root/workspace/cfg/
configtxgen -profile OrgsChannel -outputAnchorPeersUpdate /root/workspace/blocks/wehMSPanchors.tx -channelID securitycheck -asOrg weh
tna
export FABRIC_CFG_PATH=/root/workspace/cfg/
configtxgen -profile OrgsChannel -outputAnchorPeersUpdate /root/workspace/blocks/tnaMSPanchors.tx -channelID securitycheck -asOrg tna
创建系统通道和应用通道
export FABRIC_CFG_PATH=/root/workspace/cfg
configtxgen -profile OrgsOrdererGenesis -outputBlock /root/workspace/blocks/genesis.block -channelID syschannel
configtxgen -profile OrgsChannel -outputCreateChannelTx /root/workspace/blocks/channel.tx -channelID securitycheck
启动 orderer
mkdir -p /root/workspace/cares/data
export FABRIC_CFG_PATH=/root/fabric/cfg
export ORDERER_HOME=/root/workspace/cares/data
export ORDERER_HOST=orderer.cares.com
export ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
export ORDERER_GENERAL_GENESISMETHOD=file
export ORDERER_GENERAL_GENESISFILE=/root/workspace/blocks/genesis.block
export ORDERER_GENERAL_LOCALMSPID=ordererMSP
export ORDERER_GENERAL_LOCALMSPDIR=/root/workspace/cares/orderer/msp
export ORDERER_GENERAL_TLS_ENABLED=true
export ORDERER_GENERAL_TLS_CERTIFICATE=/root/workspace/cares/orderer/tls-msp/signcerts/cert.pem
export ORDERER_GENERAL_TLS_PRIVATEKEY=/root/workspace/cares/orderer/tls-msp/keystore/key.pem
export ORDERER_GENERAL_TLS_ROOTCAS=[/root/workspace/cares/orderer/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem]
export ORDERER_GENERAL_LOGLEVEL=debug
export ORDERER_DEBUG_BROADCASTTRACEDIR=/root/workspace/cares/data/logs
nohup orderer start > /root/workspace/cares/orderer/orderer.log 2>&1 &
创建应用通道securitycheck,并加入
nkg 创建 securitycheck
export FABRIC_CFG_PATH=/root/fabric/cfg/
export FABRIC_LOGGING_SPEC=DEBUG
export CORE_PEER_ID=peer0.nkg.com
export CORE_PEER_ADDRESS=peer0.nkg.com:7051
export CORE_PEER_LOCALMSPID=nkgMSP
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_TLS_ROOTCERT_FILE=/root/workspace/nkg/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
export CORE_PEER_MSPCONFIGPATH=/root/workspace/nkg/admin/msp
peer channel create -c securitycheck -f /root/workspace/blocks/channel.tx -o orderer.cares.com:7050 --outputBlock /root/workspace/blocks/securitycheck.block --tls --cafile /root/workspace/nkg/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
nkg 加入 securitycheck
export FABRIC_CFG_PATH=/root/fabric/cfg/
export FABRIC_LOGGING_SPEC=DEBUG
export CORE_PEER_ID=peer0.nkg.com
export CORE_PEER_ADDRESS=peer0.nkg.com:7051
export CORE_PEER_LOCALMSPID=nkgMSP
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_TLS_ROOTCERT_FILE=/root/workspace/nkg/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
export CORE_PEER_MSPCONFIGPATH=/root/workspace/nkg/admin/msp
peer channel join -b /root/workspace/blocks/securitycheck.block
peer channel update -o orderer.cares.com:7050 -c securitycheck -f /root/workspace/blocks/nkgMSPanchors.tx --tls --cafile /root/workspace/nkg/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
weh 加入 securitycheck
export FABRIC_CFG_PATH=/root/fabric/cfg/
export FABRIC_LOGGING_SPEC=DEBUG
export CORE_PEER_ID=peer0.weh.com
export CORE_PEER_ADDRESS=peer0.weh.com:7051
export CORE_PEER_LOCALMSPID=wehMSP
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_TLS_ROOTCERT_FILE=/root/workspace/weh/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
export CORE_PEER_MSPCONFIGPATH=/root/workspace/weh/admin/msp
peer channel join -b /root/workspace/blocks/securitycheck.block
peer channel update -o orderer.cares.com:7050 -c securitycheck -f /root/workspace/blocks/wehMSPanchors.tx --tls --cafile /root/workspace/weh/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
tna 加入 securitycheck
export FABRIC_CFG_PATH=/root/fabric/cfg/
export FABRIC_LOGGING_SPEC=DEBUG
export CORE_PEER_ID=peer0.tna.com
export CORE_PEER_ADDRESS=peer0.tna.com:7051
export CORE_PEER_LOCALMSPID=tnaMSP
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_TLS_ROOTCERT_FILE=/root/workspace/tna/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
export CORE_PEER_MSPCONFIGPATH=/root/workspace/tna/admin/msp
peer channel join -b /root/workspace/blocks/securitycheck.block
peer channel update -o orderer.cares.com:7050 -c securitycheck -f /root/workspace/blocks/tnaMSPanchors.tx --tls --cafile /root/workspace/tna/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
安装、初始化链码
nkg 安装链码
export FABRIC_CFG_PATH=/root/fabric/cfg/
export FABRIC_LOGGING_SPEC=DEBUG
export CORE_PEER_ID=peer0.nkg.com
export CORE_PEER_ADDRESS=peer0.nkg.com:7051
export CORE_PEER_LOCALMSPID=nkgMSP
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_TLS_ROOTCERT_FILE=/root/workspace/nkg/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
export CORE_PEER_MSPCONFIGPATH=/root/workspace/nkg/admin/msp
peer chaincode install -n test -v 1.0 -p chaincode_example02 -l golang
weh 安装链码
export FABRIC_CFG_PATH=/root/fabric/cfg/
export FABRIC_LOGGING_SPEC=DEBUG
export CORE_PEER_ID=peer0.weh.com
export CORE_PEER_ADDRESS=peer0.weh.com:7051
export CORE_PEER_LOCALMSPID=wehMSP
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_TLS_ROOTCERT_FILE=/root/workspace/weh/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
export CORE_PEER_MSPCONFIGPATH=/root/workspace/weh/admin/msp
peer chaincode install -n test -v 1.0 -p chaincode_example02 -l golang
tna 安装链码
export FABRIC_CFG_PATH=/root/fabric/cfg/
export FABRIC_LOGGING_SPEC=DEBUG
export CORE_PEER_ID=peer0.tna.com
export CORE_PEER_ADDRESS=peer0.tna.com:7051
export CORE_PEER_LOCALMSPID=tnaMSP
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_TLS_ROOTCERT_FILE=/root/workspace/tna/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
export CORE_PEER_MSPCONFIGPATH=/root/workspace/tna/admin/msp
peer chaincode install -n test -v 1.0 -p chaincode_example02 -l golang
nkg 初始化并调用链码交易
export FABRIC_CFG_PATH=/root/fabric/cfg/
export FABRIC_LOGGING_SPEC=DEBUG
export CORE_PEER_ID=peer0.nkg.com
export CORE_PEER_ADDRESS=peer0.nkg.com:7051
export CORE_PEER_LOCALMSPID=nkgMSP
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_TLS_ROOTCERT_FILE=/root/workspace/nkg/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
export CORE_PEER_MSPCONFIGPATH=/root/workspace/nkg/admin/msp
peer chaincode instantiate -o orderer.cares.com:7050 -C securitycheck -n test -l golang -v 1.0 -c '{"Args":["init","a","200","b","200"]}' -P "OR ('tnaMSP.member','wehMSP.member','nkgMSP.member')" --tls --cafile /root/workspace/nkg/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
peer chaincode query -C securitycheck -n test -c '{"Args":["query","a"]}'
peer chaincode invoke -C securitycheck -n test -c '{"Args":["invoke","a","b","10"]}' --tls --cafile /root/workspace/nkg/peer0/tls-msp/tlscacerts/tls-tls-cares-com-6052.pem
peer chaincode query -C securitycheck -n test -c '{"Args":["query","a"]}'
区块链浏览器
编写go语言业务链码
package main
import (
"bytes"
"encoding/json"
"fmt"
"github.com/hyperledger/fabric/core/chaincode/shim"
sc "github.com/hyperledger/fabric/protos/peer"
"strconv"
)
type SecuritySmartContract struct {
}
type SecurityRecord struct {
Id string `json:"id"` // 身份证号
CreateTime string `json:"createTime"` // 违规时间
EventType string `json:"eventType"` // 违规类型
Desc string `json:"desc"` // 违规描述
Score int `json:"score"` // 加减分
Org string `json:"org"` // 组织
}
func (s *SecuritySmartContract) Init(APIstub shim.ChaincodeStubInterface) sc.Response {
return shim.Success(nil)
}
func (s *SecuritySmartContract) Invoke(APIstub shim.ChaincodeStubInterface) sc.Response {
function, args := APIstub.GetFunctionAndParameters()
if function == "add" {
return s.add(APIstub, args)
} else if function == "queryById" {
return s.queryById(APIstub,args)
}
return shim.Error("Invalid Smart Contract function name.")
}
func (s *SecuritySmartContract) add(APIstub shim.ChaincodeStubInterface, args []string) sc.Response {
if len(args) != 6 {
return shim.Error("Incorrect number of arguments. Expecting 5")
}
score,_ := strconv.Atoi(args[4])
var r = SecurityRecord{Id: args[0], CreateTime: args[1], EventType: args[2], Desc: args[3],Score: score,Org:args[5]}
carAsBytes, _ := json.Marshal(r)
APIstub.PutState(args[0], carAsBytes)
return shim.Success(nil)
}
func (s *SecuritySmartContract) queryById(APIstub shim.ChaincodeStubInterface, args []string) sc.Response {
if len(args) != 1 {
return shim.Error("Incorrect number of arguments. Expecting 1")
}
var id string = args[0];
resultsIterator, err := APIstub.GetHistoryForKey(id)
if err != nil {
return shim.Error(err.Error())
}
defer resultsIterator.Close()
var buffer bytes.Buffer
buffer.WriteString("[")
bArrayMemberAlreadyWritten := false
for resultsIterator.HasNext() {
queryResponse, err := resultsIterator.Next()
if err != nil {
return shim.Error(err.Error())
}
// Add a comma before array members, suppress it for the first array member
if bArrayMemberAlreadyWritten == true {
buffer.WriteString(",")
}
buffer.WriteString(string(queryResponse.Value))
bArrayMemberAlreadyWritten = true
}
buffer.WriteString("]")
fmt.Printf("- queryById:\n%s\n", buffer.String())
return shim.Success(buffer.Bytes())
}
func main() {
err := shim.Start(new(SecuritySmartContract))
if err != nil {
fmt.Printf("Error creating new Smart Contract: %s", err)
}
}
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!