Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 28 additions & 28 deletions content/api-reference/solana/solana-api-overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -12,34 +12,34 @@ slug: docs/solana/solana-api-overview
| | |
| ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| [`getAccountInfo`](/docs/chains/solana/solana-api-endpoints/get-account-info) | [`getBalance`](/docs/chains/solana/solana-api-endpoints/get-balance) |
| [`getBlock`](/docs/chains/solana/solana-api-endpoints/get-block) | [`getBlockCommitment`](/docs/chains/solana/solana-api-endpoints/get-block-commitment) |
| [`getBlockHeight`](/docs/chains/solana/solana-api-endpoints/get-block-height) | [`getBlockProduction`](/docs/chains/solana/solana-api-endpoints/get-block-production) |
| [`getBlocks`](/docs/chains/solana/solana-api-endpoints/get-blocks) | [`getBlocksWithLimit`](/docs/chains/solana/solana-api-endpoints/get-blocks-with-limit) |
| [`getBlockTime`](/docs/chains/solana/solana-api-endpoints/get-block-time) | [`getClusterNodes`](/docs/chains/solana/solana-api-endpoints/get-cluster-nodes) |
| [`getEpochInfo`](/docs/chains/solana/solana-api-endpoints/get-epoch-info) | [`getEpochSchedule`](/docs/chains/solana/solana-api-endpoints/get-epoch-schedule) |
| [`getFeeForMessage`](/docs/chains/solana/solana-api-endpoints/get-fee-for-message) | [`getFirstAvailableBlock`](/docs/chains/solana/solana-api-endpoints/get-first-available-block) |
| [`getGenesisHash`](/docs/chains/solana/solana-api-endpoints/get-genesis-hash) | [`getHealth`](/docs/chains/solana/solana-api-endpoints/get-health) |
| [`getHighestSnapshotSlot`](/docs/chains/solana/solana-api-endpoints/get-highest-snapshot-slot) | [`getIdentity`](/docs/chains/solana/solana-api-endpoints/get-identity) |
| [`getInflationGovernor`](/docs/chains/solana/solana-api-endpoints/get-inflation-governor) | [`getInflationRate`](/docs/chains/solana/solana-api-endpoints/get-inflation-rate) |
| [`getInflationReward`](/docs/chains/solana/solana-api-endpoints/get-inflation-reward) | [`getLargestAccounts`](/docs/chains/solana/solana-api-endpoints/get-largest-accounts) |
| [`getLatestBlockhash`](/docs/chains/solana/solana-api-endpoints/get-latest-blockhash) | [`getLeaderSchedule`](/docs/chains/solana/solana-api-endpoints/get-leader-schedule) |
| [`getMaxRetransmitSlot`](/docs/chains/solana/solana-api-endpoints/get-max-retransmit-slot) | [`getMaxShredInsertSlot`](/docs/chains/solana/solana-api-endpoints/get-max-shred-insert-slot) |
| [`getMinimumBalanceForRentExemption`](/docs/chains/solana/solana-api-endpoints/get-minimum-balance-for-rent-exemption) | [`getMultipleAccounts`](/docs/chains/solana/solana-api-endpoints/get-multiple-accounts) |
| [`getPriorityFeeEstimate`](/docs/chains/solana/solana-api-endpoints/get-priority-fee-estimate) | [`getProgramAccounts`](/docs/chains/solana/solana-api-endpoints/get-program-accounts) |
| [`getRecentPerformanceSamples`](/docs/chains/solana/solana-api-endpoints/get-recent-performance-samples) | [`getRecentPrioritizationFees`](/docs/chains/solana/solana-api-endpoints/get-recent-prioritization-fees) |
| [`getSignaturesForAddress`](/docs/chains/solana/solana-api-endpoints/get-signatures-for-address) | [`getSignatureStatuses`](/docs/chains/solana/solana-api-endpoints/get-signature-statuses) |
| [`getSlot`](/docs/chains/solana/solana-api-endpoints/get-slot) | [`getSlotLeader`](/docs/chains/solana/solana-api-endpoints/get-slot-leader) |
| [`getSlotLeaders`](/docs/chains/solana/solana-api-endpoints/get-slot-leaders) | [`getStakeActivation`](/docs/chains/solana/solana-api-endpoints/get-stake-activation) |
| [`getStakeMinimumDelegation`](/docs/chains/solana/solana-api-endpoints/get-stake-minimum-delegation) | [`getSupply`](/docs/chains/solana/solana-api-endpoints/get-supply) |
| [`getTokenAccountBalance`](/docs/chains/solana/solana-api-endpoints/get-token-account-balance) | [`getTokenAccountsByDelegate`](/docs/chains/solana/solana-api-endpoints/get-token-accounts-by-delegate) |
| [`getTokenAccountsByOwner`](/docs/chains/solana/solana-api-endpoints/get-token-accounts-by-owner) | [`getTokenAccountsByOwnerAtSlot`](/docs/chains/solana/solana-api-endpoints/get-token-accounts-by-owner-at-slot) |
| [`getTokenLargestAccounts`](/docs/chains/solana/solana-api-endpoints/get-token-largest-accounts) | [`getTokenSupply`](/docs/chains/solana/solana-api-endpoints/get-token-supply) |
| [`getTransaction`](/docs/chains/solana/solana-api-endpoints/get-transaction) | [`getTransactionCount`](/docs/chains/solana/solana-api-endpoints/get-transaction-count) |
| [`getTransactionsForAddress`](/docs/chains/solana/solana-api-endpoints/get-transactions-for-address) | [`getVersion`](/docs/chains/solana/solana-api-endpoints/get-version) |
| [`getVoteAccounts`](/docs/chains/solana/solana-api-endpoints/get-vote-accounts) | [`isBlockhashValid`](/docs/chains/solana/solana-api-endpoints/is-blockhash-valid) |
| [`minimumLedgerSlot`](/docs/chains/solana/solana-api-endpoints/minimum-ledger-slot) | [`requestAirdrop`](/docs/chains/solana/solana-api-endpoints/request-airdrop) |
| [`sendTransaction`](/docs/chains/solana/solana-api-endpoints/send-transaction) | [`simulateBundle`](/docs/chains/solana/solana-api-endpoints/simulate-bundle) |
| [`simulateTransaction`](/docs/chains/solana/solana-api-endpoints/simulate-transaction) | |
| [`getBalanceByOwnerAtSlot`](/docs/chains/solana/solana-api-endpoints/get-balance-by-owner-at-slot) | [`getBlock`](/docs/chains/solana/solana-api-endpoints/get-block) |
| [`getBlockCommitment`](/docs/chains/solana/solana-api-endpoints/get-block-commitment) | [`getBlockHeight`](/docs/chains/solana/solana-api-endpoints/get-block-height) |
| [`getBlockProduction`](/docs/chains/solana/solana-api-endpoints/get-block-production) | [`getBlocks`](/docs/chains/solana/solana-api-endpoints/get-blocks) |
| [`getBlocksWithLimit`](/docs/chains/solana/solana-api-endpoints/get-blocks-with-limit) | [`getBlockTime`](/docs/chains/solana/solana-api-endpoints/get-block-time) |
| [`getClusterNodes`](/docs/chains/solana/solana-api-endpoints/get-cluster-nodes) | [`getEpochInfo`](/docs/chains/solana/solana-api-endpoints/get-epoch-info) |
| [`getEpochSchedule`](/docs/chains/solana/solana-api-endpoints/get-epoch-schedule) | [`getFeeForMessage`](/docs/chains/solana/solana-api-endpoints/get-fee-for-message) |
| [`getFirstAvailableBlock`](/docs/chains/solana/solana-api-endpoints/get-first-available-block) | [`getGenesisHash`](/docs/chains/solana/solana-api-endpoints/get-genesis-hash) |
| [`getHealth`](/docs/chains/solana/solana-api-endpoints/get-health) | [`getHighestSnapshotSlot`](/docs/chains/solana/solana-api-endpoints/get-highest-snapshot-slot) |
| [`getIdentity`](/docs/chains/solana/solana-api-endpoints/get-identity) | [`getInflationGovernor`](/docs/chains/solana/solana-api-endpoints/get-inflation-governor) |
| [`getInflationRate`](/docs/chains/solana/solana-api-endpoints/get-inflation-rate) | [`getInflationReward`](/docs/chains/solana/solana-api-endpoints/get-inflation-reward) |
| [`getLargestAccounts`](/docs/chains/solana/solana-api-endpoints/get-largest-accounts) | [`getLatestBlockhash`](/docs/chains/solana/solana-api-endpoints/get-latest-blockhash) |
| [`getLeaderSchedule`](/docs/chains/solana/solana-api-endpoints/get-leader-schedule) | [`getMaxRetransmitSlot`](/docs/chains/solana/solana-api-endpoints/get-max-retransmit-slot) |
| [`getMaxShredInsertSlot`](/docs/chains/solana/solana-api-endpoints/get-max-shred-insert-slot) | [`getMinimumBalanceForRentExemption`](/docs/chains/solana/solana-api-endpoints/get-minimum-balance-for-rent-exemption) |
| [`getMultipleAccounts`](/docs/chains/solana/solana-api-endpoints/get-multiple-accounts) | [`getPriorityFeeEstimate`](/docs/chains/solana/solana-api-endpoints/get-priority-fee-estimate) |
| [`getProgramAccounts`](/docs/chains/solana/solana-api-endpoints/get-program-accounts) | [`getRecentPerformanceSamples`](/docs/chains/solana/solana-api-endpoints/get-recent-performance-samples) |
| [`getRecentPrioritizationFees`](/docs/chains/solana/solana-api-endpoints/get-recent-prioritization-fees) | [`getSignaturesForAddress`](/docs/chains/solana/solana-api-endpoints/get-signatures-for-address) |
| [`getSignatureStatuses`](/docs/chains/solana/solana-api-endpoints/get-signature-statuses) | [`getSlot`](/docs/chains/solana/solana-api-endpoints/get-slot) |
| [`getSlotLeader`](/docs/chains/solana/solana-api-endpoints/get-slot-leader) | [`getSlotLeaders`](/docs/chains/solana/solana-api-endpoints/get-slot-leaders) |
| [`getStakeActivation`](/docs/chains/solana/solana-api-endpoints/get-stake-activation) | [`getStakeMinimumDelegation`](/docs/chains/solana/solana-api-endpoints/get-stake-minimum-delegation) |
| [`getSupply`](/docs/chains/solana/solana-api-endpoints/get-supply) | [`getTokenAccountBalance`](/docs/chains/solana/solana-api-endpoints/get-token-account-balance) |
| [`getTokenAccountsByDelegate`](/docs/chains/solana/solana-api-endpoints/get-token-accounts-by-delegate) | [`getTokenAccountsByOwner`](/docs/chains/solana/solana-api-endpoints/get-token-accounts-by-owner) |
| [`getTokenAccountsByOwnerAtSlot`](/docs/chains/solana/solana-api-endpoints/get-token-accounts-by-owner-at-slot) | [`getTokenLargestAccounts`](/docs/chains/solana/solana-api-endpoints/get-token-largest-accounts) |
| [`getTokenSupply`](/docs/chains/solana/solana-api-endpoints/get-token-supply) | [`getTransaction`](/docs/chains/solana/solana-api-endpoints/get-transaction) |
| [`getTransactionCount`](/docs/chains/solana/solana-api-endpoints/get-transaction-count) | [`getTransactionsForAddress`](/docs/chains/solana/solana-api-endpoints/get-transactions-for-address) |
| [`getVersion`](/docs/chains/solana/solana-api-endpoints/get-version) | [`getVoteAccounts`](/docs/chains/solana/solana-api-endpoints/get-vote-accounts) |
| [`isBlockhashValid`](/docs/chains/solana/solana-api-endpoints/is-blockhash-valid) | [`minimumLedgerSlot`](/docs/chains/solana/solana-api-endpoints/minimum-ledger-slot) |
| [`requestAirdrop`](/docs/chains/solana/solana-api-endpoints/request-airdrop) | [`sendTransaction`](/docs/chains/solana/solana-api-endpoints/send-transaction) |
| [`simulateBundle`](/docs/chains/solana/solana-api-endpoints/simulate-bundle) | [`simulateTransaction`](/docs/chains/solana/solana-api-endpoints/simulate-transaction) |

