首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stub.GetCallerCertificate()、stub.GetCallerMetadata()、stub.GetPayload()返回空白

stub.GetCallerCertificate()、stub.GetCallerMetadata()、stub.GetPayload()返回空白
EN

Stack Overflow用户
提问于 2017-04-18 19:34:26
回答 1查看 143关注 0票数 0
代码语言:javascript
复制
package main

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

var matchLogger = shim.NewLogger("Helper")

type PlaceHolder struct {
    ValA  string `json:"ValA"`
    ValB  string `json:"ValB"`
    Match bool   `json:"Match"`
}

type Agreement struct {
    TradeNumber         PlaceHolder `json:"TradeNumber"`
    BuyerName           PlaceHolder `json:"BuyerName"`
    SellerName          PlaceHolder `json:"SellerName"`
    BuyerID             PlaceHolder `json:"BuyerID"`
    SellerID            PlaceHolder `json:"SellerID"`
}

type ContractContaineer struct {
    FirmID       string   `json:"FirmID"`
    ContractList []string `json:"contractList"`
}


func (t *Agreement) Init(stub shim.ChaincodeStubInterface) pb.Response {

    xx, err1 := stub.GetCallerCertificate()
    if err1 != nil {
        matchLogger.Info(err1)  
    }
    matchLogger.Info("Cert ----")
    matchLogger.Info(string(xx))
    matchLogger.Info("----")

    xy, err3 := stub.GetCallerMetadata()
    if err3 != nil {
        matchLogger.Info(err3)  
    }
    matchLogger.Info("Meta ----")
    matchLogger.Info(string(xy))
    matchLogger.Info("----")

    yy, err4 := stub.GetPayload()
    if err4 != nil {
        matchLogger.Info(err4)  
    }
    matchLogger.Info("PLD ----")
    matchLogger.Info(string(yy))
    matchLogger.Info("----")


    return shim.Success(nil)
}


func (t *Agreement) Query(stub shim.ChaincodeStubInterface) pb.Response {
        return shim.Success(nil)
}


// Transaction makes payment of X units from A to B
func (t *Agreement) Invoke(stub shim.ChaincodeStubInterface) pb.Response {

    xx, err1 := stub.GetCallerCertificate()
    if err1 != nil {
        matchLogger.Info(err1)  
    }
    matchLogger.Info("Cert ----")
    matchLogger.Info(string(xx))
    matchLogger.Info("----")

    xy, err3 := stub.GetCallerMetadata()
    if err3 != nil {
        matchLogger.Info(err3)  
    }
    matchLogger.Info("Meta ----")
    matchLogger.Info(string(xy))
    matchLogger.Info("----")

    yy, err4 := stub.GetPayload()
    if err4 != nil {
        matchLogger.Info(err4)  
    }
    matchLogger.Info("PLD ----")
    matchLogger.Info(string(yy))
    matchLogger.Info("----")

    return shim.Success(nil)
}


func main() {

    lld, _ := shim.LogLevel("INFO")
    matchLogger.Info(lld)
    matchLogger.SetLevel(lld)
    matchLogger.Info(matchLogger.IsEnabledFor(lld))
    err := shim.Start(new(Agreement))
    if err != nil {
        fmt.Printf("Error starting Simple chaincode: %s", err)
    }
}

这是我完整的GO文件。敬请指教我做错了什么。对于xx,xy,yy,记录器输出为空。错误也是零。我已经实现了所有3个方法,即init、invoke和query。代码被编译得很好。

EN

回答 1

Stack Overflow用户

发布于 2017-04-19 00:17:41

如果您正在使用https://github.com/hyperledger-archives/fabric/blob/master/core/chaincode/shim/chaincode.go#L628,我怀疑shim.ChainCodeStubInterface在被传递到此方法之前没有被正确初始化。

要实现this interface,每个ChainCodeStub实现都是必需的

代码语言:javascript
复制
type Chaincode interface {
    // Init is called during Deploy transaction after the container has been
    // established, allowing the chaincode to initialize its internal data
    Init(stub *ChaincodeStub, function string, args []string) ([]byte, error)

    // Invoke is called for every Invoke transactions. The chaincode may change
    // its state variables
    Invoke(stub *ChaincodeStub, function string, args []string) ([]byte, error)

    // Query is called for Query transactions. The chaincode may only read
    // (but not modify) its state variables and return the result
    Query(stub *ChaincodeStub, function string, args []string) ([]byte, error)
}

我希望在Init方法中初始化存根,这样您的值就不会返回为空

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43471031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档