进入到first-network
目录下
文件目录如下,可以看到所有文件执行权限都是root,所以在执行脚本时需要管理员权限sudo
前提准备:
- 1、生成组织结构及身份证书
- 2、创建orderer的初始区块 启动orderer服务
- 3、生成应用通道配置交易文件 用来生成应用通道,指定通道内的成员及访问策略
- 4、生成锚节点更新配置文件 用来配置锚节点
1、自动启动
byfn.sh
就是我们自动启动需要用到的脚本文件
启动前准备
byfn.sh generate 生成网络环境中的组织结构及相应的身份证书
执行成功:会在first-network
新创建一个crypto-config
文件夹,channel-artifacts
文件件下新生成4个文件,其中genesis.block
为创世区块,channel.tx
通道配置文件,Org1MSPanchors.tx
Org2MSPanchors.tx
,锚点配置文件
启动网络
byfn.sh up 启动网络
- 1、启动docker容器
- 2、进入容器中
- 3、创建应用通道
- 4、将对应的节点加入到应用通道中
- 5、更新锚节点
$ docker ps 查看指定节点是否启动
关闭网络
byfn.sh down 关闭网络
如果是自动启动,关闭网络后,在启动时新生成的文件会被一起删除
启动链码
1、安装链码 2、实例化链码 3、调用链码 - query - invoke put delete
2、手动启动
1、生成组织结构及身份证书
./bin/cryptogen showtemplate
只能生成两个组织,每个组织内有1个peer节点和1个管理员用户
如果需要按需生成组织结构即证书需要通过配置文件来生成,比如在first-network
中的crypto-config.yaml
进入到first-network
目录下执行:
sudo ../bin/cryptogen generate –config=./crypto-config.yaml
config = 配置文件路径
2、生成创世区块
需要使用configtx.yaml配置文件生成区块
查看配置文件内容
cat configtx.yaml
文件内容
Profiles:
TwoOrgsOrdererGenesis://生成orderer初始区块的配置
Capabilities:
<<: *ChannelCapabilities
Orderer:
<<: *OrdererDefaults
Organizations:
- *OrdererOrg //指定orderer的组织名称
Capabilities:
<<: *OrdererCapabilities
Consortiums: //指定联盟
SampleConsortium:
Organizations:
- *Org1
- *Org2
TwoOrgsChannel:
Consortium: SampleConsortium
Application:
<<: *ApplicationDefaults
Organizations:
- *Org1
- *Org2
Capabilities:
<<: *ApplicationCapabilities
Organizations:
- &OrdererOrg
Name: OrdererOrg
ID: OrdererMSP
MSPDir: crypto-config/ordererOrganizations/example.com/msp
- &Org1
Name: Org1MSP
ID: Org1MSP
MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
AnchorPeers:
- Host: peer0.org1.example.com
Port: 7051
- &Org2
Name: Org2MSP
ID: Org2MSP
MSPDir: crypto-config/peerOrganizations/org2.example.com/msp
AnchorPeers:
- Host: peer0.org2.example.com
Port: 7051
Orderer: &OrdererDefaults
OrdererType: solo
Addresses:
- orderer.example.com:7050
BatchTimeout: 2s //处理一批消息的超时时间
BatchSize: //指定区块大小
MaxMessageCount: 10 //指定最大的处理消息个数
AbsoluteMaxBytes: 99 MB //不管在什么情况下,区块的最大的大小
PreferredMaxBytes: 512 KB //建议区块大小,在单个消息不超过指定值时的大小,如果单个的消息大小超过指定的值(不能超过指定的最大值),也可以生成区块
Kafka:
Brokers:
- 127.0.0.1:9092
根据配置文件来创建传世区块
sudo ../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
如果执行成功在channel-artifacts文件夹下会生成genesis.block
文件
3、应用通道配置交易信息
sudo ../bin/configtxgen -profile TwoOrgsChannel -channelID $CHANNEL_NAME -outputCreateChannelTx ./channel-artifacts/channel.tx
如果执行成功在channel-artifacts文件夹下会生成channel.tx
文件
4、生成锚节点更新配置文件
生成组织1的锚节点
sudo ../bin/configtxgen -profile TwoOrgsChannel -channelID $CHANNEL_NAME -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -asOrg Org1MSP
生成组织2的锚节点
sudo ../bin/configtxgen -profile TwoOrgsChannel -channelID $CHANNEL_NAME -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -asOrg Org2MSP
如果执行成功在channel-artifacts文件夹下会生成Org1MSPanchors.tx
和Org2MSPanchors.tx
文件
5、安装链码
peer chaincode install -p github.com/chaincode/chaincode_example02/go/ -n mycc -v 1.0
参数说明 -n:指定要安装链码的名称 -v:指定要安装链码的版本号 -p:指定要安装链码的链码文件所在的路径(相对路径)
6、实例化链码
peer chaincode instantiate -o orderer.example.com:7050 -C $CHANNEL_NAME -n mycc -v 1.0 -c ‘{“Args”:[“init”,”a”,”100”,”b”,”200”]}’ –tls –cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem -P “OR(‘Org1MSP.peer’,’Org2MSP.peer’)”
-o:指定orderer服务地址 -n:指定链码的名称 -v:指定实例化的链码版本号 -c:指定实例化链码时的初始参数 -C:指定链码所属的通道 -P:指定链码的背书策略 –tls:是否开始tls –cafile:指定orderer的MSP的CA证书路径
7、调用链码
7.1、查询
echo $CHANNEL_NAME 查看环境变量是否存在
peer chaincode query -C $CHANNEL_NAME -n mycc -c ‘{“Args”:[“query”,”a”]}’ 参数说明: -C: 指定所属通道 -n:指定链码名称 -c:调用链码的传递的参数
7.2、修改
peer chaincode invoke -C $CHAN NEL_NAME -n mycc -c ‘{“Args”:[“invoke”,”a”,”b”,”10”]}’ -o orderer.example.com:7050 –tls –cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem
a给b转10token
删除docker内的镜像
docker rmi -f 镜像id