日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hyperledger Fabric 链码(3) 生命周期和API

發布時間:2025/3/21 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hyperledger Fabric 链码(3) 生命周期和API 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Chaincode的5個生命周期命令

  • 鏈碼打包
  • 鏈碼安裝
    eg.peer chaincode install ccpack.out
  • 鏈碼實例化
    eg. peer.sh chaincode instantiate -n mycc -v 0 -c ‘{“Args”:[“init”,“a”,“100”,“b”,“200”]}’ -C mychannel
  • 鏈碼升級(當鏈碼的代碼發生改變時,就需要升級鏈碼)
  • 鏈碼簽名

2. peer命令提供了8個子命令管理鏈碼

  • Install
  • instantiate
  • invoke
  • list
  • package
  • query
  • signpackage
  • upgrade

3.鏈碼API(主要是shim包提供,分為5類)

3.1 參數解析API:用來獲取參數的賬本數據狀態

  • GetStringArgs() []string
    返回調用鏈碼時指定提供的參數列表(以字符串數組形式返回)

  • GetFunctionAndParameters() (function string, params []string)
    返回調用鏈碼時在交易提案中指定提供的被調用的函數名稱及函數的參數列表(以字符串數組形式返回)

  • GetArgsSlice() ([]byte, error)
    返回提交交易提案時提供的參數列表(以字節串數組形式返回)

  • GetArgs() [][]byte
    返回調用鏈碼時在交易提案中指定提供的被調用的函數名稱及函數的參數列表(以字符串數組形式返回)

3.2 操作API:對賬本數據查詢、更新等

  • GetState(key string) ([]byte, error)
    查詢賬本,返回指定鍵對應的值

  • PutState(key string, value []byte) error
    嘗試添加/更新賬本中的一對鍵值。 這一對鍵值會被添加到寫集合中,等待 Committer 進一步確認,驗證通過后才會真正寫入到賬本

  • DelState(key string) error
    嘗試刪除賬本中的一對鍵值。 同樣,對該對鍵值刪除會添加到寫集合中,等待 Committer 進一步確認,驗證通過后才會真正寫入到賬本

  • GetStateByRange(startKey, endKey string) (StateQueryIteratorInterface, error)
    查詢指定范圍的鍵值,startKey 和 endkey 分別指定開始(包括)和終止(不包括),當為空時默認是最大范圍。 返回結果是一個迭代器結構,可以按照字典序迭代每個鍵值對,最后需要調用 Close() 方法關閉

  • GetHistoryForKey(key string) (HistoryQueryIteratorInterface, error)
    返回指定鍵的所有歷史值。該方法的使用需要節點配置中打開歷史數據庫特性(ledger.history.enableHistoryDatabase=true)

  • CreateCompositeKey(objectType string, attributes []string) (string, error)
    給定一組屬性(attributes),將這些屬性組合起來構造返回一個復合鍵。eg.CreateComositeKey(“name-age”,[]string{“Alice”, “12”});

  • SplitCompositeKey(compositeKey string) (string, []string, error)
    將指定的復合鍵進行分割,拆分成構造復合鍵時所用的屬性

  • GetStateByPartialCompositeKey(objectType string, keys []string)
    根據局部的復合鍵(前綴)返回所有匹配的鍵值,即與賬本中的鍵進行前綴匹配。返回結果是一個迭代器結構,可以按照字典序迭代每個鍵值對,最后需要調用 Close() 方法關閉
    (StateQueryIteratorInterface, error)

  • GetQueryResult(query string) (StateQueryIteratorInterface, error)
    對(支持富查詢功能的)狀態數據庫進行富查詢,返回結果是一個迭代器結構,目前只支持 CouchDB。注意該方法不會被 Committer 重新執行進行驗證,所以不能用于更新賬本狀態的交易中

注意: 通過 put 寫入的數據狀態不能立刻 get 到,因為 put 只是鏈碼執行的模擬交易(防止重復提交攻擊),并不會真正將狀態保存到賬本中,必須經過 Orderer 達成共識之后,將數據狀態保存在區塊中,然后保存在各 peer 節點的賬本中。

3.3 交易信息獲取API:獲取提交的交易信息

  • GetTxID() string
    返回交易提案中指定的交易 ID。一般情況下,交易 ID 是客戶端提交提案時由 Nonce 隨機串和簽名者身份信息哈希產生的數字摘要

  • GetChannelID() string
    返回交易提案中指定的 Channel ID

  • GetTxTimestamp() (*timestamp.Timestamp, error)
    返回交易被創建時的客戶端打上的的時間戳。這個時間戳是直接從交易 ChannnelHeader 中提取的,所以在所以背書節點處看到的值都相同

  • GetBinding() ([]byte, error)
    返回交易的 binding 信息。交易的 binding 信息是將交提案的 nonse、Creator、epoch 等信息組合起來哈希得到數字摘要

  • GetSignedProposal() (*pb.SignedProposal, error)
    返回該 stub 的 SignedProposal 結構,包括了跟交易提案相關的所有數據

  • GetCreator() ([]byte, error)
    返回該交易提交者的身份信息(用戶證書)。 從 SignedProposal 中的 SignatureHeader.Creator 提取

  • GetTransient() (map[string][]byte, error)
    返回交易中帶有的一些臨時信息。從 ChaincodeProposalPayload.transient 提取,可以存放與應用相關的保密信息,該信息不會被寫入到賬本

3.4 事件處理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)

3.5 對私有數據操作的API:專門對私有數據操作

  • SetEvent(name string, payload []byte) error
    設定當這個交易在 Committer 處被認證通過,寫入到區塊時發送的事件(event),一般由 Client 監聽

  • InvokeChaincode(chaincodeName string, args [][]byte, channel string) pb.Response
    調用另外一個鏈碼的 Invoke 方法。 如果被調用鏈碼在同一個通道內,則添加其讀寫集合信息到調用交易;否則執行調用但不影響讀寫集合信息// 如果 channel 為空,則默認為當前通道。目前僅限讀操作,同時不會生成新的交易

總結

以上是生活随笔為你收集整理的Hyperledger Fabric 链码(3) 生命周期和API的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。