bnb-chain / go-sdk

Apache License 2.0
204 stars 97 forks source link

tx decode problem #181

Closed asovetnikov closed 1 year ago

asovetnikov commented 1 year ago

Hi! I use github.com/binance-chain/go-sdk@v1.2.9 github.com/tendermint/tendermint@v0.32.3

When i try decode tx data, i get error UnmarshalBinaryBare expected to read prefix bytes F0625DEE (since it is registered concrete) but got 41487759...

I use this code

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "github.com/bnb-chain/go-sdk/types"
    "github.com/bnb-chain/go-sdk/types/tx"
)

func main() {
    t := "xAHwYl3uClAqLIf6CiQKFDl0HkpqVwLPX3tRmpePL0eW9zYjEgwKA0JOQhCAwKjKmjoSJAoUILhJdbGuyuZDjKR/KVNqO//8IgUSDAoDQk5CEIDAqMqaOhJsCibrWumHIQNdu1R5kUw3Fnnwgi0gHNenyhF4aDixw6ML8koevPcIZxJAFfqW7RjkwC7PdlZaN2XV1n070I7tyLIGWwoxTnk3Ldd8LWSlu0NXCcZCF3RA2bEWjHtyZRZ1SWaliBcj72o3uSAD"

    codec := types.NewCodec()

    parsedTxs := tx.StdTx{}
    _, err := codec.UnmarshalBinaryLengthPrefixedReader(bytes.NewBuffer([]byte(t)), &parsedTxs, 0)
    if err != nil {
        fmt.Println(err.Error())
        return
    }

    bz, err := json.Marshal(parsedTxs)

    if err != nil {
        fmt.Println("Error - json marshal")
        return
    }

    fmt.Println(string(bz))

}
asovetnikov commented 1 year ago

I resolved this problem

package main

import (
    "encoding/base64"
    "encoding/json"
    "fmt"
    "github.com/bnb-chain/go-sdk/types"
    "github.com/bnb-chain/go-sdk/types/tx"
)

func main() {
    t := "xAHwYl3uClAqLIf6CiQKFDl0HkpqVwLPX3tRmpePL0eW9zYjEgwKA0JOQhCAwKjKmjoSJAoUILhJdbGuyuZDjKR/KVNqO//8IgUSDAoDQk5CEIDAqMqaOhJsCibrWumHIQNdu1R5kUw3Fnnwgi0gHNenyhF4aDixw6ML8koevPcIZxJAFfqW7RjkwC7PdlZaN2XV1n070I7tyLIGWwoxTnk3Ldd8LWSlu0NXCcZCF3RA2bEWjHtyZRZ1SWaliBcj72o3uSAD"

    decode, err := base64.StdEncoding.DecodeString(t)
    if err != nil {
        return
    }

    codec := types.NewCodec()
    parsedTxs := tx.StdTx{}

    err = codec.UnmarshalBinaryLengthPrefixed(decode, &parsedTxs)
    if err != nil {
        fmt.Println(err.Error())
        return
    }

    bz, err := json.Marshal(parsedTxs)

    if err != nil {
        fmt.Println("Error - json marshal")
        return
    }

    fmt.Println(string(bz))

}