3

我有这个例子https://github.com/IBM-Blockchain/marbles在本地运行。我看到该示例从https://github.com/ibm-blockchain/marbles-chaincode下载了 golang 链码。链码存储在硬盘上的 /marbles/node_modules/ibm-blockchain-js/temp/unzip。您能否解释一下 golang 链码是如何在 nodejs 代码中执行的?

4

3 回答 3

3

我没有详细看过 Marbles 应用程序,但一般来说,nodejs 代码只是验证器网络的客户端,验证器正在以与基于 nodejs 的客户端完全解耦的方式处理基于 golang 的链代码。在此过程中,验证器下载/获取链码并在隔离容器中本地编译它。您可以查看类似 [golang::chaincode]->[nodejs::client]->(network)->[golang::validator]->[golang::container] 的过程。所以第一部分和最后一部分与 golang/chaincode 相关,中间发生的事情或多或少是一种传输。即客户端是nodejs而验证器是golang的事实在这里无关紧要。

于 2016-04-26T16:03:58.030 回答
3

实现 Marbles 链码(又名智能合约)的 Golang 代码不会在 Node.js 应用程序中执行。链码是应用程序与之交互以修改存储在区块链中的状态变量的内容。在这种情况下,状态是:弹珠存在什么,它们的所有者是谁,它是什么颜色等。但是链码本身(Golang 代码)被打包为 docker 容器,部署到区块链,并启动并运行等待交易。Node.js 代码构建这些事务并将其发送到 docker 容器,接收链码执行的结果,并更新当前状态的应用程序视图。

仅供参考,实施 Marbles 应用程序是为了演示如何实现在 Hyperledger Fabric 项目之上运行的应用程序。Hyperledger 目前仅完全支持 Golang 作为其智能合约语言,但更多语言即将推出。

于 2016-05-02T18:38:03.053 回答
0

如此处所述,

在此处输入图像描述

与 cc 的交互是通过对网络上的对等点的 HTTP REST 调用来完成的。SDK将ibc-js抽象出 REST 调用的细节。这允许我们使用点符号来调用我们的 GoLang 函数(例如chaincode.invoke.init_marble(args))。

用户将在他们的浏览器中与我们的 Node.js 应用程序进行交互。此客户端 JS 代码将为后端 Node.js 应用程序打开一个 websocket。当用户与站点交互时,客户端 JS 将向后端发送消息。

后端 Node.js 将发送 HTTP 请求(通过 SDK)到区块链对等点以执行用户的操作。对等点将在闲暇时与其链码容器通信。请注意,之前的 HTTP 请求实际上是“提交”要运行的链代码,它实际上会在稍后的日期(通常是几毫秒)运行。

cc 容器将执行所需的操作并将其记录到账本中。即创建/转移大理石。

于 2016-09-08T01:53:42.120 回答