Blockchain marbles nodejs示例中的golang链码是如何工作的?

Blockchain marbles nodejs示例中的golang链码是如何工作的?,blockchain,hyperledger,Blockchain,Hyperledger,我已经在本地运行了这个示例。我看到示例从下载了golang链码。链码存储在硬盘上的/marbles/node_modules/ibm blockchain js/temp/unzip。 你能解释一下golang chaincode是如何在nodejs代码中执行的吗 我没有详细介绍Marbles应用程序,但一般来说,nodejs代码只是验证程序网络的一个客户端,而验证程序正在以与基于nodejs的客户端完全解耦的方式处理基于golang的链码。在此过程中,验证程序下载/获取链码,并在隔离容器中本地

我已经在本地运行了这个示例。我看到示例从下载了golang链码。链码存储在硬盘上的/marbles/node_modules/ibm blockchain js/temp/unzip。
你能解释一下golang chaincode是如何在nodejs代码中执行的吗

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

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

仅供参考,Marbles应用程序的实现旨在演示如何实现在Hyperledger Fabric项目上运行的应用程序。Hyperledger目前只完全支持Golang作为智能合约语言,但不久将有更多的语言出现。

如前所述

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

用户将在浏览器中与Node.js应用程序交互。 此客户端JS代码将打开到后端节点的websocket.JS 应用客户端JS将在 用户与站点交互

后端节点.js将发送HTTP 请求(通过SDK)区块链对等方执行用户的 行动。对等方将在其位置与其链码容器通信 闲暇请注意,以前的HTTP请求实际上是“提交” 对于要运行的链码,它实际上将在稍后的日期运行(通常是 毫秒)

cc容器将执行所需的操作 并记录到分类账上。创建/转移大理石


我使用bluemix hyperledger网络在本地运行该示例。我看到Marbles应用程序从Git repo下载了链码,然后将其解压。marbles应用程序是否将链码打包到本地docker容器中,作为非验证对等方与bluemix hyperkedger网络通信或将链码发送到网络,网络将其作为容器?阅读您的问题,听起来您已经设置了bluemix上的IBM区块链服务。这意味着您在Bluemix中已有两个验证对等方和一个CA服务。如果我有误解,请告诉我。如果上面描述的设置是准确的,那么如果您在本地运行Marbles示例,那么它下载和解压链码的原因是为了内省链码并识别调用和查询函数名。这是应用程序级代码,而不是结构代码。然后,它构造一个部署事务,并将其发送到对等rest端点。deploy事务包含一个指向包含Marbles链码的Github repo的指针。链码从Github repo中提取并部署到对等机上的Docker。不在弹珠应用程序中。让我知道这是否清楚。