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。代码被编译得很好。
发布于 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实现都是必需的
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方法中初始化存根,这样您的值就不会返回为空
https://stackoverflow.com/questions/43471031
复制相似问题