Skip to content

Commit

Permalink
Extract common AccountInfo data structures
Browse files Browse the repository at this point in the history
  • Loading branch information
mcintyre94 committed Aug 15, 2023
1 parent 7e87106 commit 63e18f6
Show file tree
Hide file tree
Showing 6 changed files with 113 additions and 260 deletions.
49 changes: 49 additions & 0 deletions packages/rpc-core/src/rpc-methods/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,55 @@ export type Base64EncodedZStdCompressedDataResponse = [Base64EncodedZStdCompress

export type Base58EncodedTransactionSignature = string & { readonly __base58EncodedSignature: unique symbol };

export type AccountInfoBase = Readonly<{
/** indicates if the account contains a program (and is strictly read-only) */
executable: boolean;
/** number of lamports assigned to this account */
lamports: LamportsUnsafeBeyond2Pow53Minus1;
/** pubkey of the program this account has been assigned to */
owner: Base58EncodedAddress;
/** the epoch at which this account will next owe rent */
rentEpoch: U64UnsafeBeyond2Pow53Minus1;
/** the data size of the account */
space: U64UnsafeBeyond2Pow53Minus1;
}>;

/** @deprecated */
export type AccountInfoWithBase58Bytes = Readonly<{
data: Base58EncodedBytes;
}>;

/** @deprecated */
export type AccountInfoWithBase58EncodedData = Readonly<{
data: Base58EncodedDataResponse;
}>;

export type AccountInfoWithBase64EncodedData = Readonly<{
data: Base64EncodedDataResponse;
}>;

export type AccountInfoWithBase64EncodedZStdCompressedData = Readonly<{
data: Base64EncodedZStdCompressedDataResponse;
}>;

export type AccountInfoWithJsonData = Readonly<{
data:
| Readonly<{
// Name of the program that owns this account.
program: string;
parsed: unknown;
space: U64UnsafeBeyond2Pow53Minus1;
}>
// If `jsonParsed` encoding is requested but a parser cannot be found for the given
// account the `data` field falls back to `base64`.
| Base64EncodedDataResponse;
}>;

export type AccountInfoWithPubkey<TAccount extends AccountInfoBase> = Readonly<{
account: TAccount;
pubkey: Base58EncodedAddress;
}>;

type TokenAmount = Readonly<{
amount: StringifiedBigInt;
decimals: number;
Expand Down
69 changes: 14 additions & 55 deletions packages/rpc-core/src/rpc-methods/getAccountInfo.ts
Original file line number Diff line number Diff line change
@@ -1,63 +1,22 @@
import { Base58EncodedAddress } from '@solana/addresses';

import {
Base58EncodedBytes,
Base58EncodedDataResponse,
Base64EncodedDataResponse,
Base64EncodedZStdCompressedDataResponse,
AccountInfoBase,
AccountInfoWithBase58Bytes,
AccountInfoWithBase58EncodedData,
AccountInfoWithBase64EncodedData,
AccountInfoWithBase64EncodedZStdCompressedData,
AccountInfoWithJsonData,
Commitment,
DataSlice,
LamportsUnsafeBeyond2Pow53Minus1,
RpcResponse,
Slot,
U64UnsafeBeyond2Pow53Minus1,
} from './common';

type GetAccountInfoApiResponseBase = RpcResponse<{
executable: boolean;
lamports: LamportsUnsafeBeyond2Pow53Minus1;
owner: Base58EncodedAddress;
rentEpoch: U64UnsafeBeyond2Pow53Minus1;
space: U64UnsafeBeyond2Pow53Minus1;
} | null>;
type GetAccountInfoApiResponseBase = RpcResponse<AccountInfoBase | null>;

type GetAccountInfoApiResponseWithDefaultData = Readonly<{
value: Readonly<{
data: Base58EncodedBytes;
}> | null;
}>;

type GetAccountInfoApiResponseWithBase58EncodedData_DEPRECATED = Readonly<{
value: Readonly<{
data: Base58EncodedDataResponse;
}> | null;
}>;

type GetAccountInfoApiResponseWithBase64EncodedData = Readonly<{
value: Readonly<{
data: Base64EncodedDataResponse;
}> | null;
}>;

type GetAccountInfoApiResponseWithBase64EncodedZStdCompressedData = Readonly<{
value: Readonly<{
data: Base64EncodedZStdCompressedDataResponse;
}> | null;
}>;

type GetAccountInfoApiResponseWithJsonData = Readonly<{
value: Readonly<{
data:
| Readonly<{
// Name of the program that owns this account.
program: string;
parsed: unknown;
space: U64UnsafeBeyond2Pow53Minus1;
}>
// If `jsonParsed` encoding is requested but a parser cannot be found for the given
// account the `data` field falls back to `base64`.
| Base64EncodedDataResponse;
}> | null;
type NestInRpcResponseOrNull<T> = Readonly<{
value: T | null;
}>;

type GetAccountInfoApiCommonConfig = Readonly<{
Expand All @@ -83,32 +42,32 @@ export interface GetAccountInfoApi {
Readonly<{
encoding: 'base64';
}>
): GetAccountInfoApiResponseBase & GetAccountInfoApiResponseWithBase64EncodedData;
): GetAccountInfoApiResponseBase & NestInRpcResponseOrNull<AccountInfoWithBase64EncodedData>;
getAccountInfo(
address: Base58EncodedAddress,
config: GetAccountInfoApiCommonConfig &
GetAccountInfoApiSliceableCommonConfig &
Readonly<{
encoding: 'base64+zstd';
}>
): GetAccountInfoApiResponseBase & GetAccountInfoApiResponseWithBase64EncodedZStdCompressedData;
): GetAccountInfoApiResponseBase & NestInRpcResponseOrNull<AccountInfoWithBase64EncodedZStdCompressedData>;
getAccountInfo(
address: Base58EncodedAddress,
config: GetAccountInfoApiCommonConfig &
Readonly<{
encoding: 'jsonParsed';
}>
): GetAccountInfoApiResponseBase & GetAccountInfoApiResponseWithJsonData;
): GetAccountInfoApiResponseBase & NestInRpcResponseOrNull<AccountInfoWithJsonData>;
getAccountInfo(
address: Base58EncodedAddress,
config: GetAccountInfoApiCommonConfig &
GetAccountInfoApiSliceableCommonConfig &
Readonly<{
encoding: 'base58';
}>
): GetAccountInfoApiResponseBase & GetAccountInfoApiResponseWithBase58EncodedData_DEPRECATED;
): GetAccountInfoApiResponseBase & NestInRpcResponseOrNull<AccountInfoWithBase58EncodedData>;
getAccountInfo(
address: Base58EncodedAddress,
config?: GetAccountInfoApiCommonConfig
): GetAccountInfoApiResponseBase & GetAccountInfoApiResponseWithDefaultData;
): GetAccountInfoApiResponseBase & NestInRpcResponseOrNull<AccountInfoWithBase58Bytes>;
}
62 changes: 11 additions & 51 deletions packages/rpc-core/src/rpc-methods/getMultipleAccounts.ts
Original file line number Diff line number Diff line change
@@ -1,54 +1,18 @@
import { Base58EncodedAddress } from '@solana/addresses';

