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  }