npm npm-downloads
code-style-prettier

@solana/rpc

This package contains utilities for creating objects that you can use to communicate with a Solana JSON RPC server. It can be used standalone, but it is also exported as part of the Solana JavaScript SDK @solana/web3.js@next.

Unless you plan to create a custom RPC interface, you can use the createSolanaRpc(clusterUrl) function to obtain a default implementation of the Solana JSON RPC API.

These types refine the base RpcTransport type. Each describes a transport that is specific in some way to a particular Solana cluster.

For instance, a RpcTransportDevnet is understood to communicate with a RPC server related to devnet, and as such might only be accepted for use as the transport of a RpcDevnet.

This is useful in cases where you need to make assertions about what capabilities a RPC offers. For example, RPC methods like requestAirdrop are not available on mainnet. You can use the ability to assert on the type of RPC transport at compile time to prevent calling unimplemented methods or presuming the existence of unavailable capabilities.

Given a ClusterUrl, this utility type will resolve to as specific a RpcTransport as possible.

function createCustomTransport<TClusterUrl extends ClusterUrl>(
clusterUrl: TClusterUrl,
): RpcTransportFromClusterUrl<TClusterUrl> {
/* ... */
}
const transport = createCustomTransport(testnet('http://api.testnet.solana.com'));
transport satisfies RpcTransportTestnet; // OK

These types refine the base Rpc type. Each describes a RPC that is specific in some way to a particular Solana cluster and a corpus of RPC methods.

This is useful in cases where you need to make assertions about the suitability of a RPC for a given purpose. For example, you might like to make it a type error to combine certain types with RPC belonging to certain clusters, at compile time.

async function getSpecialAccountInfo(
address: Address<'ReAL1111111111111111111111111111'>,
rpc: RpcMainnet,
): Promise<SpecialAccountInfo>;
async function getSpecialAccountInfo(
address: Address<'TeST1111111111111111111111111111'>,
rpc: RpcDevnet | RpcTestnet,
): Promise<SpecialAccountInfo>;
async function getSpecialAccountInfo(address: Address, rpc: Rpc): Promise<SpecialAccountInfo> {
/* ... */
}
const rpc = createSolanaRpc(devnet('https://api.devnet.solana.com'));
await getSpecialAccountInfo(address('ReAL1111111111111111111111111111'), rpc); // ERROR

Given a RpcTransport, this utility type will resolve to as specific a Rpc as possible.

function createCustomRpc<TRpcTransport extends RpcTransport>(
transport: TRpcTransport,
): RpcFromTransport<MyCustomRpcMethods, TRpcTransport> {
/* ... */
}
const transport = createDefaultRpcTransport({ url: mainnet('http://rpc.company') });
transport satisfies RpcTransportMainnet; // OK
const rpc = createCustomRpc(transport);
rpc satisfies RpcMainnet<MyCustomRpcMethods>; // OK

When you create Rpc instances with custom transports but otherwise the default RPC API behaviours, use this.

const myCustomRpc = createRpc({
api: createSolanaRpcApi(DEFAULT_RPC_CONFIG),
transport: myCustomTransport,
});

Creates a RpcTransport with some default behaviours.

The default behaviours include:

  • An automatically-set Solana-Client request header, containing the version of @solana/web3.js
  • Logic that coalesces multiple calls in the same runloop, for the same methods with the same arguments, into a single network request.

A config object with the following properties:

  • dispatcher_NODE_ONLY: An optional Undici.Dispatcher instance that governs how the networking stack should behave. This option is only relevant in Node applications. Consult the documentation for the various subclasses of Undici.Dispatcher, such as Agent, Client, and Pool, at https://undici.nodejs.org/#/docs/api/Client.
  • headers: An optional object where the keys are HTTP header names and the values are HTTP header values. This parameter is typed to disallow certain headers from being overwritten.
  • url: A ClusterUrl at which the RPC server can be contacted.

Creates a Rpc instance that exposes the Solana JSON RPC API given a cluster URL and some optional transport config. See createDefaultRpcTransport for the shape of the transport config.

Creates a Rpc instance that exposes the Solana JSON RPC API given the supplied RpcTransport.

Modules

<internal>

Type Aliases

GetAccountInfoApi
GetBalanceApi
GetBlockApi
GetBlockCommitmentApi
GetBlockHeightApi
GetBlockProductionApi
GetBlocksApi
GetBlocksWithLimitApi
GetBlockTimeApi
GetClusterNodesApi
GetEpochInfoApi
GetEpochScheduleApi
GetFeeForMessageApi
GetFirstAvailableBlockApi
GetGenesisHashApi
GetHealthApi
GetHighestSnapshotSlotApi
GetIdentityApi
GetInflationGovernorApi
GetInflationRateApi
GetInflationRewardApi
GetLargestAccountsApi
GetLatestBlockhashApi
GetLeaderScheduleApi
GetMaxRetransmitSlotApi
GetMaxShredInsertSlotApi
GetMinimumBalanceForRentExemptionApi
GetMultipleAccountsApi
GetProgramAccountsApi
GetRecentPerformanceSamplesApi
GetRecentPrioritizationFeesApi
GetSignaturesForAddressApi
GetSignatureStatusesApi
GetSlotApi
GetSlotLeaderApi
GetSlotLeadersApi
GetStakeMinimumDelegationApi
GetSupplyApi
GetTokenAccountBalanceApi
GetTokenAccountsByDelegateApi
GetTokenAccountsByOwnerApi
GetTokenLargestAccountsApi
GetTokenSupplyApi
GetTransactionApi
GetTransactionCountApi
GetVersionApi
GetVoteAccountsApi
IsBlockhashValidApi
MinimumLedgerSlotApi
PendingRpcRequest
RequestAirdropApi
Rpc
RpcApi
RpcApiConfig
RpcConfig
RpcDevnet
RpcFromTransport
RpcMainnet
RpcPlan
RpcSendOptions
RpcTestnet
RpcTransport
RpcTransportDevnet
RpcTransportFromClusterUrl
RpcTransportMainnet
RpcTransportTestnet
SendTransactionApi
SimulateTransactionApi
SolanaRpcApi
SolanaRpcApiDevnet
SolanaRpcApiFromTransport
SolanaRpcApiMainnet
SolanaRpcApiTestnet

Variables

DEFAULT_RPC_CONFIG

Functions

createDefaultRpcTransport
createJsonRpcApi
createRpc
createSolanaRpc
createSolanaRpcApi
createSolanaRpcFromTransport
isJsonRpcPayload