Node.js Hyperledger Fabric同一组织的2个对等方导致链码和couchdb出现问题

Node.js Hyperledger Fabric同一组织的2个对等方导致链码和couchdb出现问题,node.js,hyperledger-fabric,hyperledger,Node.js,Hyperledger Fabric,Hyperledger,我面临着一个非常奇怪的问题,即Hyperledger结构node.js sdk问题 目前,我的网络包括: a、 )单一组织 b、 )该组织的2个对等方(peer0和peer1)。 c、 )1订购者 d、 )1 ca 使用node.js sdk时,两个对等方都加入了通道,如下面的代码片段所示: var fabric_client = new Fabric_Client(); var channel = fabric_client.newChannel(channelName); var peer

我面临着一个非常奇怪的问题,即
Hyperledger结构
node.js sdk
问题

目前,我的网络包括:

a、 )单一组织 b、 )该组织的2个对等方(peer0和peer1)。 c、 )1订购者 d、 )1 ca

使用node.js sdk时,两个对等方都加入了通道,如下面的代码片段所示:

var fabric_client = new Fabric_Client();
var channel = fabric_client.newChannel(channelName);
var peer = fabric_client.newPeer('grpc://localhost:7051');
var peer2 = fabric_client.newPeer('grpc://localhost:8051');
channel.addPeer(peer);
channel.addPeer(peer2);
var order = fabric_client.newOrderer('grpc://localhost:7050')
channel.addOrderer(order);
我正在调用一个在
golang
中编写的chaincode函数,该函数生成一个唯一的id,创建它的散列(SHA256),并保存在
couchdb
中,并将散列记录到容器中,如下所示:

"password":"5ef32e670c38727ce5011dad62ff1a150362433789fdd878f2623a08bbdc990b"
问题是,当node.js sdk配置为单对等时。它在日志显示的
couchdb
中保存相同的散列。但是,如上面的sdk代码片段所示,当配置2个对等点时。记录的哈希和couchdb哈希不匹配

我认为散列改变是因为第二个对等方再次执行相同的代码,其中生成并散列了一个随机字符串

如有任何帮助/意见,将不胜感激。 谢谢

几件事:

1) 不确定您的认可政策是什么,但假设它是默认的,那么一般来说,您只需要从组织中的单个对等方请求认可

2) 最重要的是链码中不应使用非确定性函数。如果您实际上有多个组织,并且背书策略要求来自多个组织的签名,那么您的交易无论如何都会失败(因为来自不同组织的对等方会由于您使用的非确定性唯一id功能而生成不同的响应)。在这种情况下,由于您只需要一次背书,状态可能会被更新,但它将使用第一次响应的值。

以下几点:

1) 不确定您的认可政策是什么,但假设它是默认的,那么一般来说,您只需要从组织中的单个对等方请求认可


2) 最重要的是链码中不应使用非确定性函数。如果您实际上有多个组织,并且背书策略要求来自多个组织的签名,那么您的交易无论如何都会失败(因为来自不同组织的对等方会由于您使用的非确定性唯一id功能而生成不同的响应)。在这种情况下,由于您只需要一次背书,状态可能会被更新,但它将使用第一次响应的值。

这是一个具有2个对等点的单一组织,endosment策略如下所示
peer chaincode instantiate-o order.store.com:7050-C$CHANNEL_NAME-n asset-v1.0-C'{“Args”:[“”]}-p“和”('storeMSP.peer')”
@Gari singhAs@Gari singh提到,链码中的某些/某些变量是不确定的(随着对等的变化)。SHA256为相同的输入提供确定性输出,请参阅以获取输入(可能会改变对等)您正在传递给哈希函数。如果您将源代码放在问题中,问题会更清楚。@JastiSriRadheShyam@Gari,是的,链码中的变量不是确定性的。该变量用于生成唯一id,即stub.PutState(“唯一键”,value)需要唯一的密钥。因此名为
password
的变量在每次执行时都有新的值(因为我们需要在用户注册时生成一个随机密码)。同样的情况也发生在我身上,如果我在nodejs sdk中只声明了一个对等点,它可以正常工作。但是如果我声明了两个对等点,那么该变量的值就会发生变化。你能告诉我为什么会发生这种情况吗?有什么解决方法吗?@DebutInfotech看到两个对等点的couchDB,其中一个将哈希与日志匹配。你是如何获得日志的链码响应的错误?修复:不要在链码中生成哈希,而是在NodeSDK中生成哈希,然后将哈希作为参数传递给链码。如果不希望哈希存储在“参数”字段中的事务中,则将其作为临时参数传递。谢谢。这是一个具有2个对等点的单一组织,EndosRM策略为gi如下
peer chaincode instantiate-o order.store.com:7050-C$CHANNEL_NAME-n asset-v1.0-C'{“Args”:[“”]}'-P“AND('storeMSP.peer')”
@Gari singhs@Gari singh提到,链码中的某些/某些变量是不确定的(随着对等的变化).SHA256为相同的输入提供确定性输出,请参阅以了解输入(可能会改变对等)您正在传递给哈希函数。如果您将源代码放在问题中,问题会更清楚。@JastiSriRadheShyam@Gari,是的,链码中的变量不是确定性的。该变量用于生成唯一id,即stub.PutState(“唯一键”,value)需要唯一的密钥。因此名为
password
的变量在每次执行时都有新的值(因为我们需要在用户注册时生成一个随机密码)。同样的情况也发生在我身上,如果我在nodejs sdk中只声明了一个对等点,它可以正常工作。但是如果我声明了两个对等点,那么该变量的值就会发生变化。你能告诉我为什么会发生这种情况吗?有什么解决方法吗?@DebutInfotech看到两个对等点的couchDB,其中一个将哈希与日志匹配。你是如何获得日志的链码响应的定义?修复:不要在链码中生成哈希,而是在NodeSDK中生成哈希,然后将哈希作为参数传递给链码。如果不希望哈希存储在“参数”字段中的事务中,则作为临时参数传递。谢谢。