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。代码编译得很好
答案 0 :(得分:0)
如果你正在使用https://github.com/hyperledger-archives/fabric/blob/master/core/chaincode/shim/chaincode.go#L628我怀疑shim.ChainCodeStubInterface
在传入此方法之前尚未正确初始化。
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
方法是我希望存根被初始化的地方,这样你的值就不会被返回为空