1. 程式人生 > 其它 >c++ eos智慧合約開發_hyperledger fabric 開發第一個智慧合約

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資料夾

8c91840c2acca78511d73c8066b7ae5c.png

三、進入到fabric-samples/chaincode-docker-devmode,啟動網路

docker-compose -f docker-compose-simple.yaml up

四、新開一個終端,編譯鏈碼,並啟動

docker exec -it chaincode bash

cd hello/

go build

0838de383d05a49a042b9450f9acf810.png

CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=mycc:0 ./hello

f5be36210a4ffc6b27a50c162c66fdb3.png

五、新開一個終端,進入docker容器,操作鏈碼

docker exec -it cli bash

安裝鏈碼

peer chaincode install -p chaincodedev/chaincode/hello -n mycc -v 0

b0bb35cc8decec07f9d3400f71f96f0e.png

例項化鏈碼

peer chaincode instantiate -n mycc -v 0 -c '{"Args":["str","HelloWorld"]}' -C myc

827b7e4416c7a137e0186da70ab92a48.png

查詢鏈碼

peer chaincode query -n mycc -c '{"Args":["get","str"]}' -C myc

a010302f92013c6de11f86ce00e4a3b8.png

修改鏈碼

peer chaincode invoke -n mycc -c '{"Args":["set","str","newHelloWorld"]}' -C myc

aa2c9733153d561eaad3ee9f78b821aa.png

再次查詢

fac75971157f79671f1ee64b0720d82f.png

至此,第一個智慧合約demo完成了。


原文連結:https://learnblockchain.cn/......

作者主頁:https://learnblockchain.cn/... ,歡迎閱讀作者更多好文

登鏈社群 — 區塊鏈技術愛好者的家園