ChainDesk:如何操作賬本資料-熟悉鏈碼相關API
作者:ChainDesk韓小東,ChainDesk區塊鏈行業分析師, ChainDesk區塊鏈工程師
本篇文章閱讀時間:3分鐘
目標
掌握與賬本進行互動的相關 API 種類
熟知與引數、賬本狀態操作相關的 API
任務實現
現在我們知道了編寫鏈碼的基本介面及所需要的結構,那麼實際中對賬本資料該如何在什麼情況下呼叫什麼 API 進行操作?
shim 包提供給鏈碼的相應介面有如下幾種型別:
引數解析 API:呼叫鏈碼時需要給被呼叫的目標函式/方法傳遞引數,與引數解析相關的 API 提供了獲取這些引數(包含被呼叫的目標函式/方法名稱)的方法。
賬本狀態資料操作 API:該型別的 API 提供了對賬本資料狀態進行操作的方法,包括對狀態資料的查詢及事務處理等。
交易資訊獲取 API:獲取提交的交易資訊的相關 API。
事件處理 API:與事件處理相關的 API。
對 PrivateData 操作的 API: Hyperledger Fabric 在 1.2.0 版本中新增的對私有資料操作的相關 API。
下面我們介紹每一種型別相對應的 API 的定義及呼叫時所需引數。
5.2.1 引數解析相關API
GetArgs() [][]byte:返回呼叫鏈碼時在交易提案中指定提供的被呼叫函式及引數列表
GetArgsSlice() ([]byte, error):返回呼叫鏈碼時在交易提案中指定提供的引數列表
GetFunctionAndParameters() (function string, params []string):返回呼叫鏈碼時在交易提案中指定提供的被呼叫的函式名稱及其引數列表
GetStringArgs() []string:返回呼叫鏈碼時指定提供的引數列表
在實際開發中,常用的獲取被呼叫函式及引數列表的API一般為: GetFunctionAndParameters() 及 GetStringArgs() 兩個。
區塊鏈技術QQ交流群:263270946 掌握更多技術乾貨,關注微信公眾號“ChainDesk”
5.2.2 賬本資料狀態操作API
GetState(key string) ([]byte, error) :根據指定的 Key 查詢相應的資料狀態。
PutState(key string, value []byte) error:根據指定的 key,將對應的 value 儲存在分類賬本中。
DelState(key string) error:根據指定的 key 將對應的資料狀態刪除
GetStateByRange(startKey, endKey string) (StateQueryIteratorInterface, error):根據指定的開始及結束 key,查詢範圍內的所有資料狀態。注意:結束 key 對應的資料狀態不包含在返回的結果集中。
GetHistoryForKey(key string) (HistoryQueryIteratorInterface, error):根據指定的 key 查詢所有的歷史記錄資訊。
CreateCompositeKey(objectType string, attributes []string) (string, error):建立一個複合鍵。
SplitCompositeKey(compositeKey string) (string, []string, error):將指定的複合鍵進行分割。
GetQueryResult(query string) (StateQueryIteratorInterface, error):對(支援富查詢功能的)狀態資料庫進行富查詢,目前支援富查詢的只有 CouchDB。
5.2.3 交易資訊相關API
GetTxID() string:返回交易提案中指定的交易 ID。
GetChannelID() string:返回交易提案中指定的 Channel ID。
GetTxTimestamp() (*timestamp.Timestamp, error):返回交易建立的時間戳,這個時間戳是peer 接收到交易的具體時間。
GetBinding() ([]byte, error):返回交易的繫結資訊。如果一些臨時資訊,以避免重複性攻擊。
GetSignedProposal() (*pb.SignedProposal, error):返回與交易提案相關的簽名身份資訊。
GetCreator() ([]byte, error):返回該交易提交者的身份資訊。
GetTransient() (map[string][]byte, error):返回交易中不會被寫至賬本中的一些臨時資訊。
5.2.4 事件處理API
SetEvent(name string, payload []byte) error:設定事件,包括事件名稱及內容。
5.2.5 對 PrivateData 操作的 API
GetPrivateData(collection, key string) ([]byte, error):根據指定的 key,從指定的私有資料集中查詢對應的私有資料。
PutPrivateData(collection string, key string, value []byte) error:將指定的 key 與 value 儲存到私有資料集中。
DelPrivateData(collection, key string) error:根據指定的 key 從私有資料集中刪除相應的資料。
GetPrivateDataByRange(collection, startKey, endKey string) (StateQueryIteratorInterface, error):根據指定的開始與結束 key 查詢範圍(不包含結束key)內的私有資料。
GetPrivateDataByPartialCompositeKey(collection, objectType string, keys []string) (StateQueryIteratorInterface, error):根據給定的部分組合鍵的集合,查詢給定的私有狀態。
GetPrivateDataQueryResult(collection, query string) (StateQueryIteratorInterface, error):根據指定的查詢字串執行富查詢 (只支援支援富查詢的 CouchDB)。
FAQ
通過 put 寫入的資料狀態能立刻 get 到嗎?
不能立刻 get 到,因為 put 只是鏈碼執行的模擬交易(防止重複提交攻擊),並不會真正將狀態儲存到賬本中,必須經過Orderer達成共識之後,將資料狀態儲存在區塊中,然後儲存在各 peer 節點的賬本中。
未經授權禁止轉載、改編,轉載請註明出處!
本文地址: https://www.chaindesk.cn/witbook/11/122
ChainDesk——全球區塊鏈技術生態超級社群
以區塊鏈技術為入口,搭建全球區塊鏈技術生態超級社群,社群將服務於公鏈生態建設、DAPP專案研發、技術諮詢、課程體系研發、區塊鏈書籍編寫,區塊鏈課程製作、講師培訓、區塊鏈職業教育、區塊鏈線上教育、去中心化技術評測一體化的區塊鏈技術超級社群。
免費·原創·專業·高效·系統