stub.GetCallerCertificate(),stub.GetCallerMetadata(),stub.GetPayload()返回空白

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)
    }
}

This is my complete GO file. Kindly suggest what i did wrong. The logger output is coming as blank for xx, xy, yy. errors are nil too. I have implemented all 3 methods i.e. init, invoke and query. Code is getting compiled just fine

If you're using https://github.com/hyperledger-archives/fabric/blob/master/core/chaincode/shim/chaincode.go#L628 I suspect that the shim.ChainCodeStubInterface has not been initialized properly before being passed in to this method.

Every implementation of ChainCodeStub is required to fulfill this interface

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)
}

And the Init method is where I'd expect the stub to be initialized so that your values don't get returned as empty