iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 15
0
Blockchain

區塊鏈開發(Blockchain/DLT Application Development)系列 第 15

Hyperledger Fabric:Chaincode 開發

  • 分享至 

  • xImage
  •  

interface

必須實作的接口

type Chaincode interface 
{
    //初始化
    Init(stub ChaincodeStubInterface) pb.Response
    //查詢或更新 world state
    Invoke(stub ChaincodeStubInterface) pb.Response
}

撰寫範例

package main
import
(
    "errors"
    "fmt"
    "github.com/hyperledger/fabric/core/chaincode/shim"
)

type SimpleChaincode struct { }

func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface, funcGon string, args []string) ([]byte, error) 
{ 
    //… 
}

func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface, funcGon string, args []string) ([]byte, error) 
{ 
    //… 
}

func main() 
{
    err := shim.Start(new(SimpleChaincode))
    if err != nil 
    {
        fmt.Prinn("Error starGng Simple chaincode: %s", err)
    }
}

開發測試

以 fabric chaincode_example02 為例:

啟動 Orderer 節點

orderer

啟動 peer

CORE_PEER_ID=peer0 peer node start

設置 chaincode
peer chaincode install -p [鏈碼路徑] -n [檔案名稱] -v 1.0

peer chaincode install -p github.com/hyperledger/fabric/examples/chaincode/go/
chaincode_example02/ -n mycc -v 1.0

測試 chaincode:測試模式可以使用 Rest 通訊協定、而正式模式只能使用 Node.js 客戶端

  • 初始化
    peer chaincode instanGate -n mycc -v 1.0 -c '{"Args": ["init", "A", "100", "B", "100"]}'
    
  • 呼叫
    peer chaincode invoke -n mycc -c '{"Args":["invoke", "A", "B", "10"]}'
    
  • 查詢
    peer chaincode query -n mycc -c '{"Args":["query", "A"]}'
    

API 說明

shim.ChaincodeStubInterface

  • State
    GetState(key string) ([]byte, error)
    PutState(key string, value []byte) error
    DelState(key string) error
    GetStateByRange(startKey, endKey string) (StateQueryIteratorInterface, error)
    GetStateByPartialCompositeKey(objectType string, keys []string) (StateQueryIteratorInterface, error)
    GetQueryResult(query string) (StateQueryIteratorInterface, error)
    GetHistoryForKey(key string) (StateQueryIteratorInterface, error)
    CreateCompositeKey(objectType string, a,ributes []string) (string, error)
    SplitCompositeKey(compositeKey string) (string, []string, error)
    
  • Arg
    GetArgs() [][]byte
    GetStringArgs() []string
    GetFuncGonAndParameters() (string, []string)
    GetArgsSlice() ([]byte, error)
    
  • Transaction
    GetCreator() ([]byte, error)
    GetTransient() (map[string][]byte, error)
    GetBinding() ([]byte, error)
    GetTxTimestamp() (*Gmestamp.Timestamp, error)
    GetTxID() string
    
  • Event
    SetEvent(name string, payload []byte) error
    
  • Chaincode
    Start(cc Chaincode) error	//註冊 Chaincode
    InvokeChaincode(chaincodeName string, args [][]byte, channel string) pb.Response
    
  • Log
    NewLogger(name string) *ChaincodeLogger	//建立 Logger
    SetLoggingLevel(level LoggingLevel)		//設定 Log 訊息輸出等級
    

參考資源

API 線上文件:
https://godoc.org/github.com/hyperledger/fabric/core/chaincode/shim

Postman Rest API 測試工具:
https://www.getpostman.com/


上一篇
Hyperledger Fabric:環境建置
下一篇
Hyperledger Fabric:共享賬本(Ledger)
系列文
區塊鏈開發(Blockchain/DLT Application Development)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言