c++ eos智慧合約開發_hyperledger fabric 開發第一個智慧合約
技術標籤:c++ eos智慧合約開發
本文作者:陳俊飛
一、編寫智慧合約程式碼HelloWorld.go,go語言實現,程式碼很簡單,每個合約包含兩個方法,Init、Invoke。
package main import ( "fmt" "github.com/hyperledger/fabric/core/chaincode/shim" "github.com/hyperledger/fabric/protos/peer" ) type Helloworld struct { } func (t * Helloworld) Init(stub shim.ChaincodeStubInterface) peer.Response{ args:= stub.GetStringArgs() err := stub.PutState(args[0],[]byte(args[1])) if err != nil { shim.Error(err.Error()) } return shim.Success(nil) } func (t *Helloworld) Invoke (stub shim.ChaincodeStubInterface) peer.Response{ fn, args := stub.GetFunctionAndParameters() if fn =="set" { return t.set(stub, args) }else if fn == "get"{ return t.get(stub , args) } return shim.Error("Invoke fn error") } func (t *Helloworld) set(stub shim.ChaincodeStubInterface , args []string) peer.Response{ err := stub.PutState(args[0],[]byte(args[1])) if err != nil { return shim.Error(err.Error()) } return shim.Success(nil) } func (t *Helloworld) get (stub shim.ChaincodeStubInterface, args [] string) peer.Response{ value, err := stub.GetState(args[0]) if err != nil { return shim.Error(err.Error()) } return shim.Success(value) } func main(){ err := shim.Start(new(Helloworld)) if err != nil { fmt.Println("start error") } }
二、將程式碼資料夾拷貝到fabric-samples下面的chaincode資料夾
三、進入到fabric-samples/chaincode-docker-devmode,啟動網路
docker-compose -f docker-compose-simple.yaml up
四、新開一個終端,編譯鏈碼,並啟動
docker exec -it chaincode bash
cd hello/
go build
CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=mycc:0 ./hello
五、新開一個終端,進入docker容器,操作鏈碼
docker exec -it cli bash
安裝鏈碼
peer chaincode install -p chaincodedev/chaincode/hello -n mycc -v 0
例項化鏈碼
peer chaincode instantiate -n mycc -v 0 -c '{"Args":["str","HelloWorld"]}' -C myc
查詢鏈碼
peer chaincode query -n mycc -c '{"Args":["get","str"]}' -C myc
修改鏈碼
peer chaincode invoke -n mycc -c '{"Args":["set","str","newHelloWorld"]}' -C myc
再次查詢
至此,第一個智慧合約demo完成了。
原文連結:https://learnblockchain.cn/......
作者主頁:https://learnblockchain.cn/... ,歡迎閱讀作者更多好文
登鏈社群 — 區塊鏈技術愛好者的家園