2017-08-16 20 views
0

From fabric document,有一些話如下: 反對「一個」被髮布到peer0.org1.example.com的值的查詢。該chaincode以前安裝的peer0.org1.example.com,所以這將DEV-peer0.org1.example.com-mycc-1.0的名字開始爲ORG1 peer0的容器。查詢的結果也被返回。沒有發生寫入操作,因此對「a」的查詢仍然會返回值「100」。當兩個org one orderer實例化之前,可能需要peer查詢嗎?

爲什麼查詢操作可以通過DEV-peer0.org1.example.com-mycc-1.0的名稱創建ORG1 peer0容器,通常我們首先應該實例化?

回答

1

爲什麼查詢操作可以通過dev-peer0.org1.example.com-mycc-1.0的名稱爲Org1 peer0創建容器,通常我們應該首先實例化?

鏈代碼的實例化只針對特定的對等體完成,它最終跨越具有特定對等體上的鏈接代碼的容器。雖然你可能查詢對另一個同行,因此:

  1. Chaincode必須建立在對等安裝
  2. 它會檢查每當chaincode實例化,並且它已經chaincode容器中運行,如果容器沒有運行它會運行。

運行容器的原因很簡單,查詢必須針對chaincode,它實際上是chaincode定義的函數之一的調用。

0

您有關於它here的解釋。但是,我粘貼答案。

的chaincode容器的目的是爲了確保從對自身的智能合同的執行的隔離,讓一個聰明的合同(chaincode)不能崩潰,甚至因爲訪問錯誤或惡意代碼的同行。當您實例化鏈式代碼時,對等體會使用鏈式代碼填充容器圖像,並調用Docker管理API來部署該映像。如果容器沒有運行,它將啓動一個新的容器。一旦運行,對等方接收到的所有事務和提議都將傳輸到該容器以供執行。

的chaincode容器中運行智能契約邏輯。當你實例化一個chaincode,Init方法進行了模擬和返回給客戶端發送給訂購者創造一個新的事務(INIT交易,結合了chaincode到通道)的。這就是容器啓動的原因,如果它之前沒有運行。