import {
Base58EncodedDataResponse,
Base64EncodedDataResponse,
Base64EncodedZStdCompressedDataResponse,
AccountInfoBase,
AccountInfoWithBase58EncodedData,
AccountInfoWithBase64EncodedData,
AccountInfoWithBase64EncodedZStdCompressedData,
AccountInfoWithJsonData,
Commitment,
DataSlice,
LamportsUnsafeBeyond2Pow53Minus1,
RpcResponse,
Slot,
U64UnsafeBeyond2Pow53Minus1,
} from './common';

type GetMultipleAccountsApiResponseBase = {
/** indicates if the account contains a program (and is strictly read-only) */
executable: boolean;
/** number of lamports assigned to this account */
lamports: LamportsUnsafeBeyond2Pow53Minus1;
/** pubkey of the program this account has been assigned to */
owner: Base58EncodedAddress;
/** the epoch at which this account will next owe rent */
rentEpoch: U64UnsafeBeyond2Pow53Minus1;
/** the data size of the account */
space: U64UnsafeBeyond2Pow53Minus1;
} | null;

type GetMultipleAccountsApiResponseWithBase58EncodedData_DEPRECATED = Readonly<{
data: Base58EncodedDataResponse;
}>;

type GetMultipleAccountsApiResponseWithBase64EncodedData = Readonly<{
data: Base64EncodedDataResponse;
}>;

