2016-04-26 31 views

回答

3

我沒有詳細看過Marbles應用程序,但一般來說,nodejs代碼只是驗證程序網絡的客戶端,驗證程序正在處理基於golang的鏈式代碼,其方式完全與基於nodejs的客戶端。在這個過程中,驗證器下載/獲取鏈碼,並在隔離容器中進行本地編譯。你可以看看[golang :: chaincode] - > [nodejs :: client] - >(network) - > [golang :: validator] - > [golang :: container]。所以第一個和最後一個部分是golang/chaincode相關的,中間發生的事情或多或少是一種交通工具。即在這裏,客戶端是nodejs和驗證器是golang的事實很少。

3

實現了Marbles chaincode(又名智能合約)的Golang代碼不會在Node.js應用程序內執行。鏈代碼是應用程序與修改存儲在區塊鏈中的狀態變量交互的內容。在這種情況下,狀態是:存在什麼彈珠,其所有者是誰,它是什麼顏色等。但鏈碼本身(Golang代碼)被打包爲碼頭容器,部署到區塊鏈,並且正在運行並等待交易。 Node.js代碼構造這些事務並將其發送到Docker容器,接收鏈代碼執行的結果,並更新當前狀態的應用程序視圖。

只是FYI,實施了Marbles應用程序來演示如何實現在Hyperledger Fabric項目之上運行的應用程序。 Hyperledger目前僅完全支持Golang,因爲它是智能合約語言,但即將推出更多語言。

+0

我使用bluemix hyperledger網絡在本地運行示例。我看到Marbles應用程序從Git repo下載了鏈碼,然後解壓縮它。彈珠應用程序是否將鏈碼打包到本地的碼頭容器中作爲非驗證對等設備與bluemix hyperkedger網絡進行通信或將鏈碼發送到網絡,網絡使它成爲一個容器? – scorpiovn

+0

從閱讀您的問題,聽起來您已經設置了Bluemix服務上的IBM Blockchain。這意味着您在Bluemix中已有兩個驗證對等方和一個CA服務。如果我誤解,請告訴我。 – angrbrd

+0

如果上述設置是準確的,那麼如果您在本地運行Marbles示例,則下載和解壓縮鏈碼的原因是爲了反思鏈碼並識別調用和查詢函數名稱。這是應用程序級代碼,而不是結構代碼。然後它構造一個發送給對等休息端點的部署事務。 deploy事務包含一個指向包含Marbles鏈代碼的Github repo的指針。鏈代碼從Github倉庫中提取並部署到同行的Docker上。不在Marbles應用程序中。讓我知道這是否清楚。 – angrbrd

0

如上所述here

enter image description 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請求實際上是要鏈接的代碼的「提交」 ,它實際上將在稍後的日期運行(通常爲 毫秒)。

cc容器將執行所需的操作 並將其記錄到分類帳中。即創建/轉移大理石。