HyperLedger Fabric chaincode 起步示例

package main

import (
    "fmt"
    "github.com/hyperledger/fabric/core/chaincode/shim"
    "github.com/hyperledger/fabric/protos/peer"
)

type SimpleAsset struct {
}

func (t *SimpleAsset) Init(stub shim.ChaincodeStubInterface) peer.Response {
    args := stub.GetStringArgs()
    if len(args) != 2 {
        return shim.Error("incorrect arg")
    }

    err := stub.PutState(args[0], []byte(args[1]))
    if err != nil {
        return shim.Error(fmt.Sprintf("failed to create asset: %s", args[0]))
    }

    return shim.Success(nil)
}

func (t *SimpleAsset) Invoke(stub shim.ChaincodeStubInterface) peer.Response {
    fn, args := stub.GetFunctionAndParameters()

    var result string
    var err error

    if fn == "set" {
        result, err = set(stub, args)
    } else {
        result, err = get(stub, args)
    }

    if err != nil {
        return shim.Error(err.Error())
    }

    return shim.Success([]byte(result))
}

func set(stub shim.ChaincodeStubInterface, args []string) (string, error) {
    if len(args) != 2 {
        return "", fmt.Errorf("incorrect arg")
    }

    err := stub.PutState(args[0], []byte(args[1]))
    if err != nil {
        return "", fmt.Errorf("failed to set asset %s", args[0])
    }

    return args[1], nil
}

func get(stub shim.ChaincodeStubInterface, args []string) (string, error) {
    if len(args) != 1 {
        return "", fmt.Errorf("incorrect arg")
    }

    value, err := stub.GetState(args[0])
    if err != nil {
        return "", fmt.Errorf("failed to get asset %s", args[0])
    }

    return string(value), nil
}

func main() {
    if err := shim.Start(new(SimpleAsset)); err != nil {
        fmt.Printf("error starting simpleasset chaincode: %s", err)
    }
}

测试方式参考:
HyperLedger Fabric chaincode 开发模式 docker-devmode

你可能感兴趣的:(HyperLedger Fabric chaincode 起步示例)