问题标签 [chaincode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
176 浏览

hyperledger-fabric - Golang 链码与消息一起发送错误代码

我也想使用该函数向客户端应用程序发送错误消息以外的错误代码shim.Error,但它只接受一个msg参数,怎么做?

0 投票
1 回答
723 浏览

sorting - 排序在 golang 链码超级账本结构中不起作用

我正在尝试对 golang 链码中的结果进行排序,但结果是随机的,下面是我的链码示例:

它根据传递的内容创建可以具有不同状态的资产,并且我定义了一个仅获取pending项目的查询函数。

我已经应用了排序,但结果仍然是随机的,有人可以在这里帮助我并指导我哪里出错了吗?

0 投票
3 回答
825 浏览

docker - 为多台机器执行对等链码查询时未能获取 mycc:1.0 的链码容器信息

我正在尝试设置一个超级账本网络,其中 2 个组织在 2 个不同的物理机器上运行。所以机器 1 有 orderer、peer0.org1、peer1.org1、ca-org1、couchdb1、couchdb2 和 cli 容器。机器 2 有 peer0.org2、peer1.org2、ca-org2、couchdb3、couchdb4 和 cli 容器。

下面是 docker-compose-org1.yaml 文件 -

docker-compose-org2.yaml 文件 -

如您所见,我正在使用“extra_hosts”连接到其他机器中的 docker 容器。这样我就可以从一台机器上创建通道,并从该机器上为两个对等方加入通道。在另一台机器上,我获取了相同的频道配置并为两个对等方加入了相同的频道。我通过以下命令检查了两台机器中的所有 4 个对等方是否都加入了同一个频道 -

现在从机器 1 我已经安装并实例化了链码。这工作正常。使用以下命令安装和实例化 -

如果我从同一台机器查询链码,它工作正常,我得到了正确的结果。

但是当我从不同的机器执行相同的链码查询命令时,它给出了以下错误 -

错误:查询时背书失败。响应:状态:500 消息:“无法执行事务 2444b829db1485ad097b2e11442d65cb36f02de1c6a3f3372ad53594af4d1a4d:[通道 mychannel] 无法获取 mycc:1.0 的链码容器信息:无法获取链码代码:链码指纹不匹配:数据不匹配”

我可以看到超级账本结构正在两台机器上正确同步所有对等点。因为当我运行时,peer channel getinfo -c mychannel我可以匹配所有 4 个对等点的 currentBlockHash、previousBlockHash 和 height 值。我只是无法peer chaincode query从另一台机器执行命令。

当我运行peer chaincode instantiate命令时,我可以看到在机器 1 中创建了一个新的 docker 容器,用于运行链代码。但是机器 2 中没有这样的容器。我是否在这里遗漏了任何配置,以便可以从机器 2 访问在机器 1 上创建的链码容器?


peer chaincode install新发现:通过从 CLI 容器运行命令,我已经在两台机器的所有 4 个对等点上安装了链代码。我有两个 CLI 容器在两台机器上运行。

当我运行命令时peer chaincode list --installed。在机器 1 中,我得到如下结果

名称:mycc,版本:1.0,路径:github.com/chaincode/chaincode_example02/go/,Id:333a19b11063d0ade7be691f9f22c04ad369baba15660f7ae9511fd1a6488209

当我在机器 2 中运行相同的命令时。结果是相同的,只是Id值不同。但我也发现Id同一台机器上的两个对等点的值是相同的。可能这就是为什么我能够从同一台机器上的两个对等方执行链代码查询。但无法从其他机器运行它。看起来这是这个问题的根本原因。

0 投票
1 回答
152 浏览

hyperledger-fabric - 在超级账本结构中调用链码时出错

我已经制作了我的自定义链代码“mycc.js”它已成功安装在对等体上。但是当我使用实例化这个链码时

peer chaincode instantiate -l node -n mycc -v v0 -C mychannel -c '{"args":["init","A","100","B","100"]}' -o locahost:7050

命令。我收到错误这个错误 错误:获取广播客户端时出错:订购者客户端无法连接到 locahost:7050:无法创建新连接:超出上下文截止日期

任何帮助表示赞赏。

0 投票
1 回答
221 浏览

hyperledger-fabric - Hyperledger Fabric 资产与交易

直接添加/更新资产与通过事务添加/更新资产有什么区别。哪种方法是正确的?

我们可以使用 API 添加/更新资产,那我们为什么要对资产进行交易呢?这是否像一个日志/跟踪来跟踪资产更新的内容和时间?如果我在没有任何交易条目的情况下直接更改资产怎么办?还是我应该通过资产交易进行更改?

例如:

那么我应该使用UpdateMyasset创建资产还是直接使用Myasset呢?我应该什么时候使用事务?

0 投票
1 回答
188 浏览

rsa - 与 RSA 加密一起使用时,Chaincode PutState() 和 GetState() 值不匹配

以下代码返回“不匹配!” 错误:

使用的 RSA 库:https ://gist.github.com/miguelmota/3ea9286bd1d3c2a985b67cac4ba2130a

如果字符串比较部分被注释掉,那么解密函数返回错误“crypto/rsa解密错误”。

以下代码完美运行:

0 投票
1 回答
220 浏览

hyperledger-fabric - Hyperledger Fabric 链码可以调用外部本地应用程序/二进制文件吗?

我有一个场景,链代码需要调用外部应用程序来完成复杂的专有工作。

我知道基本上可以(也不推荐)调用外部服务,例如通过 HTTP。

但是,我想通过例如exec.Command("some application")从链代码调用本地安装在对等方上的二进制文件并使用其结果。

我面临的问题是 Fabric 在另一个 docker 容器中运行链代码本身,而不是直接在对等容器中运行,从而使二进制文件不可用。有没有办法与 Fabric 创建的运行时容器共享对等点的卷以执行链码?

0 投票
1 回答
2221 浏览

hyperledger-fabric - 实例化链码时如何解决“在检索块之前完成上下文:上下文已取消”?

实例化命令成功完成,但在分析对等日志时,您可能会注意到:

2019-04-17 17:25:52.581 UTC [gossip.state] commitBlock -> DEBU 48c [canal-contrato] 已提交区块 [1] 有 1 个交易

2019-04-17 17:25:52.581 UTC [common.deliver] DeliverBlocks -> DEBU 48d [channel: canal-contrato] 为 192.168.16.1:48230 交付块 (0xc00023f9c0)

2019-04-17 17:25:52.581 UTC [fsblkstorage] waitForBlock -> DEBU 48e 将等待更新的块。maxAvailaBlockNumber=[1],waitForBlockNum=[2]

2019-04-17 17:25:52.586 UTC [common.deliver] DeliverBlocks -> DEBU 48f 上下文取消,中止等待下一个块

2019-04-17 17:25:52.586 UTC [common.deliverevents] func1 -> DEBU 490 关闭交付流

2019-04-17 17:25:52.586 UTC [comm.grpc.server] 1 -> INFO 491 流式调用已完成{"grpc.start_time": "2019-04-17T17:25:50.441Z", "grpc.service ":"protos.Deliver","grpc.method":"DeliverFiltered","grpc.peer_address":"192.168.16.1:48230","error":"上下文在块检索前完成:上下文取消","grpc.代码”:“未知”,“grpc.call_duration”:“2.144399922s”}

谁能告诉我我可能做错了什么以及这个错误的后果是什么?

笔记:

  • 订购者日志不显示任何类型的错误
  • 所有容器都正常运行
  • 我正在使用节点版本 8.9.0(使用 npm 5.5.1)
  • 我有 1 个组织,有 1 个同行、1 个 CA 和 1 个已订购(只是为了测试)
  • 我正在使用 hyperlegder 面料 1.4 版
0 投票
1 回答
256 浏览

hyperledger-fabric - Hyperledger Fabric golang 链码无法按预期工作,手动将数据存储在分类帐上,但在尝试通过函数调用存储时却没有

我正在尝试将资金转移记录存储在超级账本结构上。我在 go lang 中编写了链代码。当我在 initLedger 函数中添加数据时它工作正常。但是当我从 createTransfer(我将提供两个代码)等其他函数调用它时,它显示成功的交易,但是当我检索链数据时,它没有出现在其中。

传输结构

此函数将数据写入分类帐:当我直接在 initLedger 方法中调用它时它工作正常

在 createTransfer 函数中调用 writeToTransferLedger 方法:

当我从nodesdk代码调用createTransfer时,它成功执行但是当我从链代码中检索数据时没有返回。

我希望它与 createTransfer 函数一起使用,因为它与 writeTransferToLedger 一起使用。

在 initLedger 方法中,我用给定的数据创建了传输结构,并调用了 writeTransferToLedger 函数代码如下:

0 投票
1 回答
100 浏览

hyperledger-fabric - go lang“没有这样的文件或目录”的链码错误

我正在编写一个链代码,我需要读取文件以处理事务,但是当我的代码尝试从系统读取文件时,错误“没有这样的文件或目录”。即使该路径是在 docker 卷中定义的。

但是,如果我尝试运行脚本文件来读取文件,我可以在 docker 环境之外读取文件。我在链码中提供的是它自己的 docker 路径。附加错误图片:1

谢谢