Module: Solana::Ruby::Kit::Rpc::Api::GetTransactionsForAddress
- Extended by:
- T::Sig
- Included in:
- Client
- Defined in:
- lib/solana/ruby/kit/rpc/api/get_transactions_for_address.rb
Overview
Returns confirmed transactions that load the given address, with server-side filtering, sorting, and cursor-based pagination.
This combines the discovery step of getSignaturesForAddress with filtering and pagination the server applies itself. Note: check your RPC provider for support for this method.
Mirrors TypeScript's GetTransactionsForAddressApi.getTransactionsForAddress. See https://solana.com/docs/rpc/http/gettransactionsforaddress
Constant Summary collapse
- FILTER_KEYS =
Maps the snake_case keys of a Ruby
filtershash onto the wire names. Comparison operators (:eq, :gt, :gte, :lt, :lte) pass through as-is. T.let( { block_time: 'blockTime', signature: 'signature', slot: 'slot', status: 'status', token_accounts: 'tokenAccounts' }.freeze, T::Hash[Symbol, String] )
- COMPARISON_KEYS =
T.let(%i[eq gt gte lt lte].freeze, T::Array[Symbol])
Instance Method Summary collapse
Instance Method Details
#get_transactions_for_address(address, transaction_details: :signatures, encoding: nil, max_supported_transaction_version: nil, commitment: nil, filters: nil, limit: nil, min_context_slot: nil, pagination_token: nil, sort_order: nil) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/solana/ruby/kit/rpc/api/get_transactions_for_address.rb', line 107 def get_transactions_for_address( address, transaction_details: :signatures, encoding: nil, max_supported_transaction_version: nil, commitment: nil, filters: nil, limit: nil, min_context_slot: nil, pagination_token: nil, sort_order: nil ) unless %i[signatures full].include?(transaction_details) Kernel.raise ArgumentError, "transaction_details must be :signatures or :full, got #{transaction_details.inspect}" end # The RPC rejects `processed` for this method; TypeScript encodes that # as `Exclude<Commitment, 'processed'>`, so fail fast here too. if commitment == :processed Kernel.raise ArgumentError, 'getTransactionsForAddress does not support the :processed commitment' end if transaction_details == :signatures if encoding Kernel.raise ArgumentError, 'encoding is only valid with transaction_details: :full' end if max_supported_transaction_version Kernel.raise ArgumentError, 'max_supported_transaction_version is only valid with transaction_details: :full' end end config = { 'transactionDetails' => transaction_details.to_s } config['encoding'] = encoding if encoding config['maxSupportedTransactionVersion'] = max_supported_transaction_version if max_supported_transaction_version config['commitment'] = commitment.to_s if commitment config['limit'] = limit if limit config['minContextSlot'] = min_context_slot if min_context_slot config['paginationToken'] = pagination_token if pagination_token config['sortOrder'] = sort_order.to_s if sort_order config['filters'] = build_filters(filters) if filters && !filters.empty? raw = transport.request('getTransactionsForAddress', [address, config]) rows = raw['data'] || [] data = if transaction_details == :full # Returned verbatim so each element can be fed to # TransactionIntrospection.decode_transaction_from_rpc_response. rows else rows.map do |tx| TransactionsForAddressSignature.new( block_time: tx['blockTime'], confirmation_status: tx['confirmationStatus']&.to_sym, err: tx['err'], memo: tx['memo'], signature: tx['signature'], slot: Kernel.Integer(tx['slot']), transaction_index: tx['transactionIndex'] && Kernel.Integer(tx['transactionIndex']) ) end end TransactionsForAddressPage.new(data: data, pagination_token: raw['paginationToken']) end |