本文使用ubuntu 18作为系统,直接使用脚本启动Fabric网络,而非使用Docker容器来启动
1、安装环境
1.1、安装Ubuntu系统
到官网下载最新版的ubuntu镜像,我本地是使用虚拟机来安装ubuntu的,打开虚拟机,选择镜像文件,根据提示一路安装,
1.2、安装Docker
因为chaincode最终还是要在docker里跑,所以还是要先装一下docker环境
安装docker及docker-compose
1
2
apt install docker.io
apt install docker-compose
由于国内直接镜像比较慢,所以建议使用Docker镜像代理,在阿里云里使用”容器镜像服务->镜像加速器“,找到自己的镜像加速地址,根据不同的系统配置镜像加速器,ubuntu系统配置如下:
1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://youkey.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
1.3、安装Golang
1、下载安装包到服务器上
1
wget https://dl.google.com/go/go1.14.1.linux-amd64.tar.gz
2、解压安装包
1
tar -C /usr/local -xzf go1.14.1.linux-amd64.tar.gz
3、设置环境变量
1
2
3
4
5
6
7
8
vim ~/.bash_profile
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=/data/works/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOBIN=$GOROOT/bin
export GOPROXY=https://goproxy.io
1.4、安装其它工具
安装一些系统操作的必要软件
1
2
3
apt install curl #curl工具
apt-get install tree #树形结构查看文件
apt-get install jq
2、Fabric安装和编译
2.1、下载源码
1
2
3
mkdir -p $GOPATH/src/github.com/hyperledger
cd $GOPATH/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric
2.2、安装相关依赖软件
1
2
3
go get github.com/golang/protobuf/protoc-gen-go
mkdir -p $GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin
cp $GOPATH/bin/protoc-gen-go $GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin
2.3、编译Fabric模块
进入到Fabirc源码所在的文件夹,执行以下命令可以一次完成Fabric 5个主要模块的编译过程,具体的命令如下所示:
1
2
3
cd $GOPATH/src/github.com/hyperledger/fabric
make release #编译fabric模块
make docker #做成镜像,如果需要
对于Macos系统,在编译之前需要进行以下设置:
打开文件$GOPATH/src/github.com/hyperledger/fabric/Makefile
找到其中的第一个GO_LDFLAGS字符串的位置,在该字符串所在行的在行的末尾加上字符串-s
保存文件Makefile
上述命令执行完成之后,会自动将将编译好的二进制文件存放在以下路径中:
Ubuntu和Centos系统的存放路径
1
$GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin
Macos系统的存放路径
1
$GOPATH/src/github.com/hyperledger/fabric/release/darwin-amd64/bin
2.4、Fabric模块安装
编译完成之后,这些模块已经已经可以被运行了,但是目前只能在编译文件所在的文件夹中运行这些模块,这样是非常不方便的。为了更加方便的使用这些模块,可以通过下面的命令将这些模块的可执行文件复制到系统目录中,这样在系统中的任何路径下面都运行这些可执行这些模块。
Ubuntu和Centos将Fabric模块编译后的文件复制到系统文件夹中的方法如下:
1
cp $GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin/* /usr/local/bin
Macos上面将Fabric模块编译后的文件复制到系统文件夹中的方法如下:
1
cp $GOPATH/src/github.com/hyperledger/fabric/release/darwin-amd64/bin/* /usr/local/bin
复制成功之后通过以下命令修改文件的执行权限,否则无法执行。
1
2
3
4
5
sudo chmod -R 775 /usr/local/bin/configtxgen
sudo chmod -R 775 /usr/local/bin/configtxlator
sudo chmod -R 775 /usr/local/bin/cryptogen
sudo chmod -R 775 /usr/local/bin/peer
sudo chmod -R 775 /usr/local/bin/orderer
通过上面这些命令之后,可以在系统的任何路径下面运行这些模块了。下面通过一组命令来进检查安装过程是否成功。
2.5、检查各模块是否安装正确
采用 version 命令行选项
模块名称
功能
peer
主节点模块,负责存储区块链数据,运行维护链码
Orderer
交易打包、排序模块
cryptogen
组织和证书生成模块
configtxgen
区块和交易生成模块
configtxlator
区块和交易解析模块
3、启动Fabric网络
3.1、生成Fabric需要的证书文件
本例中我们将配置文件和生成的证书文件放在文件夹/opt/hyperledger/fabricconfig中。
创建存放证书的文件夹的命令如下所示:
1
mkdir -p /opt/hyperledger/fabricconfig
cryptogen提供了一个命令可以获取cryptogen模块所需要的配置文件的样式,该命令如下所示:
可以把上述命令生成的内容复制到一个文件中稍加修改即可使用。本例中我们所使用的配置文件的内容如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
OrdererOrgs:
- Name: Orderer
Domain: xuyao.com
Specs:
- Hostname: orderer
PeerOrgs:
- Name: Org1
Domain: org1.xuyao.com
Template:
Count: 2
Users:
Count: 3
- Name: Org2
Domain: org2.xuyao.com
Template:
Count: 2
Users:
Count: 2
将上述文件的内容保存到文件夹/opt/hyperledger/fabricconfig中,配置文件夹命名为:crypto-config.yaml。保存之后执行如下命令:
1
2
cd /opt/hyperledger/fabricconfig
cryptogen generate --config=crypto-config.yaml --output ./crypto-config
该命令执行完成之后我们会发现在文件夹/opt/hyperledger/fabricconfig中会新增加一个文件夹crypto-config,里面存放有本例的相关配置文件,可以通过tree命令查看生成证书文件的内容。
1
2
cd /opt/hyperledger/fabricconfig
tree -L 5
执行命令 tree -L 5 显示如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
├── crypto-config
│ ├── ordererOrganizations
│ │ └── xuyao.com
│ │ ├── ca
│ │ ├── msp
│ │ ├── orderers
│ │ ├── tlsca
│ │ └── users
│ └── peerOrganizations
│ ├── org1.xuyao.com
│ │ ├── ca
│ │ ├── msp
│ │ ├── peers
│ │ ├── tlsca
│ │ └── users
│ ├── org2.xuyao.com
│ │ ├── ca
│ │ ├── msp
│ │ ├── peers
│ │ ├── tlsca
│ │ └── users
在上述命令显示的内容中提取出后缀为 qklszzn.com域名。本例中提取信息如下:
1
2
3
4
5
6
orderer.xuyao.com
peer0.org1.xuyao.com
peer1.org1.xuyao.com
peer3.org1.xuyao.com
peer0.org2.xuyao.com
peer1.org2.xuyao.com
通过上述步骤所有的证书文件都已经生成完毕,现在需要将测试域名映射到本机的IP地址上面,否则后面的操作可能会出现错误。
打开端映射文件,在打开的文件中设置如下内容
1
2
3
4
5
6
192.168.23.212 orderer.xuyao.com
192.168.23.212 peer0.org1.xuyao.com
192.168.23.212 peer1.org1.xuyao.com
192.168.23.212 peer3.org1.xuyao.com
192.168.23.212 peer0.org2.xuyao.com
192.168.23.212 peer1.org2.xuyao.com
3.2、生成创世块
3.2.1、系统创始块的生成
Fabric是基于区块链的分布式账本,每个账本都拥有自己的区块链,账本的区块链中会存储账本的交易,账本区块链中的第一个区块是个例外,该区块不存在交易数据而是存储配置信息,通常将账本的第一个区块成为创始块。综上所述,Fabric中账本的第一个区块是需要手动生成的。configtxgen模块是专门负责生成系统的创始块和Channel的创始块。configtxgen模块也需要一个配置文件来定义相关的属性。
在Fabric源码中提供的configtxgen模块所需要的配置文件的例子。该文件的路径是$GOPATH/src/github.com/hyperledger/fabric/sampleconfig,在这个目录下面有一个名为configtx.yaml的文件,对这个文件进行修即可使用。由于创始块文件是提供给Orderer节点使用,因此我们创建文件一个文件夹来存在Orderer节点相关的文件。文件夹创建之后把样例配置文件复制到该文件夹中。
创建存放configtxgen模块相关配置文件的文件夹的命令如下所示:
1
2
3
mkdir -p /opt/hyperledger/order/
cp -r $GOPATH/src/github.com/hyperledger/fabric/sampleconfig/configtx.yaml /opt/hyperledger/order
cd /opt/hyperledger/order
对configtx.yaml进行修改,修改后的内容如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Profiles:
TestTwoOrgsOrdererGenesis:
Orderer:
<<: *OrdererDefaults
Organizations:
- *OrdererOrg
Consortiums:
SampleConsortium:
Organizations:
- *Org1
- *Org2
TestTwoOrgsChannel:
Consortium: SampleConsortium
Application:
<<: *ApplicationDefaults
Organizations:
- *Org1
- *Org2
Organizations:
- &OrdererOrg
Name: OrdererOrg
ID: OrdererMSP
MSPDir: /opt/hyperledger/fabricconfig/crypto-config/ordererOrganizations/xuyao.com/msp
- &Org1
Name: Org1MSP
ID: Org1MSP
MSPDir: /opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.xuyao.com/msp
AnchorPeers:
- Host: peer0.org1.xuyao.com
Port: 7051
- &Org2
Name: Org2MSP
ID: Org2MSP
MSPDir: /opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org2.xuyao.com/msp
AnchorPeers:
- Host: peer0.org2.xuyao.com
Port: 7051
Orderer: &OrdererDefaults
OrdererType: solo
Addresses:
- orderer.xuyao.com:7050
BatchTimeout: 2s
BatchSize:
MaxMessageCount: 10
AbsoluteMaxBytes: 98 MB
PreferredMaxBytes: 512 KB
Kafka:
Brokers:
- 127.0.0.1:9092
Organizations:
Application: &ApplicationDefaults
Organizations:
配置文件修改完成之后执行如下面命令生成创始块文件。
1
2
cd /opt/hyperledger/order
configtxgen -profile TestTwoOrgsOrdererGenesis -outputBlock ./genesis.block
上述命令执行完成之后会在文件夹/opt/hyperledger/order中生成文件genesis.block。这是Fabric系统的创始块文件。
3.2.2、账本创始块的生成
创建Channel也是通过configtxgen模块完成的,创建Channel初始块的配置文件和创建系统初始块的配置文件是一样的,具体在本例中,Channel的创始块的配置信息已经定义在本节第一部分系统创始块的生成中生成的配置文件configtx.yaml中。
创建Channel的命令如下:
1
configtxgen -profile TestTwoOrgsChannel -outputCreateChannelTx ./roberttestchannel.tx -channelID roberttestchannel
上述命令执行完成之后会在目录生成文件roberttestchannel.tx,该文件用来生成Channel。除此之外还需要生成相关的锚点文件,生成锚点文件需要执行以下命令:
1
2
3
configtxgen -profile TestTwoOrgsChannel -outputAnchorPeersUpdate ./Org1MSPanchors.tx -channelID roberttestchannel -asOrg Org1MSP
configtxgen -profile TestTwoOrgsChannel -outputAnchorPeersUpdate ./Org2MSPanchors.tx -channelID roberttestchannel -asOrg Org2MSP
上面命令执行完成之后会在相应的文件夹下面生成文件Org1MSPanchors.tx和Org2MSPanchors.tx,这些文件在后面会被使用到。
3.3、Orderer节点的启动
Orderer节点负责交易的打包和区块的生成。Orderer节点的配置信息通常放在环境变量或者配置文件中,本例中的配置信息统一存放在配置文件中。在Fabric源码提供了Orderer启动所用到的配置文件的实例,将示例配置文件复制到Orderer的文件夹下面修改即可使用。
复制配置文件到Orderer文件夹的命令如下所示:
1
2
cd /opt/hyperledger/peer
cp $GOPATH/src/github.com/hyperledger/fabric/sampleconfig/orderer.yaml /opt/hyperledger/orderer
在模板配置文件上稍加修改即可满足本例使用,由于篇幅本例中我们只列出需要修改的部分。修改后配置文件中发生变化的内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
General:
LedgerType: file
ListenAddress: 0.0.0.0
ListenPort: 7050
TLS:
Enabled: false
PrivateKey: /opt/hyperledger/fabricconfig/crypto-config/ordererOrganizations/xuyao.com/orderers/orderer.xuyao.com/tls/server.key
Certificate: /opt/hyperledger/fabricconfig/crypto-config/ordererOrganizations/xuyao.com/orderers/orderer.xuyao.com/tls/server.crt
RootCAs:
- /opt/hyperledger/fabricconfig/crypto-config/ordererOrganizations/xuyao.com/orderers/orderer.xuyao.com/tls/ca.crt
ClientAuthEnabled: false
ClientRootCAs:
LogLevel: debug
LogFormat: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
GenesisMethod: file
GenesisProfile: TestOrgsOrdererGenesis
GenesisFile: /opt/hyperledger/order/orderer.genesis.block
LocalMSPDir: /opt/hyperledger/fabricconfig/crypto-config/ordererOrganizations/xuyao.com/orderers/orderer.xuyao.com/msp
LocalMSPID: OrdererMSP
Profile:
Enabled: false
Address: 0.0.0.0:6060
BCCSP:
Default: SW
SW:
Hash: SHA2
Security: 256
FileKeyStore:
KeyStore:
FileLedger:
Location: /opt/hyperledger/order/production/orderer
Prefix: hyperledger-fabric-ordererledger
RAMLedger:
HistorySize: 1000
Debug:
BroadcastTraceDir:
DeliverTraceDir:
在配置文件orderer.yaml所在的目录执行如下命令启动orderer
3.4、Peer节点启动
Peer模块是Fabric的核心节点,所有的交易数据经过Orderer排序打包之后由Peer模块存储在区块链中。所有的Chaincode也是有Peer模块打包并且激活的。Peer模块的配置信息同样由环境变量和配置文件组成,本例中我们采用配置文的方式来配置peer节点的参数。在设定配置文件之前需要创建一个文件夹存放Peer模块的配置文件和区块数据。在Fabric源码中同样提供了Peer模块配置文件的示例,将示例配置文件复制到Peer模块的文件夹下面修改即可使用。
创建存储Peer模块的配置文件和区块数据的文件夹,并复制示例配置文件的命令如下所示:
1
2
3
mkdir -p /opt/hyperledger/peer
cd /opt/hyperledger/peer
cp $GOPATH/src/github.com/hyperledger/fabric/sampleconfig/core.yaml /opt/hyperledger/peer
在模板配置文件上稍加修改即可使用,由于篇幅本例中我们只列出需要修改的部分。修改后Peer模块配置文件中变化的内容如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
logging:
peer: debug
cauthdsl: warning
gossip: warning
ledger: info
msp: warning
policies: warning
grpc: error
format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
peer:
id: peer0.org1.qklszzn.com
networkId: dev
listenAddress: 0.0.0.0:7051
chaincodeListenAddress: 0.0.0.0:7052
address: peer0.org1.xuyao.com:7051
addressAutoDetect: false
gomaxprocs: -1
gossip:
bootstrap: 127.0.0.1:7051
useLeaderElection: true
orgLeader: false
endpoint:
maxBlockCountToStore: 100
maxPropagationBurstLatency: 10ms
maxPropagationBurstSize: 10
propagateIterations: 1
propagatePeerNum: 3
pullInterval: 4s
pullPeerNum: 3
requestStateInfoInterval: 4s
publishStateInfoInterval: 4s
stateInfoRetentionInterval:
publishCertPeriod: 10s
skipBlockVerification: false
dialTimeout: 3s
connTimeout: 2s
recvBuffSize: 20
sendBuffSize: 200
digestWaitTime: 1s
requestWaitTime: 1s
responseWaitTime: 2s
aliveTimeInterval: 5s
aliveExpirationTimeout: 25s
reconnectInterval: 2
externalEndpoint: peer0.org1.qklszzn.com:7051
election:
startupGracePeriod: 15s
membershipSampleInterval: 1s
leaderAliveThreshold: 10s
leaderElectionDuration: 5s
pvtData:
maxPeers: 3
minAck: 3
events:
address: 0.0.0.0:7053
buffersize: 100
timeout: 10ms
tls:
enabled: false
cert:
file: /opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.xuyao.com/peers/peer0.org1.xuyao.com/tls/server.crt
key:
file: /opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.xuyao.com/peers/peer0.org1.xuyao.com/tls/server.key
rootcert:
file: /opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.xuyao.com/peers/peer0.org1.xuyao.com/tls/ca.crt
serverhostoverride:
fileSystemPath: /opt/hyperledger/peer/production
BCCSP:
Default: SW
SW:
Hash: SHA2
Security: 256
FileKeyStore:
KeyStore:
mspConfigPath: /opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.xuyao.com/peers/peer0.org1.xuyao.com/msp
localMspId: Org1MSP
profile:
enabled: false
listenAddress: 0.0.0.0:6060
handlers:
authFilter: "DefaultAuth"
decorator: "DefaultDecorator
vm:
endpoint: unix:///var/run/docker.soc
docker:
tls:
enabled: false
ca:
file: docker/ca.crt
cert:
file: docker/tls.crt
key:
file: docker/tls.key
attachStdout: false
hostConfig:
NetworkMode: host
Dns:
LogConfig:
Type: json-file
Config:
max-size: "50m"
max-file: "5"
Memory: 2147483648
chaincode:
peerAddress:
id:
path:
name:
builder: $(DOCKER_NS)/fabric-ccenv:$(ARCH)-$(PROJECT_VERSION)
golang:
runtime: $(BASE_DOCKER_NS)/fabric-baseos:$(ARCH)-$(BASE_VERSION)
car:
runtime: $(BASE_DOCKER_NS)/fabric-baseos:$(ARCH)-$(BASE_VERSION)
java:
Dockerfile: |
from $(DOCKER_NS)/fabric-javaenv:$(ARCH)-$(PROJECT_VERSION)
node:
runtime: $(BASE_DOCKER_NS)/fabric-baseimage:$(ARCH)-$(BASE_VERSION)
startuptimeout: 300s
executetimeout: 30s
mode: dev
keepalive: 0
system:
cscc: enable
lscc: enable
escc: enable
vscc: enable
qscc: enable
rscc: disable
logging:
level: info
shim: warning
format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
ledger:
blockchain:
state:
stateDatabase: goleveldb
couchDBConfig:
couchDBAddress: 127.0.0.1:5984
username:
password:
maxRetries: 3
maxRetriesOnStartup: 10
requestTimeout: 35s
queryLimit: 10000
history:
enableHistoryDatabase: true
在配置文件core.yaml所在的文件夹中执行以下命令启动order节点
1
2
3
4
export set FABRIC_CFG_PATH=/opt/hyperledger/peer
peer node start
#或者后台启动
peer node start >> log_peer.log 2>&1 &
3.5、创建通道
现在我们可以创建通道,创建通道的过程一共需要三个步骤。
第一步: 创建通道
1
2
3
4
5
6
export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_MSPCONFIGPATH=/opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.qklszzn.com/users/Admin@org1.xuyao.com/msp
cd /opt/hyperledger/order
peer channel create -t 50s -o orderer.xuyao.com:7050 -c mychannel -f /opt/hyperledger/order/mychannel.tx
创建通道完成之后,会在执行命令的当前目录生成名为mychannel.block的通道创始块文件
第二步:让已经运行的Peer模块加入通道
1
2
3
4
5
export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_ADDRESS=peer0.org1.xuyao.com:7051
export set CORE_PEER_MSPCONFIGPATH=/opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.xuyao.com/users/Admin@org1.xuyao.com/msp
peer channel join -b /opt/hyperledger/orderer/mychannel.block
在上述创建通道的命令中-b后面的参数为第一步中生成的文件roberttestchannel.block,需要注意这个文件的路径。
第三步:更新锚节点
1
2
3
4
5
6
export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_ADDRESS=peer0.org1.xuyao.com:7051
export set CORE_PEER_MSPCONFIGPATH=/opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.xuyao.com/users/Admin@org1.xuyao.com/msp
peer channel update -o orderer.xuyao.com:7050 -c mychannel -f /opt/hyperledger/order/Org1MSPanchors.tx
3.6、Chaincode的部署和调用
现在可以部署一个Chaincode(关于Chaincode的详细内容在本书的第七章会有详细的介绍)来测试Peer节点和Orderer节点的部署是否正确。这里采用Fabric源码自带的例子来作为测试Chaincode。测试用Chaincode的源代码路径如下所示
1
$GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd
Chaincode相关的测试一共有四个步骤。
第一步: 部署chaincode代码
1
2
3
4
5
6
export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_ADDRESS=peer0.org1.xuyao.com:7051
export set CORE_PEER_MSPCONFIGPATH=/opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.xuyao.com/users/Admin@org1.xuyao.com/msp
peer chaincode install -n xuyao_test_cc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd
第二步: 实例化chaincode代码
1
2
3
4
5
export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_ADDRESS=peer0.org1.xuyao.com:7051
export set CORE_PEER_MSPCONFIGPATH=/opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.xuyao.com/users/Admin@org1.xuyao.com/msp
peer chaincode instantiate -o orderer.xuyao.com:7050 -C mychannel -n xuyao_test_cc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
第三步:通过chaincode写入数据
1
2
3
4
5
export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_ADDRESS=peer0.org1.xuyao.com:7051
export set CORE_PEER_MSPCONFIGPATH=/opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.xuyao.com/users/Admin@org1.xuyao.com/msp
peer chaincode invoke -o orderer.xuyao.com:7050 -C mychannel -n xuyao_test_cc -c '{"Args":["invoke","a","b","1"]}'
第四步:通过chaincode查询数据
1
2
3
4
5
export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_ADDRESS=peer0.org1.xuyao.com:7051
export set CORE_PEER_MSPCONFIGPATH=/opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.xuyao.com/users/Admin@org1.xuyao.com/msp
peer chaincode query -C mychannel -n xuyao_test_cc -c '{"Args":["query","a"]}'
如果上述命令都能正确执行,那么一个简单的Fabric系统就已经部署完成了。