
最近在跑fabric2.3自测链码的时候遇到了很多错误,自己也是很苦恼,改了好几个下午的bug就是找不到真正的问题所在,下面先看一个错误:
Error: could not assemble transaction: ProposalResponsePayloads do not match - proposal response: version:1 response: 其实这个AddPeer的链码是非常基础的就是往账本里存数据,然后就会报错,这里注意这里模拟的是fabric多机环境,也就是多个peer的情况,之前我记得在单机环境(一个peer)的情况测过链码是ok的,但是为什么多机是不行了呢? 我们接着看到链码源码: 原因是因为这里有一个随机生成数的一个方法,我猜测,因为每一次在运行这个方法的时候都会生成不一样的数,所以在多个peer上同时运行这个链码的时候就会出现这个值不一样的情况,进而达不成共识!自然也就会存入账本失败了! 我们如上图把这个方法注释后,再进行测试: 显示成功了! Chaincode:链上代码,简称链码,一般是指由开发人员使用Go语言(也支持Java等语言)编写的应用程序代码,提供分布式账本的状态处理逻辑。链码被部署在Fabric的网络节点中,能够独立运行在具有安全特性的受保护的 Docker 容器中,以 gRPC 协议与相应的 peer 节点进行通信,以操作(初始化或管理)分布式账本中的数据。可以根据不同的需求开发出不同的复杂的应用。 由应用程序开发人员根据不同场景需求及成员制定的相关规则,使用 Golang(或Java等)语言编写的基于操作区块链分布式账本的状态的业务处理逻辑代码,运行在链码容器中,通过 Fabric 提供的接口与账本状态进行交互。 用户链码在整个应用程序中处于重要地位。因为它下可对账本数据进行操作,上可以给企业级应用程序提供调用接口。所以一个没有链码的企业级应用程序,不能称之为是基于区块链的企业级应用程序。