type GetMultipleAccountsApiResponseWithBase64EncodedZStdCompressedData = Readonly<{
data: Base64EncodedZStdCompressedDataResponse;
}>;

type GetMultipleAccountsApiResponseWithJsonData = Readonly<{
data:
| Readonly<{
/** Name of the program that owns this account. */
program: string;
parsed: unknown;
space: U64UnsafeBeyond2Pow53Minus1;
}>
// If `jsonParsed` encoding is requested but a parser cannot be found for the given
// account the `data` field falls back to `base64`.
| Base64EncodedDataResponse;
}>;
type GetMultipleAccountsApiResponseBase = AccountInfoBase | null;

type GetMultipleAccountsApiCommonConfig = Readonly<{
/** Defaults to `finalized` */
Expand All @@ -74,7 +38,7 @@ export interface GetMultipleAccountsApi {
Readonly<{
encoding: 'base64';
}>
): RpcResponse<(GetMultipleAccountsApiResponseBase & GetMultipleAccountsApiResponseWithBase64EncodedData)[]>;
): RpcResponse<(GetMultipleAccountsApiResponseBase & AccountInfoWithBase64EncodedData)[]>;
getMultipleAccounts(
/** An array of up to 100 Pubkeys to query */
addresses: Base58EncodedAddress[],
Expand All @@ -83,17 +47,15 @@ export interface GetMultipleAccountsApi {
Readonly<{
encoding: 'base64+zstd';
}>
): RpcResponse<
(GetMultipleAccountsApiResponseBase & GetMultipleAccountsApiResponseWithBase64EncodedZStdCompressedData)[]
>;
): RpcResponse<(GetMultipleAccountsApiResponseBase & AccountInfoWithBase64EncodedZStdCompressedData)[]>;
getMultipleAccounts(
/** An array of up to 100 Pubkeys to query */
addresses: Base58EncodedAddress[],
config: GetMultipleAccountsApiCommonConfig &
Readonly<{
encoding: 'jsonParsed';
}>
): RpcResponse<(GetMultipleAccountsApiResponseBase & GetMultipleAccountsApiResponseWithJsonData)[]>;
): RpcResponse<(GetMultipleAccountsApiResponseBase & AccountInfoWithJsonData)[]>;
getMultipleAccounts(
/** An array of up to 100 Pubkeys to query */
addresses: Base58EncodedAddress[],
Expand All @@ -102,12 +64,10 @@ export interface GetMultipleAccountsApi {
Readonly<{
encoding: 'base58';
}>
): RpcResponse<
(GetMultipleAccountsApiResponseBase & GetMultipleAccountsApiResponseWithBase58EncodedData_DEPRECATED)[]
>;
): RpcResponse<(GetMultipleAccountsApiResponseBase & AccountInfoWithBase58EncodedData)[]>;
getMultipleAccounts(
/** An array of up to 100 Pubkeys to query */
addresses: Base58EncodedAddress[],
config?: GetMultipleAccountsApiCommonConfig
): RpcResponse<(GetMultipleAccountsApiResponseBase & GetMultipleAccountsApiResponseWithBase64EncodedData)[]>;
): RpcResponse<(GetMultipleAccountsApiResponseBase & AccountInfoWithBase64EncodedData)[]>;
}
Loading

0 comments on commit 63e18f6

Please sign in to comment.