-2

我坐在一个 Go 结构中,其中变量中有一个日期类型。使用此日期字段将订单应用于结构时,不会返回日期,仅返回默认值。我正在使用超级账本结构来存储值并检索它们。存储在链码中的值是这样的:

Chaincode invoke successful. result: status:200 payload:"{\"XXX\":1,\"YYY\":12 ,\"ZZZ\":92,\"DATE\":16/Nov/2020 17:50:04}"

我使用 time.NOW().UTC().Format(....) 在链代码中设置的“日期”参数

我有一个名为 N 的结构,其中包含以下字段:

type N struct {
        Xxx int `json:"XXX"`
        Yyy int `json:"YYY"`
        Zzz float64 `json:"ZZZ"`
        Date time.Time `json:"DATE"`
}

我正在尝试使用函数 GetHistoryForKey(args[0]) 进行恢复

hist, err := APIstub.GetHistoryForKey(args[0])
          
    var listHist = make([]N, 0)
    for hist.HasNext() {
         resp, err := hist.Next()
         var node N
         err = json.Unmarshal(resp.Value, &node)
         listHist = append(listHist, node)
    }
        
    sort.Slice(listHist, func(i, j int) bool { return listHist[i].Date.Before(listHist[j].Date) })
        
        
    var buffer bytes.Buffer
    var jsonStr string
    for _, nodo := range listHist {
         jsonBytes, _ := json.Marshal(node)
         jsonStr = string(jsonBytes[:])
         buffer.WriteString(jsonStr)              
    }
        
    return buffer.String(), nil

但是当我调用这个函数对历史进行排序时,DATE 值出现了错误,如下所示:

{"XXX":1,"YYY":12,"ZZZ":92,"DATE":"0001-01-01T00:00:00Z"}

如果我调用恢复此特定键的其他函数,则正确的值返回 ok。

{"XXX":1,"YYY":12,"ZZZ":92,"DATE":16/Nov/2020 17:50:04}

我做错了什么没有排序的返回值?

我这样设置日期:

func set(stub shim.ChaincodeStubInterface, args []string) (string, error) {
        if len(args) != 2 {
                return "", fmt.Errorf("Something error")
        }
        var currDate = time.Now().UTC().Format(("02/Jan/2006 15:04:05"))
        var ret = strings.Replace(args[1], "???", currDate, -1)
        err := stub.PutState(args[0], []byte(ret))
        if err != nil {
                return "", fmt.Errorf("something", args[0])
        }
        return retorno, nil
}

通过此代码调用:

docker exec -it cli peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n mychain -c '{"Args":["set","key1", "{\"XXX\":1,\"YYY\":80,\"ZZZ\":30.0,"\DATE\":???}"]}'
4

1 回答 1

0

我能够通过将输入日期以 0001-01-01T00:00:00Z 格式放置,然后再将其插入区块链来解决该问题。当我搜索时,日期格式正确,值正确。

于 2020-12-14T21:11:48.063 回答