func txResultFromCore(tx core.Transaction) txsub.Result { // re-encode result to base64 var raw bytes.Buffer _, err := xdr.Marshal(&raw, tx.Result.Result) if err != nil { return txsub.Result{Err: err} } trx := base64.StdEncoding.EncodeToString(raw.Bytes()) // if result is success, send a normal resposne if tx.Result.Result.Result.Code == xdr.TransactionResultCodeTxSuccess { return txsub.Result{ Hash: tx.TransactionHash, LedgerSequence: tx.LedgerSequence, EnvelopeXDR: tx.EnvelopeXDR(), ResultXDR: trx, ResultMetaXDR: tx.ResultMetaXDR(), } } // if failed, produce a FailedTransactionError return txsub.Result{ Err: &txsub.FailedTransactionError{ ResultXDR: trx, }, Hash: tx.TransactionHash, LedgerSequence: tx.LedgerSequence, EnvelopeXDR: tx.EnvelopeXDR(), ResultXDR: trx, ResultMetaXDR: tx.ResultMetaXDR(), } }
// Transaction ingests the provided transaction data into a new row in the // `history_transactions` table func (ingest *Ingestion) Transaction( id int64, tx *core.Transaction, fee *core.TransactionFee, ) error { sql := ingest.transactions.Values( id, tx.TransactionHash, tx.LedgerSequence, tx.Index, tx.SourceAddress(), tx.Sequence(), tx.Fee(), len(tx.Envelope.Tx.Operations), tx.EnvelopeXDR(), tx.ResultXDR(), tx.ResultMetaXDR(), fee.ChangesXDR(), sqx.StringArray(tx.Base64Signatures()), ingest.formatTimeBounds(tx.Envelope.Tx.TimeBounds), tx.MemoType(), tx.Memo(), time.Now().UTC(), time.Now().UTC(), ) _, err := ingest.DB.Exec(sql) if err != nil { return err } return nil }