2

I am working on stellar blockchain and need to decode stellar XDR which is in GO language. I know how to decode using JavaScript but couldn't find a way to do it in GO.

//JS code

const {Transaction} = require('stellar-base')

const parsedTx = new Transaction('tx_envelope_encoded_as_XDR')
console.log(parsedTx)

This works fine. what i have tried and not working...

//GO code

import (

  "bytes"
  "encoding/json"
  "fmt"
  "net/http"
  "github.com/stellar/go/xdr"
  "github.com/gorilla/mux"

)

func DecodeXDR(w http.ResponseWriter, r *http.Request) {

var OBJ model.TransactionCollectionBody
err := json.NewDecoder(r.Body).Decode(&OBJ)
if err != nil {
  w.WriteHeader(http.StatusBadRequest)
  json.NewEncoder(w).Encode("Error while Decoding the body")
  fmt.Println(err)

  return
}

// fmt.Println(OBJ)

// lol:=xdr.Value(OBJ.XDR)

var txe xdr.Transaction
err = xdr.SafeUnmarshalBase64(XDRB64, &txe)
if err != nil {
  fmt.Println(err)
}

fmt.Println(txe)

}

//Output
{{PublicKeyTypePublicKeyTypeEd25519 0xc042055d20} 200 2800572080062465 <nil> {MemoTypeMemoNone <nil> <nil> <nil> <nil>} [{<nil> {OperationTypeManageData <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> 0xc042174040 <nil>}} {<nil> {OperationTypeManageData <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> 0xc042174080 <nil>}}] {0}}

//Expected Output

{ type: 'payment', destination: 'GCKUXI3JRJANYOF3AM35Z22FGUGYYUIEBPE5TTZ7P3G6XAEFGYZC2POM', asset: Asset { code: 'Blog', issuer: 'GDOPTRADBVWJR6BMB6H5ACQTAVUS6XMT53CDNAJZLOSTIUICIW57ISMF' }, amount: '10' }

{ type: 'payment', destination: 'GCKUXI3JRJANYOF3AM35Z22FGUGYYUIEBPE5TTZ7P3G6XAEFGYZC2POM', asset: Asset { code: 'Blog', issuer: 'GDOPTRADBVWJR6BMB6H5ACQTAVUS6XMT53CDNAJZLOSTIUICIW57ISMF' }, amount: '10' }

{ type: 'payment', destination: 'GCKUXI3JRJANYOF3AM35Z22FGUGYYUIEBPE5TTZ7P3G6XAEFGYZC2POM', asset: Asset { code: 'Blog', issuer: 'GDOPTRADBVWJR6BMB6H5ACQTAVUS6XMT53CDNAJZLOSTIUICIW57ISMF' }, amount: '10' }

Can anyone help me to solve this?

1
  • Its good that you mentioned how it will work in JS. That will help some other people.
    – Sharmilan
    Commented Nov 19, 2018 at 12:14

1 Answer 1

1
var txe xdr.Transaction
err = xdr.SafeUnmarshalBase64(TDP.XDR, &txe)
if err != nil {
    fmt.Println(err)
}

You can use above code to Unmarshal Base64 XDR. And using &txe you can retrieve what ever value you need.

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.