An account's decoded bytes, or null when no such account exists.
The base64 decode lives here rather than at each call site, and null
means absent and nothing else — see HeliusRpcClient.call.
A block's signatures, or null when the slot holds no block.
transactionDetails: "signatures" returns no transaction bodies, so the
version ceiling should not bite here — it is raised and sent anyway
because Helius is not stock Agave and the parameter costs nothing.
As getAccountData for up to 100 addresses in one call, in the
order given; null for each address with no account.
Every account owned by programId, walked one cursor page at a time.
There is deliberately no single-shot getProgramAccounts here. V1
materialises every match before it replies, so it falls over on a large
owner set — Helius refuses the call once its account-index service is
loaded (-32603, "please use getProgramAccountsV2 with pagination"), and
an owner as large as the upgradeable loader, which owns a loader account
for every program on the cluster, is only readable through the cursor.
A small owner set costs one page here, so V1 bought nothing worth the
footgun of a method that works until the data grows.
filters narrows what comes back; dataSlice narrows how much of each
one does. They are separate because listing loader buffers needs every
match and none of the payload — 28 of them on devnet today, ~5 MB if
fetched whole — so a caller can filter on bytes it never downloads.
The node pages over the scan, not over the results, so a page can come back empty and still carry a cursor. Only a null cursor ends the walk.
Optionalcommitment?: "confirmed" | "finalized" | "processed"OptionaldataSlice?: { length: number; offset: number }Bytes of each account's data to return. length: 0 returns none.
Optionalfilters?: ({ dataSize: number } | { memcmp: { bytes: string; offset: number } })[]Signatures for address, newest first.
The RPC only ever walks backwards: before picks the page's starting
point and until is the older signature it stops at. There is no key that
means "newer than X" — an unknown config key is silently ignored by the
node, so a misnamed watermark reads as no watermark and returns the full
history.
Optionalbefore?: stringPage backwards starting from this signature (exclusive).
Optionallimit?: numberOptionaluntil?: stringStop once this already-seen signature is reached (exclusive).
An SPL token account's balance, or null when no such account exists.
A wallet that has never held the token has no associated token account,
and the node reports that as an error rather than an empty result — in
two wordings, depending on whether the address holds no account at all or
holds one that is not a token account. Both are routine, and both are
distinct from a node that refused the request, which still throws.
Every token account owner holds, under the SPL Token and Token-2022
programs, by address. A transfer to one appears only in its own
signature list, not the owner's.
A transaction, or null when the node has no record of the signature.
Goes through HeliusRpcClient.call so an RPC-level error stays an
error: the sync activity treats null as "nothing to index" and exits
successfully, so folding a failure into it loses the transaction silently.
OptionalmaxRetries?: numberOptionalpreflightCommitment?: "confirmed" | "finalized" | "processed"OptionalskipPreflight?: booleanBase64-encoded signed wire transaction
Optionalcommitment?: "confirmed" | "finalized" | "processed"OptionalsigVerify?: booleanBase64-encoded serialized transaction
The process client;
SOLANA_RPC_ENDPOINTis read at each call.