13 6 應用開發案例三 呼叫其他鏈碼

2021-09-16 19:36:10 字數 1258 閱讀 6754

在同乙個區塊鏈上可以部署多個鏈碼,鏈碼與鏈碼之間可以相互呼叫。這種方式有助於將智慧型合約的工作模組化,並為應用開發帶來更多靈活性。

本節將通過乙個示例介紹如何在鏈碼中呼叫其他鏈碼,詳細**可見examples/chaincode/go/passthru/passthru.go。

該鏈碼的功能可以形容為同乙個區塊鏈中其他鏈碼的「閘道器」,其對外暴露的invoke介面功能可以使使用者指定想要呼叫的其他鏈碼的id、方法和引數,通過該「閘道器」鏈碼傳遞給指定鏈碼,獲得呼叫結果後再返回給使用者。

這裡對最核心的invoke方法進行分析,其核心實現**如下:

func (p *passthruchaincode) iq(stub shim.chaincodestubinte***ce, function string,

args string) pb.response 

chaincodeid := function

return stub.invokechaincode(chaincodeid, util.tochaincodeargs(args...), "")

}func (p *passthruchaincode) invoke(stub shim.chaincodestubinte***ce) pb.response

呼叫其他鏈碼需要使用stub.invokechaincode方法。該方法用於呼叫另乙個鏈碼中的invoke方法, 格式為invokechaincode(chaincodename string,argsbyte,channel string)pb.response,其中chaincodename為鏈碼id,args為呼叫引數,channel為呼叫的鏈碼所在通道。如果 channel為空,則預設為當前通道。

需要注意,stub.invokechaincode方法目前僅限於讀操作,同時不會生成新的交易。

示例中,將invoke的引數原封不動傳遞給iq方法,其中function的值表示想要呼叫的鏈碼的id。

iq方法以鏈碼id、呼叫引數(需要用"github.com/hyperledger/fabric/common /util"的to-chaincodeargs方法將string型別轉換為byte型別)、預設當前通道為引數,通過invoke- chaincode來完成對另乙個鏈碼的呼叫,並返回結果。

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

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

Hive UDF開發案例

bin hive中操作 臨時函式的使用 add jar home hadoop lib train 1.0 snapshot.jar 將上傳的jar包匯入到classpath變數裡 list jars 檢視匯入的jar包 create temporary function say hello as ...

移動端開發案例

touchstart touchmove touchend 可以實現拖動元素 但是拖動元素需要當前手指的座標值 我們可以使用 targettouches 0 裡面的pagex 和 pagey 移動端拖動的原理 手指移動中,計算出手指移動的距離。然後用盒子原來的位置 手指移動的距離 手指移動的距離 手...

Flume基礎(六) 企業開發案例(三)

1 案例需求 使用 flume 監聽整個目錄的檔案 2 需求分析 3 實現步驟 1 建立配置檔案 flume dir hdfs.conf 建立乙個檔案 atguigu hadoop102 job touch flume dir hdfs.conf開啟檔案 atguigu hadoop102 job ...