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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Fabric--区块链应用开发

發布時間:2025/3/21 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Fabric--区块链应用开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

區塊鏈應用開發

簡介

數字貨幣曾是區塊鏈技術的唯一應用場景

對智能合約的支持突破了場景限制, 豐富了區塊鏈應用的適用范圍, 可以支持多行業、大規模的商業應用

區塊鏈應用

區塊鏈應用: 一般由若干部署在區塊鏈網絡中的智能合約, 以及調用這些智能合約的應用程序組成

用戶專注于與業務本身相關的應用程序

智能合約則封裝了與區塊鏈賬本直接交互的相關過程, 被應用程序調用

智能合約開發

智能合約本質上是為了對上層業務邏輯進行支持且直接與賬本結構打交道, 處于核心位置.

所以設計得當可以簡化上層應用開發的過程

應用程序開發

應用程序通過調用智能合約提供的方法接口實現業務邏輯, 可以使用JavaScript、Python、Go、Java等主流語言進行開發

鏈碼的原理

鏈碼延伸自智能合約的概念, 支持使用主流高級編程語言實現

區塊鏈網絡中的成員商定業務邏輯后, 可將業務邏輯編程到鏈碼中, 所有人遵守合約執行

鏈碼會創建一些狀態(state)并寫入賬本中。狀態帶有綁定到鏈碼的命名空間,僅限于創建他的鏈碼使用,不能被其他鏈碼直接訪問。不過,在合適的范圍內,一個鏈碼也可以調用另一個鏈碼,間接訪問其狀態

鏈碼在Fabric節點上的隔離沙盒(目前為Docker容器)中運行, 并通過gRPC協議與節點進行交互

  • 調用鏈碼
  • 讀寫賬本
  • 返回響應
  • ……

Fabric中支持多種語言實現鏈碼,包括Golang、JavaScript、Java等

基本工作原理

  • 首先用戶通過客戶端向Fabric的背書節點發出調用鏈碼的交易提案
  • 節點對交易提案進行包括ACL權限檢查在內的各種檢驗, 通過后則創建模擬執行這一交易的環境
  • 之后, 節點和鏈碼容器之間通過gRPC消息來交互, 模擬執行交易并給出背書結論
  • 當鏈碼的代碼邏輯需要讀寫賬本時,通過shim層發送相應操作類型給節點, 節點本地操作賬本后返回響應消息
  • 客戶端收到足夠的背書節點的支持后, 便可以將這筆交易發送給排序節點進行排序, 并最終寫入區塊鏈
  • 鏈碼接口與結構

    依賴包

    鏈碼實現需要引入如下依賴包

    • “github.com/hyperledger/fabric/core/chaincode/shim”

    • shim包提供了鏈碼與賬本交互的中間層
    • 鏈碼通過shim.ChaincodeStub提供的方法來讀取和修改賬本狀態
    • “github.com/hyperledger/fabric/protos/peer”

      • peer.Response: 響應信息

    鏈碼接口

    每個鏈碼都需要實現chaincode接口:

    type Chaincode interface{Init(stub ChaincodeStubInterface) peer.ResponseInvoke(stub ChaincodeStubInterface) peer.Response }

    Init與Invoke方法

    編寫鏈碼, 關鍵是實現Init與Invoke兩個方法

    Init方法在鏈碼部署或升級時被調用, 完成初始化工作

    對數據進行操作時, Invoke方法被調用, 因此響應調用或查詢的業務邏輯都需要在此方法中實現

    必要結構

    一個鏈碼的必要結構如下

    package main//引入必要的包 import("fmt""github.com/hyperledger/fabric/core/chaincode/shim""github.com/hyperledger/fabric/protos/peer" )//聲明一個結構體 type SimpleChaincode struct {}//為結構體添加Init方法 func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) peer.Response{//在該方法中實現鏈碼初始化或升級時的處理邏輯//編寫時可靈活使用stub中的API }//為結構體添加Invoke方法 func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) peer.Response{//在該方法中實現鏈碼運行中被調用或查詢時的處理邏輯//編寫時可靈活使用stub中的API }//主函數,需要調用shim.Start( )方法 func main() {err := shim.Start(new(SimpleChaincode))if err != nil {fmt.Printf("Error starting Simple chaincode: %s", err)} }

    鏈碼API

    賬本狀態交互API

    鏈碼需要將數據記錄在分布式賬本中.需要記錄的數據稱為狀態, 以K-V對的形式存儲

    賬本狀態交互API可以對賬本狀態進行操作

    GetState(key string) ([]byte, error) 通過Key來返回數組的特定值

    PutState(key string, value []byte) error 賬本中寫入特定的鍵和值

    DelState(key string) error 從賬本中移除指定的鍵和值

    GetStateByRange(startKey, endKey string) (StateQueryIteratorInterface, error) 根據指定的范圍內的健值

    GetHistoryForKey(key string) (HistoryQueryIteratorInterface, error) 返回指定健的所有歷史值

    GetQueryResult(query string) (StateQueryIteratorInterface, error) 對(支持富查詢功能的)狀態數據庫進行富查詢

    交易信息相關API

    GetTxID() string 返回交易提案中指定的交易ID

    GetTxTimestamp() (*timestamp.Timestamp, error) 返回交易創建的時間戳,這個時間戳是peer收到交易的當前時間

    GetBinding() ([]byte, error) 返回交易的binding信息

    GetSignedProposal() (*pb.SignedProposal, error) 返回與交易提案相關的所有數據

    GetCreator() ([]byte, error) 返回該交易的提交者的身份信息

    GetTransient() (map[string][]byte, error) 返回交易中不會被寫至賬本中的一些臨時信息

    參數API

    GetArgs() [][]byte 返回調用鏈碼時交易提案中指定的參數

    GetArgsSlice() ([]byte, error) 返回調用鏈碼時交易提案中指定的參數

    GetFunctionAndParameters() (function string, params []string) 返回調用鏈碼時交易提案中指定的被調用的函數名稱及其參數

    GetStringArgs() []string 返回調用鏈碼時指定的參數

    -c ‘{“Args”:[“fn”, “param1”, “param2”, “paramN”]}’

    示例(HelloWorld)

    Init方法

    • 獲取參數并判斷參數長度是否為2
      • 參數: Key, Value
    • 調用PutState方法將狀態寫入賬本中
    • 如果有錯誤, 則返回
    • 打印輸出提示信息
    • 返回成功

    Invoke方法

    • 獲取參數并判斷長度是否為1
    • 利用第1個參數獲取對應狀態GetState(key)
    • 如果有錯誤則返回
    • 如果返回值為空則返回錯誤
    • 返回成功狀態

    總結

    以上是生活随笔為你收集整理的Fabric--区块链应用开发的全部內容,希望文章能夠幫你解決所遇到的問題。

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