我已在本地运行此示例https://github.com/IBM-Blockchain/marbles。我看到该示例从https://github.com/ibm-blockchain/marbles-chaincode下载了golang链码。链码存储在/ marbles / node_modules / ibm-blockchain-js / temp / unzip的硬盘上。 你能解释一下golang链代码是如何在nodejs代码中执行的吗?
答案 0 :(得分:3)
我没有详细查看Marbles应用程序,但一般来说,nodejs代码只是验证器网络的客户端,验证器正在以与nodejs完全分离的方式处理基于golang的链代码。基于客户。在此过程中,验证器下载/获取链代码并在隔离容器中本地编译它。您可以查看[golang :: chaincode] - > [nodejs :: client] - >(网络) - > [golang :: validator] - > [golang :: container]等过程。所以第一个和最后一个部分是golang / chaincode相关的,中间发生的东西或多或少是一个传输。即事实上,客户端是nodejs,验证器在这里很少。
答案 1 :(得分:3)
实现Marbles链代码(又名智能合约)的Golang代码不会在Node.js应用程序中执行。链代码是应用程序与之交互以修改存储在区块链中的状态变量的内容。在这种情况下的状态是:存在大理石,它们的所有者是谁,它是什么颜色等等。但是链代码本身(Golang代码)被打包为docker容器,部署到区块链,并且正在运行等待交易。 Node.js代码构造并将这些事务发送到docker容器,接收链代码执行的结果,并更新当前状态的应用程序视图。
仅供参考,实施Marbles应用程序是为了演示如何实现在Hyperledger Fabric项目之上运行的应用程序。 Hyperledger目前仅完全支持Golang作为其智能合约语言,但即将推出更多语言。
答案 2 :(得分:0)
如上所述here,
与cc的交互是通过HTTP REST调用来完成的 网络。
ibc-js
SDK将抽象REST调用的详细信息 远。这允许我们使用点符号来调用我们的GoLang函数 (例如chaincode.invoke.init_marble(args)
)。用户将在浏览器中与我们的Node.js应用程序进行交互。 这个客户端JS代码将打开一个websocket到后端Node.js 应用。客户端JS将在后端向后端发送消息 用户与网站进行交互。
后端Node.js将发送HTTP 请求(通过SDK)到区块链对等体来执行用户 动作。对等体将与其链接代码容器进行通信 休闲。请注意,之前的HTTP请求实际上是“提交”#39; 要运行的链码,它实际上将在以后运行(通常 毫秒)。
cc容器将执行所需的操作 并将其记录到分类帐。即创建/转移大理石。