getTransactionSizeLimit function
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.',
);
}