Hyperledger Fabric 1.1搭建文档

手动安装:https://www.cnblogs.com/studyzy/p/7451276.html

注意是cli和base的yaml都要修改environment
- GODEBUG=netdns=go
注意格式,最好从下面复制
注意gopath一定要在opt文件夹下,不要使用fabric-sample启动

Fabric-ca安装https://www.cnblogs.com/midfielder/p/7173121.html
启动报错用这个https://blog.csdn.net/yubc2167761/article/details/79922393
Ca name初始值为空

https://www.cnblogs.com/midfielder/p/7173121.html
https://www.cnblogs.com/midfielder/p/7173121.html

fabric-ca-client register –id.name admin2 –id.type user –id.affiliation org1.department1
Password: vZEuhwIlnbWH

fabric-ca-client register –id.name Admin –id.type user –id.affiliation org1.department1
2018/06/25 09:24:12 [INFO] Configuration file location: /root/.fabric-ca-client/fabric-ca-client-config.yaml
Password: hUwLaRhQTxRE

阿里云docker坑:https://www.cnblogs.com/cnblogs-wangzhipeng/p/8759104.html
以及:在 ECS 中启动 Fabric 节点,需要加上环境变量 “GODEBUG=netdns=go”

Docker停止所有容器:
dockerstop d o c k e r s t o p (docker ps -a -q) // stop停止所有容器
dockerrm d o c k e r r m (docker ps -a -q) // remove删除所有容器

使用下面的文档做开发用,请在opt的gopath文件夹下新建bin文件夹
本文参考了fabric官方文档:http://hyperledger-fabric.readthedocs.io/en/latest/peer-chaincode-devmode.html?highlight=peer-chaincodedev
在fabric中peer节点有一个chaincodedev模式,在这个模式下面你可以不需要去实例化一个docker容器再去执行智能合约,可以在本地直接运行,这样更加方便你调试。

为了不重复造轮子,作者建立了一个github工程:https://github.com/luckydogchina/fabric-v1.1.0-chaincodedev

1.首先准备好fabric v1.1.0工程和相关环境,这里我就不赘述了。然后我们下载fabric-v1.1.0-chaincodedev工程,按照README.md执行,终端显示如下的结果:

  注意:执行前请保证本地的7050~7053端口没有被其他进程所占用。
2. 查看当前的channel状况:
  #开启一个终端窗口A,进入 fabric-v1.1.0-chaincodedev/chaincodedev
  cd $fabric-v1.1.0-chaincodedev/chaincodedev
  #枚举当前已经存在的channel
  FABRIC_CFG_PATH=./sampleconfig peer channel list
  显示结果如下:
    
 可以清楚的看到,此时已经创建了两个channel test1、test2;
3.编译智能合约并安装
 这里以example02智能合约为例: 

开启一个新终端B,进入fabric的example目录下

  cd $fabric/examples/chaincode/go/chaincode_example02
  #编译出智能合约
go build
  #运行智能合约在本地,注意一定要保持运行状态
  CORE_CHAINCODE_LOGLEVEL=debug CORE_PEER_ADDRESS=127.0.0.1:7052 CORE_CHAINCODE_ID_NAME=mycc:0 ./chaincode_example02
  

在终端窗口A中执行安装命令:

  FABRIC_CFG_PATH=./sampleconfig peer chaincode install -n mycc -v 0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
  #初始化智能合约,根据不同的智能合约要求,要填入不同的参数
   FABRIC_CFG_PATH=./sampleconfig peer chaincode instantiate -n mycc -v 0 -c ‘{“Args”:[“init”,”a”,”100”,”b”,”200”]}’ -o 127.0.0.1:7050 -C test1
注意:此时你已经在 channel test1中安装了智能合约 chaincode_example02;
4.执行智能合约
  #在终端窗口A中执行以下命令:
   FABRIC_CFG_PATH=./sampleconfig peer chaincode invoke -n mycc -c ‘{“Args”:[“invoke”,”a”,”b”,”10”]}’ -o 127.0.0.1:7050 -C test1
  注意:此时a向b转了10元钱,a的账户余额应为90,b的账户余额应为210;
  #执行查询命令
  FABRIC_CFG_PATH=./sampleconfig peer chaincode query -n mycc -c ‘{“Args”:[“query”,”b”]}’ -o 127.0.0.1:7050 -C test1 #查询a的余额
  FABRIC_CFG_PATH=./sampleconfig peer chaincode query -n mycc -c ‘{“Args”:[“query”,”b”]}’ -o 127.0.0.1:7050 -C test1 #查询b的余额
  
此时我们可以看到窗口B中运行的智能合约打印的日志:
  

到此为止我们的示例就讲完了,最后我简单陈述一下dev模式下和正式环境下智能合约运行有什么不同:
  正式环境下:
    invoke proposal–> endorser –>docker container–>chaincode
  dev环境下:
    invoke proposal –> endorser –> chaincode
  注意:在执行过程中chaincode要一直保持运行。
那么chaincode是如何与 endorser之间交互的?
  只要简单的浏览以下fabric的源码你就会发现,fabric中主要有以下几个grpc通讯服务:
    eventhub:用于事件流服务,客户端调用此服务向peer注册监听事件;
    broadcast:用于交易的广播,client向orderer提交交易的时候用的就是这个服务;
    deliver:提交区块,peer节点通过这个服务从orderer节点拉取新生成的块;
    chaincode:智能合约与endorser之间通讯服务;
    gossip:流言服务,用于同一个组织下的peer之间进行数据的同步(Anchor节点向其他节点同步区块账本).
  为什么智能合约和fabric之间还有一个grpc通讯服务?这是因为智能合约通常有读取和写入区块链账本的行为,区块链账本是在endorser节点本地保存的,而智能合约是在endorser节点的docker容器中运行的,它无法直接endorser节点本地从读取数据,只有通过endorser节点中转才能完成读写数据的动作。chaincodes server的端口默认为7052,所以我们在模拟运行的时候要告诉智能合约peer chaincode server的服务地址是 127.0.0.1:7052。那么有同志要问了,在本文的环境中peer也是在容器里面运行的,为什么你指定的地址是127.0.0.1,很简单,peer容器的7052端口绑定的是本地的7052端口,所以你向本地地址发送就可以了。
  另外在阿里云服务器上运行docker-compose环境,尤其是涉及到容器之间交互通讯的,可能发生无法通讯的情况,这时你要修改一下云服务的网络配置:
  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值