Skip to content

Commit

Permalink
Adding Epoch Snapshot (#7)
Browse files Browse the repository at this point in the history
Adding:
`EpochSnapshot`
`OperatorSnapshot`
`VaultOperatorDelegationSnapshot`

And all accompanying tests

---------

Co-authored-by: Evan Batsell <[email protected]>
  • Loading branch information
coachchucksol and ebatsell authored Nov 19, 2024
1 parent e26f7e1 commit 06fa0b2
Show file tree
Hide file tree
Showing 74 changed files with 6,793 additions and 410 deletions.
5 changes: 5 additions & 0 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[profile.default]
retries = { backoff = "exponential", count = 5, delay = "1s", jitter = true, max-delay = "10s" }
test-threads = "num-cpus"
threads-required = 1
fail-fast = false
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

176 changes: 176 additions & 0 deletions clients/js/jito_tip_router/accounts/epochSnapshot.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
/**
* This code was AUTOGENERATED using the kinobi library.
* Please DO NOT EDIT THIS FILE, instead use visitors
* to add features, then rerun kinobi to update it.
*
* @see https://github.com/kinobi-so/kinobi
*/

import {
assertAccountExists,
assertAccountsExist,
combineCodec,
decodeAccount,
fetchEncodedAccount,
fetchEncodedAccounts,
getAddressDecoder,
getAddressEncoder,
getArrayDecoder,
getArrayEncoder,
getStructDecoder,
getStructEncoder,
getU128Decoder,
getU128Encoder,
getU64Decoder,
getU64Encoder,
getU8Decoder,
getU8Encoder,
type Account,
type Address,
type Codec,
type Decoder,
type EncodedAccount,
type Encoder,
type FetchAccountConfig,
type FetchAccountsConfig,
type MaybeAccount,
type MaybeEncodedAccount,
} from '@solana/web3.js';
import {
getFeesDecoder,
getFeesEncoder,
type Fees,
type FeesArgs,
} from '../types';

export type EpochSnapshot = {
discriminator: bigint;
ncn: Address;
ncnEpoch: bigint;
bump: number;
slotCreated: bigint;
slotFinalized: bigint;
ncnFees: Fees;
operatorCount: bigint;
vaultCount: bigint;
operatorsRegistered: bigint;
validOperatorVaultDelegations: bigint;
stakeWeight: bigint;
reserved: Array<number>;
};

export type EpochSnapshotArgs = {
discriminator: number | bigint;
ncn: Address;
ncnEpoch: number | bigint;
bump: number;
slotCreated: number | bigint;
slotFinalized: number | bigint;
ncnFees: FeesArgs;
operatorCount: number | bigint;
vaultCount: number | bigint;
operatorsRegistered: number | bigint;
validOperatorVaultDelegations: number | bigint;
stakeWeight: number | bigint;
reserved: Array<number>;
};

export function getEpochSnapshotEncoder(): Encoder<EpochSnapshotArgs> {
return getStructEncoder([
['discriminator', getU64Encoder()],
['ncn', getAddressEncoder()],
['ncnEpoch', getU64Encoder()],
['bump', getU8Encoder()],
['slotCreated', getU64Encoder()],
['slotFinalized', getU64Encoder()],
['ncnFees', getFeesEncoder()],
['operatorCount', getU64Encoder()],
['vaultCount', getU64Encoder()],
['operatorsRegistered', getU64Encoder()],
['validOperatorVaultDelegations', getU64Encoder()],
['stakeWeight', getU128Encoder()],
['reserved', getArrayEncoder(getU8Encoder(), { size: 128 })],
]);
}

export function getEpochSnapshotDecoder(): Decoder<EpochSnapshot> {
return getStructDecoder([
['discriminator', getU64Decoder()],
['ncn', getAddressDecoder()],
['ncnEpoch', getU64Decoder()],
['bump', getU8Decoder()],
['slotCreated', getU64Decoder()],
['slotFinalized', getU64Decoder()],
['ncnFees', getFeesDecoder()],
['operatorCount', getU64Decoder()],
['vaultCount', getU64Decoder()],
['operatorsRegistered', getU64Decoder()],
['validOperatorVaultDelegations', getU64Decoder()],
['stakeWeight', getU128Decoder()],
['reserved', getArrayDecoder(getU8Decoder(), { size: 128 })],
]);
}

export function getEpochSnapshotCodec(): Codec<
EpochSnapshotArgs,
EpochSnapshot
> {
return combineCodec(getEpochSnapshotEncoder(), getEpochSnapshotDecoder());
}

export function decodeEpochSnapshot<TAddress extends string = string>(
encodedAccount: EncodedAccount<TAddress>
): Account<EpochSnapshot, TAddress>;
export function decodeEpochSnapshot<TAddress extends string = string>(
encodedAccount: MaybeEncodedAccount<TAddress>
): MaybeAccount<EpochSnapshot, TAddress>;
export function decodeEpochSnapshot<TAddress extends string = string>(
encodedAccount: EncodedAccount<TAddress> | MaybeEncodedAccount<TAddress>
): Account<EpochSnapshot, TAddress> | MaybeAccount<EpochSnapshot, TAddress> {
return decodeAccount(
encodedAccount as MaybeEncodedAccount<TAddress>,
getEpochSnapshotDecoder()
);
}

export async function fetchEpochSnapshot<TAddress extends string = string>(
rpc: Parameters<typeof fetchEncodedAccount>[0],
address: Address<TAddress>,
config?: FetchAccountConfig
): Promise<Account<EpochSnapshot, TAddress>> {
const maybeAccount = await fetchMaybeEpochSnapshot(rpc, address, config);
assertAccountExists(maybeAccount);
return maybeAccount;
}

export async function fetchMaybeEpochSnapshot<TAddress extends string = string>(
rpc: Parameters<typeof fetchEncodedAccount>[0],
address: Address<TAddress>,
config?: FetchAccountConfig
): Promise<MaybeAccount<EpochSnapshot, TAddress>> {
const maybeAccount = await fetchEncodedAccount(rpc, address, config);
return decodeEpochSnapshot(maybeAccount);
}

export async function fetchAllEpochSnapshot(
rpc: Parameters<typeof fetchEncodedAccounts>[0],
addresses: Array<Address>,
config?: FetchAccountsConfig
): Promise<Account<EpochSnapshot>[]> {
const maybeAccounts = await fetchAllMaybeEpochSnapshot(
rpc,
addresses,
config
);
assertAccountsExist(maybeAccounts);
return maybeAccounts;
}

export async function fetchAllMaybeEpochSnapshot(
rpc: Parameters<typeof fetchEncodedAccounts>[0],
addresses: Array<Address>,
config?: FetchAccountsConfig
): Promise<MaybeAccount<EpochSnapshot>[]> {
const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);
return maybeAccounts.map((maybeAccount) => decodeEpochSnapshot(maybeAccount));
}
2 changes: 2 additions & 0 deletions clients/js/jito_tip_router/accounts/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
* @see https://github.com/kinobi-so/kinobi
*/

export * from './epochSnapshot';
export * from './ncnConfig';
export * from './operatorSnapshot';
export * from './trackedMints';
export * from './weightTable';
Loading

0 comments on commit 06fa0b2

Please sign in to comment.