1、fabric测试网络
1.1.启动测试网络 首先回到clone好项目的目录,执行如下命令进入测试网络所在文件夹 启动前先运行,这一步,否则必出错误(虽然我也不知道为什么这样做就不错误,但是我试了两遍,都没错)
systemctl start docker
cd fabric-samples/test-network
在这里可以看到一个network.sh文件,执行./network.sh -h可以看到它的使用说明
下面这条命令会移除先前所有运行中的容器
sudo ./network.sh down
然后执行如下的命令,会创建一个Fabric网络。
sudo ./network.sh up
这个网络由两个peer节点,一个order节点组成,当使用这个命令的时候,不会有channel被建立,如果成功的话可以看到如下的输出。
可以通过如下命令查看当前运行的三个Docker容器,这三个容器就是由刚才的up命令创建的
sudo docker ps -a
每个与Fabric网络交互的节点需要属于一个作为网络成员的组织,这些组织所组成的组被称为consortium(联盟),这个测试网络有两个联盟成员Org1和Org2,还有一个为网络提供排序服务的排序组织。
Peers是Fabric网络的基础组件,它存储区块链的账本,并在交易提交到账本之前验证交易,Peers也运行包含着业务逻辑的智能合约,由此来管理账本上的资产。
网络中的每个Peer都属于联盟的一个成员,在测试网络中peer0.org1.example.com和peer0.org2.example.com各有一个peer。
每个Fabric网络也包含一个排序服务,用于将交易进行排序,这样可以让peer节点专注于验证交易和提交到账本。在order节点收到来自客户端的交易之后,会按照顺序添加到一个块中,然后分发到各个peer中,加入区块链账本。此外order节点还可以操作系统的channel,定义哪些组织是联盟成员。
测试网络中用了一个Raft排序节点来提供排序服务,这个节点所属组织为orderer.example.com,在测试网络中只有一个order节点,但是在真实的网络中,可能会有被多个组织操作的多个排序节点,不同的排序节点会利用Raft共识算法在网络中来达成交易的一致。
1.2.创建一个Channel Channel是一个用于特定网络成员之间通信的私有层,只有被邀请加入Channel的成员才能够使用它,对网络中其他成员不可见,每个Channel都有一个单独的区块链账本,被邀请加入Channel的peer可以存储Channel的账本然后验证Channel的交易。
运行如下命令可以创建一个名为mychannel的Channel连接Org1和Org2。
./network.sh createChannel
只要最后打印出========= Channel successfully joined ===========就说明创建成功了,也可以利用-c来自定义Channel的名称,通过指定不同的名称可以创建多个Channel。
如果想要在启动测试网络的同时创建Channel,可以同时使用up和createChannel两个参数。
1.3.在管道中使用chaincode(智能合约) 在创建channel之后,可以使用智能合约来和channel的账本交互,运行在网络成员上的应用可以调用智能合约来改变账本上的资产,也可以查询智能合约来读取账本上的数据。
多重签名用于保证利用智能合约创建的交易的有效性,在提交到账本之前,智能合约会被多个组织签名,这样可以防止一个组织篡改账本,只有交易是连续的,而且被足够多的组织签名之后,才会提交到账本中。指明channel中组织的策略也是chaincode定义的部分。
在Fabric中,只能合约以chaincode的形式部署在网络中,一个智能合约会安装在一个组织的peers中,之后才能部署在Channel中,这样才可以用于和区块链账本交互和交易背书,Channel中的成员需要同意chaincode中的定义,这些定义建立了chaincode的治理,只有足够多的成员同意了定义,才能将这个定义提交到channel中,来进行使用。
这里运行如下命令可以启动一个用于刚刚创建好的channel的chaincode
./network.sh deployCC
这个命令会创建一个名为fabcar的chaincode到两个peer上,然后用在两个peer所属的channel上。看到如下的输出说明已经创建完毕。
这里默认是使用go语言的chaincode,不过事实上fabric也支持Java等语言,用-l参数指明即可
在fabcar chaincode的定义提交到channel之后,这个脚本会调用init函数来初始化这个chaincode,然后调用这个chaincode来防止初始化的车辆列表到账本中,然后会使用查询chaincode的方式来确认数据已经被添加了,这些数据将会用于之后的测试。
2、添加节点
参考链接
https://blog.csdn.net/zekdot/article/details/106977734
|