## Related APIs

Expand Down
34 changes: 34 additions & 0 deletions src/openrpc/chains/_components/solana/account.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,40 @@ components:
description: >-
Cursor for the next page, or `null` on the last page. Send it
back in `config.pageKey` to continue paging.
GetBalanceByOwnerAtSlotResult:
title: GetBalanceByOwnerAtSlot Result
type: object
description: >-
A wallet's aggregated balance of a single SPL Token or Token-2022
mint at the requested slot. The response shape is identical for
every `scope`, so callers never need to branch.
properties:
wallet:
$ref: "./base-types.yaml#/components/schemas/Pubkey"
description: The wallet queried.
mint:
$ref: "./base-types.yaml#/components/schemas/Pubkey"
description: The token mint queried.
isNative:
type: boolean
description: "`true` for Wrapped SOL, otherwise `false`."
balance:
type: string
description: >-
Human-readable amount (`balanceRaw` scaled by `decimals`).
Returned as a string so large values survive JSON parsing
without precision loss.
balanceRaw:
type: string
description: >-
Raw token amount, as an integer string. Parse as a big
integer, not a float.
decimals:
type: integer
description: Mint decimals.
slot:
type: integer
description: The slot the balance was computed at.
LargestAccountsConfig:
title: LargestAccounts Configuration
type: object
Expand Down
109 changes: 109 additions & 0 deletions src/openrpc/chains/_components/solana/methods.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,115 @@ components:
Internal error. Retry the request; if it persists, contact
support.

