getTransactionSizeLimit function

int getTransactionSizeLimit(
  1. Object versionOrTransaction
)

Gets the maximum transaction size for versionOrTransaction.

Pass a TransactionVersion to query the limit for a message version, or pass a compiled Transaction to derive the limit from the wire-format message version byte. Version 1 transactions use Agave's larger 4096-byte limit; legacy and version 0 transactions use the packet payload limit.

Implementation

int getTransactionSizeLimit(Object versionOrTransaction) {
  if (versionOrTransaction is TransactionVersion) {
    return switch (versionOrTransaction) {
      TransactionVersion.legacy ||
      TransactionVersion.v0 => transactionSizeLimit,
      TransactionVersion.v1 => transactionV1SizeLimit,
    };
  }

  if (versionOrTransaction is Transaction) {
    if (versionOrTransaction.messageBytes.isEmpty) return transactionSizeLimit;

    const versionPrefixMask = 0x80;
    const versionFlagMask = 0x7f;
    final firstMessageByte = versionOrTransaction.messageBytes.first;
    if (firstMessageByte & versionPrefixMask == 0) return transactionSizeLimit;

    final version = firstMessageByte & versionFlagMask;
    return version == 1 ? transactionV1SizeLimit : transactionSizeLimit;
  }

  throw ArgumentError.value(
    versionOrTransaction,
    'versionOrTransaction',
    'Expected a TransactionVersion or Transaction.',
  );
}