9 4 鏈碼的相互呼叫

2021-09-16 19:39:24 字數 1190 閱讀 8172

在第5章中,我們已經介紹過,不同鏈的賬本資料和狀態資料等都是物理隔離或者邏輯隔離的。對於同乙個鏈不同鏈碼的狀態 資料,會按鏈碼名稱生成不同字首的鍵,對狀態資料進行邏輯隔離。不同的鏈碼實現不同的業務邏輯,是可以相互呼叫的。呼叫的方法通過 shim.invokechaincode:

invokechaincode(chaincodename string, args byte, channel string) pb.response

其中,chaincodename是被呼叫鏈碼的名稱,鏈碼名稱可以指定版本,比如mycc:1.0這樣的形式,args是被呼叫鏈碼的引數,channel是被呼叫鏈碼的通道名稱,預設呼叫的是同乙個鏈的鏈碼。鏈碼名稱會規範化處理,生成的鏈碼名稱是:

chaincodename:chaincodeversion/channelname

其中的鏈碼版本chaincodeversion和通道名稱channelname都是可選的,對應的分隔符也是可選的,所以鏈碼名稱可能有如下幾種組合,如表9-10所示。

表9-10 鏈碼相互呼叫的名稱列表

從上面鏈碼的規範化名稱,我們可以看到,鏈碼的相互呼叫分為以下兩種情況:

·同乙個鏈的鏈碼相互呼叫;

·不同鏈的鏈碼相互呼叫。

同乙個鏈或者不同鏈的呼叫流程是基本一樣的,呼叫shim.invokechaincode後會構造乙個型別為 chaincodemessage_invoke_chaincode的chaincodemessage,訊息是通過鏈碼和背書節點之間的grpc連線 直接提交給背書節點的有限狀態機處理的,不是通過背書節點接收proposal的背書流程。背書節點對鏈碼相互呼叫的處理過程如圖9-9所示。

不同鏈的鏈碼相互呼叫不同的地方在於會生成乙個新的交易模擬器txsimulator,實現對被呼叫鏈資料的訪 問,最終生成交易的讀寫集只會包含呼叫鏈的資料,並不會修改被呼叫鏈的狀態資料。如果是呼叫相同鏈的鏈碼,會復用相同的交易模擬器 txsimulator,鏈碼執行的結果會修改最終的狀態資料。

'); (window.slotbydup = window.slotbydup || ).push(); })();

'); (window.slotbydup = window.slotbydup || ).push(); })();

C Matlab 相互呼叫

visualstudio2013 net4.0 matlab2015b 高版本的matlab對外置其它語言做得很方便了,並不需要一堆的配置。其它語言與matlab的互動操作也類似。基本思路 將matlab函式打包成dll檔案,聯合matlab資料支援dll mwarray.dll 交付給其它語言程式...

C Matlab 相互呼叫

禾木junjie原文c matlab 相互呼叫 visualstudio2013 net4.0 matlab2015b 高版本的matlab對外置其它語言做得很方便了,並不需要一堆的配置。其它語言與matlab的互動操作也類似。基本思路 將matlab函式打包成dll檔案,聯合matlab資料支援d...

C C 之間的相互呼叫

c呼叫c 意思是 c檔案中呼叫.cpp檔案中的 c 呼叫c的意思是.cpp檔案中呼叫.c檔案中的 使用extern c 主要原因 主要用於在c 中呼叫的c函式的宣告,或c 中編譯的函式要在c中呼叫,也即是匯入c形式的函式庫或者提供c型別的庫給c呼叫,因為在c 出現以前,很多 都是c語言寫的,而且很底...