ListTransactionsRequest
ListTransactionsRequest lists executed transactions with CEL filtering and pagination.
Returns transactions ordered from most recent to older (slot DESC, block_offset DESC). Supports filtering on transaction metadata and execution results using CEL expressions.
Available fields for filtering:
- transaction.slot (uint64): Block slot number where transaction was executed
- transaction.block_offset (uint32): Transaction’s position within the block
- transaction.signature.value (bytes): Transaction signature
Header fields (in-memory evaluation only, not SQL pushdown):
- transaction.header.version (uint32): Transaction format version
- transaction.header.fee (uint64): Transaction fee
- transaction.header.nonce (uint64): Sender account nonce
- transaction.header.start_slot (uint64): Earliest slot for execution
- transaction.header.expiry_after (uint32): Expiry duration in slots
- transaction.header.requested_compute_units (uint64): Requested compute units
- transaction.header.requested_memory_units (uint32): Requested memory units
- transaction.header.requested_state_units (uint32): Requested state units
- transaction.header.fee_payer_pubkey.value (bytes): Fee payer public key
- transaction.header.program_pubkey.value (bytes): Program public key
- transaction.header.fee_payer_signature.value (bytes): Fee payer signature
Execution result fields:
- transaction.execution_result.vm_error (TransactionVmError enum): VM error code (0 = success)
- transaction.execution_result.user_error_code (uint64): User-defined error code
- transaction.execution_result.execution_result (uint64): Alias for user_error_code
- transaction.execution_result.consumed_compute_units (uint64): Compute units consumed
- transaction.execution_result.consumed_memory_units (uint32): Memory units consumed
- transaction.execution_result.consumed_state_units (uint32): State units consumed
- transaction.execution_result.events_count (uint32): Number of events emitted
- transaction.execution_result.events_size (uint32): Total size of events in bytes
Available CEL functions:
- has(field): Check if optional field exists
- uint(value): Convert to uint type
- int(value): Convert to int type
- string(value): Convert to string type
- bytes(value): Convert to bytes type
Available filter parameters (accessible via params.* in expressions):
- params.slot (uint64): Slot number for filtering
- params.u64 (uint64): Generic uint64 parameter
- params.pubkey (Pubkey): Public key parameter for filtering
Filter examples:
-
Filter by slot range: filter.expression = “transaction.slot >= uint(1000) && transaction.slot <= uint(2000)”
-
Filter by successful transactions (no error): filter.expression = “transaction.execution_result.user_error_code == uint(0)” filter.expression = “transaction.execution_result.vm_error == int(0)”
-
Filter by specific VM error: filter.expression = “transaction.execution_result.vm_error == int(2)” // VM_REVERT filter.expression = “transaction.execution_result.vm_error == int(4)” // NONCE_TOO_LOW filter.expression = “transaction.execution_result.vm_error == int(5)” // NONCE_TOO_HIGH
-
Filter by resource usage: filter.expression = “transaction.execution_result.consumed_compute_units > uint(1000)” filter.expression = “transaction.execution_result.consumed_memory_units > uint(0)” filter.expression = “transaction.execution_result.consumed_state_units >= uint(0)”
-
Filter by compute units range: filter.expression = “transaction.execution_result.consumed_compute_units >= uint(0) && transaction.execution_result.consumed_compute_units < uint(1000000)”
-
Filter by events count: filter.expression = “transaction.execution_result.events_count == uint(0)” // No events (transfers) filter.expression = “transaction.execution_result.events_count > uint(0)” // Has events filter.expression = “transaction.execution_result.events_count == uint(1)” // Exactly 1 event
-
Filter by events size: filter.expression = “transaction.execution_result.events_size == uint(0)” // No events filter.expression = “transaction.execution_result.events_size > uint(0)” // Has events filter.expression = “transaction.execution_result.events_size >= uint(100)” // Large events filter.expression = “transaction.execution_result.events_size >= uint(50) && transaction.execution_result.events_size <= uint(200)”
-
Filter by block offset: filter.expression = “transaction.block_offset >= uint(0)” filter.expression = “transaction.block_offset == uint(5)”
-
Combine multiple conditions with AND: filter.expression = “transaction.execution_result.user_error_code == uint(0) && transaction.execution_result.consumed_compute_units > uint(0)”
-
Combine multiple conditions with OR: filter.expression = “transaction.execution_result.user_error_code == uint(0) || transaction.execution_result.user_error_code != uint(0)” filter.expression = “transaction.execution_result.vm_error == int(2) || transaction.execution_result.vm_error == int(4)”
-
Complex combined filters: filter.expression = “(transaction.slot >= uint(0) && transaction.execution_result.user_error_code == uint(0)) || transaction.execution_result.consumed_compute_units > uint(100000)”
-
Check for field existence: filter.expression = “has(transaction.execution_result)”
-
Use inequality operators: filter.expression = “transaction.execution_result.consumed_compute_units < uint(1000000)” filter.expression = “transaction.execution_result.consumed_compute_units <= uint(1000000)” filter.expression = “transaction.execution_result.consumed_compute_units >= uint(0)” filter.expression = “transaction.execution_result.user_error_code != uint(999)”
-
Use params.slot parameter: filter.expression = “transaction.slot == params.slot” filter.params[“slot”].uint_value = 1234
-
Use params.u64 with type conversion: filter.expression = “transaction.execution_result.consumed_compute_units < uint(params.u64)” filter.params[“u64”].uint_value = 1000000
The return_events flag controls whether event data is included in the response:
- return_events = false (default): Only event counts/sizes are returned, not actual event data
- return_events = true: Full event data is included in execution results
Note: All filters are pushed down to SQL for optimal performance where possible.
Package: thru.services.v1
Fields
Section titled “Fields”| Field | Type | # | Description |
|---|---|---|---|
filter | thru.common.v1.Filter | 1 · optional | CEL filter expression (OPTIONAL). See message documentation for examples. |
page | thru.common.v1.PageRequest | 2 · optional | |
return_events | bool | 3 · optional | Whether to include event data in results (default: false) |
version_context | thru.common.v1.VersionContext | 4 · optional | |
min_consensus | thru.common.v1.ConsensusStatus | 5 · optional |