fromTransactionEnvelopeXdrBase64 static method

String fromTransactionEnvelopeXdrBase64(
  1. String transactionEnvelopeXdrBase64
)

returns returns txrep by by parsing a base64 encoded transaction envelope xdr transactionEnvelopeXdrBase64.

Implementation

static String fromTransactionEnvelopeXdrBase64(
    String transactionEnvelopeXdrBase64) {
  XdrTransactionEnvelope envelopeXdr =
      XdrTransactionEnvelope.fromEnvelopeXdrString(
          transactionEnvelopeXdrBase64);

  Transaction? tx;
  FeeBumpTransaction? feeBump;
  List<XdrDecoratedSignature?>? feeBumpSignatures;
  switch (envelopeXdr.discriminant) {
    case XdrEnvelopeType.ENVELOPE_TYPE_TX_V0:
      tx = Transaction.fromV0EnvelopeXdr(envelopeXdr.v0!);
      break;
    case XdrEnvelopeType.ENVELOPE_TYPE_TX:
      tx = Transaction.fromV1EnvelopeXdr(envelopeXdr.v1!);
      break;
    case XdrEnvelopeType.ENVELOPE_TYPE_TX_FEE_BUMP:
      feeBump = FeeBumpTransaction.fromFeeBumpTransactionEnvelope(
          envelopeXdr.feeBump!);
      tx = feeBump.innerTransaction;
      feeBumpSignatures = envelopeXdr.feeBump!.signatures;
      break;
  }

  bool isFeeBump = feeBump != null;

  List<String> lines = List<String>.empty(growable: true);
  String type = isFeeBump ? 'ENVELOPE_TYPE_TX_FEE_BUMP' : 'ENVELOPE_TYPE_TX';
  String prefix = isFeeBump ? 'feeBump.tx.innerTx.tx.' : 'tx.';

  _addLine('type', type, lines);

  if (isFeeBump) {
    _addLine('feeBump.tx.feeSource', feeBump.feeAccount.accountId, lines);
    _addLine('feeBump.tx.fee', feeBump.fee.toString(), lines);
    _addLine('feeBump.tx.innerTx.type', 'ENVELOPE_TYPE_TX', lines);
  }

  _addLine('${prefix}sourceAccount', tx!.sourceAccount.accountId, lines);
  _addLine('${prefix}fee', tx.fee.toString(), lines);

  _addLine('${prefix}seqNum', tx.sequenceNumber.toString(), lines);
  _addPreconditions(tx.preconditions!, lines, prefix);
  _addMemo(tx.memo, lines, prefix);
  _addOperations(tx.operations, lines, prefix);
  _addLine('${prefix}ext.v', '0', lines);
  _addSignatures(
      tx.signatures, lines, isFeeBump ? 'feeBump.tx.innerTx.' : "");
  if (isFeeBump) {
    _addLine('feeBump.tx.ext.v', '0', lines);
    _addSignatures(feeBumpSignatures!, lines, 'feeBump.');
  }
  return lines.join('\n');
}