1、启动网络
先打开终端1窗口(当前终端)
为了确保系统中的Docker镜像文件是完整的,首先使用docker images命令查看Docker镜像信息(显示本地Docker Registry):
sudo docker images
在dev模式中,所需的必要镜像文件如下:
- hyperledger/fabric-tools
- hyperledger/fabric-orderer
- hyperledger/fabric-peer
- hyperledger/fabric-ccenv
关闭之前已经启动的网络环境:
sudo docker-compose -f docker-compose-cli.yaml down
为了能够使用dev模式,需要进人chaincode-docker-devmode目录:
cd ~/hyperledgerfabric/fabric-samples/chaincode-docker-devmode/
进人chaincode-docker-devmode目录下会发现与网络、通道、初始区块相关的所有内容。
例如:
- docker-compose-.simple.yaml:网络启动依赖的配置文件。该配置文件指定了4个容器,分别为Orderer、Peer、CLI、Chaincode,各项的配置内容可以通过cat命令查看。
- msp:网络环境的MSP,包含一系列的证书及私钥。
- myc.block:代表通道配置块文件。
- myc.tx:应用通道交易配置文件。
- orderer.block:初始区块配置文件。
下面使用docker-compose-simple.yaml配置文件来启动网络:
sudo docker-compose -f docker-compose-simple.yaml up -d
上面的命令以docker-compose-simple.yaml启动了网络,并以开发模式启动Peer,另外
还启动了两个容器:
- 一个Chaincode容器,用于链码环境;
- 一个CLI容器,用于与链码进行交互。
命令执行后,终端输出如下信息:
- Creating orderer
- Creating peer
- Creating chaincode
- Creating cli
创建和连接通道的命令被嵌入CLI容器中,因此可以立即跳转到链码调用。
2、构建并启动链码
网络启动成功后,下一步需要开发者自行对已经编写好的链码进行构建及启动,开启1个新的终端2窗口。
1、进入chaincode容器
Chaincode容器的作用是以简化的方式建立并启动链码:
sudo docker exec -it chaincode bash
2、编译
在终端窗口2中执行如下命令,进入 chaincode_example02/go/目录编译链码:
cd chaincode_example02/go/
go build
3、运行链码
启动链码
CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=mycc:0 ./go
CORE_PEER_ADDRESS=peer:7052
:这是一个环境变量,它指定了与链码交互的对等节点(peer)的地址和端口号。在这里,对等节点的地址被设置为peer
,端口号为7052。
CORE_CHAINCODE_ID_NAME=mycc:0
:这也是一个环境变量,它定义了链码的标识符。mycc
是链码的名称,0
表示链码的版本。链码的标识符在网络中必须是唯一的。
./go
:这是要执行的实际命令或二进制文件。在这种情况下,./go
是一个可执行文件,用于启动Go语言链码容器。
在此阶段,链码与任何通道都没有关联。需要在后续步骤中使用“实例化”命令来完成。
4、调用链码
新建一个终端3 窗口
首先进入CLI容器
sudo docker exec -it cli bash
进入CLI容器后,执行相应命令安装实例化链码。
1、安装链码
peer chaincode install -p chaincodedev/chaincode/chaincode_example02/go -n mycc -v 0
peer chaincode install
:这是用于在 Peer 节点上安装链码的命令。Peer 节点是 Hyperledger Fabric 网络中的节点,负责执行链码操作。-p chaincodedev/chaincode/chaincode_example02/go
:这是指定要安装的链码路径的参数。在这个例子中,链码位于chaincodedev/chaincode/chaincode_example02/go
目录下。-n mycc
:这是指定链码的名称的参数。在这个例子中,链码的名称为mycc
。-v 0
:这是指定链码的版本参数。在这个例子中,链码的版本为0
。
安装链码时指定的链码名称与版本号必须与在终端2中注册的链码名称及版本号相同。
2、实例化链码
peer chaincode instantiate -n mycc -v 0 -c '{"Args":["init","a","100","b","200"]}' -C myc
3、查询链码
peer chaincode query -n mycc -c '{"Args":["query","a"]}' -C myc
4、执行链码
peer chaincode invoke -n mycc -c '{"Args":["invoke","a","b","100"]}' -C myc
5、再次查询链码
peer chaincode query -n mycc -c '{"Args":["query","a"]}' -C myc
1.net模式与dev模式有什么区别?
使用t模式,每次修改链码后想要测试时,需要对链码进行升级并重新实例化(或
重新安装再实例化),指定很多参数,给开发调试带来了很大的不便;而dv模式就简化
了这些过程。
2.CORE_PEER ADDRESS=peer:7052中的7052端口指的是什么,为什么不是7051?
7052是用于指定链码的专用监听地址及端口号,而7051是Peer节,点监听的网络端口。