github.com/stellar/stellar-etl@v1.0.1-0.20240312145900-4874b6bf2b89/internal/transform/ledger_transaction.go (about) 1 package transform 2 3 import ( 4 "fmt" 5 6 "github.com/stellar/stellar-etl/internal/utils" 7 8 "github.com/stellar/go/ingest" 9 "github.com/stellar/go/xdr" 10 ) 11 12 // TransformTransaction converts a transaction from the history archive ingestion system into a form suitable for BigQuery 13 func TransformLedgerTransaction(transaction ingest.LedgerTransaction, lhe xdr.LedgerHeaderHistoryEntry) (LedgerTransactionOutput, error) { 14 ledgerHeader := lhe.Header 15 outputLedgerSequence := uint32(ledgerHeader.LedgerSeq) 16 17 outputTxEnvelope, err := xdr.MarshalBase64(transaction.Envelope) 18 if err != nil { 19 return LedgerTransactionOutput{}, err 20 } 21 22 outputTxResult, err := xdr.MarshalBase64(&transaction.Result) 23 if err != nil { 24 return LedgerTransactionOutput{}, err 25 } 26 27 outputTxMeta, err := xdr.MarshalBase64(transaction.UnsafeMeta) 28 if err != nil { 29 return LedgerTransactionOutput{}, err 30 } 31 32 outputTxFeeMeta, err := xdr.MarshalBase64(transaction.FeeChanges) 33 if err != nil { 34 return LedgerTransactionOutput{}, err 35 } 36 37 outputTxLedgerHistory, err := xdr.MarshalBase64(lhe) 38 if err != nil { 39 return LedgerTransactionOutput{}, err 40 } 41 42 outputCloseTime, err := utils.TimePointToUTCTimeStamp(ledgerHeader.ScpValue.CloseTime) 43 if err != nil { 44 return LedgerTransactionOutput{}, fmt.Errorf("could not convert close time to UTC timestamp: %v", err) 45 } 46 47 transformedLedgerTransaction := LedgerTransactionOutput{ 48 LedgerSequence: outputLedgerSequence, 49 TxEnvelope: outputTxEnvelope, 50 TxResult: outputTxResult, 51 TxMeta: outputTxMeta, 52 TxFeeMeta: outputTxFeeMeta, 53 TxLedgerHistory: outputTxLedgerHistory, 54 ClosedAt: outputCloseTime, 55 } 56 57 return transformedLedgerTransaction, nil 58 }