栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

Error: could not assemble transaction: ProposalResponsePayloads do not match - proposal response: ve

Java 更新时间:发布时间: 百科书网 趣学号

最近在跑fabric2.3自测链码的时候遇到了很多错误,自己也是很苦恼,改了好几个下午的bug就是找不到真正的问题所在,下面先看一个错误:

Error: could not assemble transaction: ProposalResponsePayloads do not match - proposal response: version:1 response:

其实这个AddPeer的链码是非常基础的就是往账本里存数据,然后就会报错,这里注意这里模拟的是fabric多机环境,也就是多个peer的情况,之前我记得在单机环境(一个peer)的情况测过链码是ok的,但是为什么多机是不行了呢?

我们接着看到链码源码:

原因是因为这里有一个随机生成数的一个方法,我猜测,因为每一次在运行这个方法的时候都会生成不一样的数,所以在多个peer上同时运行这个链码的时候就会出现这个值不一样的情况,进而达不成共识!自然也就会存入账本失败了!

我们如上图把这个方法注释后,再进行测试:

显示成功了!

所以这里我们要注意一点,就是我们在链码里不要出现任何随机的逻辑!不然就会导致每个peer在执行一个随机方法的时候都会返回不一样的值。所以就会达不成共识!!! 编写链码有一个非常重要的原则:不要出现任何本地化和随机逻辑。也就是为什么上面的链码在多机环境中会报错的原因,之前也遇到过链码是不能读取本地文件的,就是使用os包,也就是为什么不要出现本地化的原因!

Chaincode:链上代码,简称链码,一般是指由开发人员使用Go语言(也支持Java等语言)编写的应用程序代码,提供分布式账本的状态处理逻辑。链码被部署在Fabric的网络节点中,能够独立运行在具有安全特性的受保护的 Docker 容器中,以 gRPC 协议与相应的 peer 节点进行通信,以操作(初始化或管理)分布式账本中的数据。可以根据不同的需求开发出不同的复杂的应用。

什么是用户链码

由应用程序开发人员根据不同场景需求及成员制定的相关规则,使用 Golang(或Java等)语言编写的基于操作区块链分布式账本的状态的业务处理逻辑代码,运行在链码容器中,通过 Fabric 提供的接口与账本状态进行交互。

用户链码在整个应用程序中处于重要地位。因为它下可对账本数据进行操作,上可以给企业级应用程序提供调用接口。所以一个没有链码的企业级应用程序,不能称之为是基于区块链的企业级应用程序。

 

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/986410.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号