zoukankan      html  css  js  c++  java
  • hyperledger fabric 开发第一个智能合约

    一、编写智能合约代码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://blog.csdn.net/u010857052/article/details/83931526

  • 相关阅读:
    HDOJ 1207 汉诺塔II
    [转]写代码的小女孩
    POJ Subway tree systems
    HDOJ 3555 Bomb (数位DP)
    POJ 1636 Prison rearrangement (DP)
    POJ 1015 Jury Compromise (DP)
    UVA 10003
    UVA 103 Stacking Boxes
    HDOJ 3530 Subsequence
    第三百六十二、三天 how can I 坚持
  • 原文地址:https://www.cnblogs.com/show58/p/13153822.html
Copyright © 2011-2022 走看看