getBalanceByOwnerAtSlot:
name: getBalanceByOwnerAtSlot
Comment on lines +323 to +324

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Document the method's compute-unit cost

When this endpoint is published, it will be the only one of the 84 Solana method definitions without x-compute-units; consequently, consumers that build billing or throughput metadata from the generated OpenRPC spec cannot report the cost of this method even though its requests consume CUs. Obtain the canonical value from the chain configuration and add the extension before publishing the endpoint.

Useful? React with 👍 / 👎.

summary: >-
Returns a wallet's total balance of a single SPL Token or
Token-2022 mint as of a specific slot.
description: >-
Returns a wallet's total balance of a single SPL Token or
Token-2022 mint as of a specific slot, already summed across
every token account the wallet held of that mint. It returns a
single figure rather than the list of accounts returned by
`getTokenAccountsByOwnerAtSlot`.


A wallet can own more than one token account for the same mint.
The optional `scope` parameter selects which of them the result
covers: `all` (default) sums every token account the wallet held
of that mint at that slot, `ata` returns the balance of the
wallet's canonical Associated Token Account only (derived from
`(wallet, token program, mint)`, with the token program selected
from the mint so Token-2022 mints resolve correctly). When a
wallet holds exactly one token account of the mint, both scopes
return the same value.


Available on Solana mainnet only. The request may also be sent
as a positional array `[wallet, mint, slot, scope]`, and `owner`
is accepted as an alias for `wallet`.
x-compute-units: 40
paramStructure: by-name
params:
- name: wallet
required: true
description: >-
Base-58 encoded pubkey of the wallet whose balance you want.
`owner` is accepted as an alias.
schema:
$ref: "./base-types.yaml#/components/schemas/Pubkey"
- name: mint
required: true
description: >-
Base-58 encoded pubkey of the token mint. SPL Token and
Token-2022 mints are both supported.
schema:
$ref: "./base-types.yaml#/components/schemas/Pubkey"
- name: slot
required: true
description: >-
The slot to reconstruct the balance at. There is no
"latest slot" default; omitting `slot` is an error.
schema:
type: integer
minimum: 0
- name: scope
required: false
description: >-
Which of the wallet's token accounts the balance covers.
`all` (default) sums every token account the wallet held of
that mint at that slot; `ata` returns the balance of the
wallet's canonical Associated Token Account only.
Case-sensitive.
schema:
type: string
enum:
- all
- ata
default: all
examples:
- name: getBalanceByOwnerAtSlot example
params:
- name: wallet
value: "FHX9fPAUVA1MxPme28f4eeVH81QVRHDWofa2V6FUJaiR"
- name: mint
value: "poLisWXnNRwC6oBu1vHiuKQzFjGL4XDSu4g9qjz9qVk"
- name: slot
value: 225000000
result:
name: Balance at slot
value:
wallet: "FHX9fPAUVA1MxPme28f4eeVH81QVRHDWofa2V6FUJaiR"
mint: "poLisWXnNRwC6oBu1vHiuKQzFjGL4XDSu4g9qjz9qVk"
isNative: false
balance: "38205.4"
balanceRaw: "3820540000000"
decimals: 8
slot: 225000000
result:
name: Balance at slot
description: >-
The wallet's total token balance for that mint at the
requested slot, with the slot the balance was computed at.
schema:
$ref: "./account.yaml#/components/schemas/GetBalanceByOwnerAtSlotResult"
errors:
- code: -32602
message: >-
Invalid params. Common causes include a missing or malformed
`wallet` / `mint` (each must be a 32-byte base58 pubkey), a
missing or non-integer `slot`, an unknown `scope` value
(only `all` and `ata` are accepted, case-sensitive), or a
mint that is not present in the index.
- code: -32600
message: >-
Unsupported method. Returned when the method is called
against a chain other than Solana mainnet.
- code: -32603
message: >-
Internal error. Retry the request; if it persists, contact
support.

getLargestAccounts:
name: getLargestAccounts
description: Returns the 20 largest accounts, by lamport balance.
Expand Down
3 changes: 3 additions & 0 deletions src/openrpc/chains/solana/solana.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ methods:
- $ref: ../_components/solana/methods.yaml#/components/methods/simulateBundle
- $ref: >-
../_components/solana/methods.yaml#/components/methods/getTokenAccountsByOwnerAtSlot
- $ref: >-
../_components/solana/methods.yaml#/components/methods/getBalanceByOwnerAtSlot
- $ref: ../_components/solana/methods.yaml#/components/methods/getHealth
- $ref: ../_components/solana/methods.yaml#/components/methods/sendTransaction
- $ref: ../_components/solana/methods.yaml#/components/methods/simulateTransaction
Expand Down Expand Up @@ -141,6 +143,7 @@ x-bot-ignore:
- getTokenAccounts
- getTokenAccounts_v2
- getTokenAccountsByOwnerAtSlot
- getBalanceByOwnerAtSlot
- getTransaction
- alchemy_getProgramAccounts
- alchemy_getTokenAccountsByDelegate
Expand Down
Loading