diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 254c7291..00000000 --- a/.prettierrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "semi": true, - "singleQuote": true, - "trailingComma": "es5", - "useTabs": false, - "tabWidth": 2, - "arrowParens": "always", - "printWidth": 80 -} diff --git a/Makefile b/Makefile index 047d2ffa..3f0feb14 100644 --- a/Makefile +++ b/Makefile @@ -82,7 +82,7 @@ stop-test-validator: pkill -f solana-test-validator generate-clients: - pnpm generate:clients $(ARGS) + pnpm codama run --all $(ARGS) generate-idl-%: cargo run --manifest-path $(call make-path,$*)/Cargo.toml --features codama --bin generate-idl $(ARGS) diff --git a/clients/js/.eslintrc.cjs b/clients/js/.eslintrc.cjs index ec6bf1e1..5b23a4e7 100644 --- a/clients/js/.eslintrc.cjs +++ b/clients/js/.eslintrc.cjs @@ -1,17 +1,17 @@ module.exports = { - extends: ['@solana/eslint-config-solana'], - ignorePatterns: ['.eslintrc.cjs', 'tsup.config.ts', 'env-shim.ts'], - parserOptions: { - project: 'tsconfig.json', - tsconfigRootDir: __dirname, - sourceType: 'module', - }, - rules: { - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/sort-type-constituents': 'off', - 'prefer-destructuring': 'off', - 'simple-import-sort/imports': 'off', - 'sort-keys-fix/sort-keys-fix': 'off', - 'typescript-sort-keys/interface': 'off', - }, + extends: ['@solana/eslint-config-solana'], + ignorePatterns: ['.eslintrc.cjs', 'tsup.config.ts', 'env-shim.ts'], + parserOptions: { + project: 'tsconfig.json', + tsconfigRootDir: __dirname, + sourceType: 'module', + }, + rules: { + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/sort-type-constituents': 'off', + 'prefer-destructuring': 'off', + 'simple-import-sort/imports': 'off', + 'sort-keys-fix/sort-keys-fix': 'off', + 'typescript-sort-keys/interface': 'off', + }, }; diff --git a/clients/js/.prettierignore b/clients/js/.prettierignore new file mode 100644 index 00000000..4150114b --- /dev/null +++ b/clients/js/.prettierignore @@ -0,0 +1 @@ +src/generated/** diff --git a/clients/js/.prettierrc.json b/clients/js/.prettierrc.json deleted file mode 100644 index 254c7291..00000000 --- a/clients/js/.prettierrc.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "semi": true, - "singleQuote": true, - "trailingComma": "es5", - "useTabs": false, - "tabWidth": 2, - "arrowParens": "always", - "printWidth": 80 -} diff --git a/clients/js/package.json b/clients/js/package.json index b6f525c2..9ed22a4d 100644 --- a/clients/js/package.json +++ b/clients/js/package.json @@ -1,66 +1,65 @@ { - "name": "@solana-program/stake", - "version": "0.5.0", - "description": "JavaScript client for the Stake program", - "sideEffects": false, - "module": "./dist/src/index.mjs", - "main": "./dist/src/index.js", - "types": "./dist/types/index.d.ts", - "type": "commonjs", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "import": "./dist/src/index.mjs", - "require": "./dist/src/index.js" - } - }, - "files": [ - "./dist/src", - "./dist/types" - ], - "scripts": { - "build": "rimraf dist && tsup && tsc -p ./tsconfig.declarations.json", - "build:docs": "typedoc", - "test": "ava", - "lint": "eslint --ext js,ts,tsx src", - "lint:fix": "eslint --fix --ext js,ts,tsx src", - "format": "prettier --check src test", - "format:fix": "prettier --write src test", - "prepublishOnly": "pnpm build" - }, - "publishConfig": { - "access": "public", - "registry": "https://registry.npmjs.org" - }, - "license": "MIT", - "peerDependencies": { - "@solana/kit": "^6.0" - }, - "devDependencies": { - "@ava/typescript": "^6.0.0", - "@solana/eslint-config-solana": "^3.0.3", - "@solana/kit": "^6.0", - "@types/node": "^25", - "@typescript-eslint/eslint-plugin": "^7.16.1", - "@typescript-eslint/parser": "^7.16.1", - "ava": "^6.1.3", - "eslint": "^8.57.0", - "prettier": "^3.3.3", - "rimraf": "^6.0.1", - "tsup": "^8.1.2", - "typedoc": "^0.28.14", - "typescript": "^5.5.3" - }, - "ava": { - "nodeArguments": [ - "--no-warnings" + "name": "@solana-program/stake", + "version": "0.5.0", + "description": "JavaScript client for the Stake program", + "sideEffects": false, + "module": "./dist/src/index.mjs", + "main": "./dist/src/index.js", + "types": "./dist/types/index.d.ts", + "type": "commonjs", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "import": "./dist/src/index.mjs", + "require": "./dist/src/index.js" + } + }, + "files": [ + "./dist/src", + "./dist/types" ], - "typescript": { - "compile": false, - "rewritePaths": { - "test/": "dist/test/" - } + "scripts": { + "build": "rimraf dist && tsup && tsc -p ./tsconfig.declarations.json", + "build:docs": "typedoc", + "test": "ava", + "lint": "eslint --ext js,ts,tsx src", + "lint:fix": "eslint --fix --ext js,ts,tsx src", + "format": "prettier --check src test", + "format:fix": "prettier --write src test", + "prepublishOnly": "pnpm build" + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org" + }, + "license": "MIT", + "peerDependencies": { + "@solana/kit": "^6.0" + }, + "devDependencies": { + "@ava/typescript": "^6.0.0", + "@solana/eslint-config-solana": "^3.0.3", + "@solana/kit": "^6.0", + "@types/node": "^25", + "@typescript-eslint/eslint-plugin": "^7.16.1", + "@typescript-eslint/parser": "^7.16.1", + "ava": "^6.1.3", + "eslint": "^8.57.0", + "prettier": "^3.8.1", + "rimraf": "^6.0.1", + "tsup": "^8.1.2", + "typedoc": "^0.28.14", + "typescript": "^5.9.3" + }, + "ava": { + "nodeArguments": [ + "--no-warnings" + ], + "typescript": { + "compile": false, + "rewritePaths": { + "test/": "dist/test/" + } + } } - }, - "packageManager": "pnpm@9.1.0" } diff --git a/clients/js/pnpm-lock.yaml b/clients/js/pnpm-lock.yaml index 787f8c04..b74cdb87 100644 --- a/clients/js/pnpm-lock.yaml +++ b/clients/js/pnpm-lock.yaml @@ -33,8 +33,8 @@ importers: specifier: ^8.57.0 version: 8.57.1 prettier: - specifier: ^3.3.3 - version: 3.6.2 + specifier: ^3.8.1 + version: 3.8.1 rimraf: specifier: ^6.0.1 version: 6.1.2 @@ -45,7 +45,7 @@ importers: specifier: ^0.28.14 version: 0.28.16(typescript@5.9.3) typescript: - specifier: ^5.5.3 + specifier: ^5.9.3 version: 5.9.3 packages: @@ -1829,8 +1829,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + prettier@3.8.1: + resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} engines: {node: '>=14'} hasBin: true @@ -3955,7 +3955,7 @@ snapshots: prelude-ls@1.2.1: {} - prettier@3.6.2: {} + prettier@3.8.1: {} pretty-ms@9.3.0: dependencies: diff --git a/clients/js/src/generated/accounts/stakeStateAccount.ts b/clients/js/src/generated/accounts/stakeStateAccount.ts index b67947a2..cb814e4d 100644 --- a/clients/js/src/generated/accounts/stakeStateAccount.ts +++ b/clients/js/src/generated/accounts/stakeStateAccount.ts @@ -7,113 +7,92 @@ */ import { - assertAccountExists, - assertAccountsExist, - combineCodec, - decodeAccount, - fetchEncodedAccount, - fetchEncodedAccounts, - getStructDecoder, - getStructEncoder, - type Account, - type Address, - type Codec, - type Decoder, - type EncodedAccount, - type Encoder, - type FetchAccountConfig, - type FetchAccountsConfig, - type MaybeAccount, - type MaybeEncodedAccount, + assertAccountExists, + assertAccountsExist, + combineCodec, + decodeAccount, + fetchEncodedAccount, + fetchEncodedAccounts, + getStructDecoder, + getStructEncoder, + type Account, + type Address, + type Codec, + type Decoder, + type EncodedAccount, + type Encoder, + type FetchAccountConfig, + type FetchAccountsConfig, + type MaybeAccount, + type MaybeEncodedAccount, } from '@solana/kit'; -import { - getStakeStateV2Decoder, - getStakeStateV2Encoder, - type StakeStateV2, - type StakeStateV2Args, -} from '../types'; +import { getStakeStateV2Decoder, getStakeStateV2Encoder, type StakeStateV2, type StakeStateV2Args } from '../types'; export type StakeStateAccount = { state: StakeStateV2 }; export type StakeStateAccountArgs = { state: StakeStateV2Args }; +/** Gets the encoder for {@link StakeStateAccountArgs} account data. */ export function getStakeStateAccountEncoder(): Encoder { - return getStructEncoder([['state', getStakeStateV2Encoder()]]); + return getStructEncoder([['state', getStakeStateV2Encoder()]]); } +/** Gets the decoder for {@link StakeStateAccount} account data. */ export function getStakeStateAccountDecoder(): Decoder { - return getStructDecoder([['state', getStakeStateV2Decoder()]]); + return getStructDecoder([['state', getStakeStateV2Decoder()]]); } -export function getStakeStateAccountCodec(): Codec< - StakeStateAccountArgs, - StakeStateAccount -> { - return combineCodec( - getStakeStateAccountEncoder(), - getStakeStateAccountDecoder() - ); +/** Gets the codec for {@link StakeStateAccount} account data. */ +export function getStakeStateAccountCodec(): Codec { + return combineCodec(getStakeStateAccountEncoder(), getStakeStateAccountDecoder()); } export function decodeStakeStateAccount( - encodedAccount: EncodedAccount + encodedAccount: EncodedAccount, ): Account; export function decodeStakeStateAccount( - encodedAccount: MaybeEncodedAccount + encodedAccount: MaybeEncodedAccount, ): MaybeAccount; export function decodeStakeStateAccount( - encodedAccount: EncodedAccount | MaybeEncodedAccount -): - | Account - | MaybeAccount { - return decodeAccount( - encodedAccount as MaybeEncodedAccount, - getStakeStateAccountDecoder() - ); + encodedAccount: EncodedAccount | MaybeEncodedAccount, +): Account | MaybeAccount { + return decodeAccount(encodedAccount as MaybeEncodedAccount, getStakeStateAccountDecoder()); } export async function fetchStakeStateAccount( - rpc: Parameters[0], - address: Address, - config?: FetchAccountConfig + rpc: Parameters[0], + address: Address, + config?: FetchAccountConfig, ): Promise> { - const maybeAccount = await fetchMaybeStakeStateAccount(rpc, address, config); - assertAccountExists(maybeAccount); - return maybeAccount; + const maybeAccount = await fetchMaybeStakeStateAccount(rpc, address, config); + assertAccountExists(maybeAccount); + return maybeAccount; } -export async function fetchMaybeStakeStateAccount< - TAddress extends string = string, ->( - rpc: Parameters[0], - address: Address, - config?: FetchAccountConfig +export async function fetchMaybeStakeStateAccount( + rpc: Parameters[0], + address: Address, + config?: FetchAccountConfig, ): Promise> { - const maybeAccount = await fetchEncodedAccount(rpc, address, config); - return decodeStakeStateAccount(maybeAccount); + const maybeAccount = await fetchEncodedAccount(rpc, address, config); + return decodeStakeStateAccount(maybeAccount); } export async function fetchAllStakeStateAccount( - rpc: Parameters[0], - addresses: Array
, - config?: FetchAccountsConfig + rpc: Parameters[0], + addresses: Array
, + config?: FetchAccountsConfig, ): Promise[]> { - const maybeAccounts = await fetchAllMaybeStakeStateAccount( - rpc, - addresses, - config - ); - assertAccountsExist(maybeAccounts); - return maybeAccounts; + const maybeAccounts = await fetchAllMaybeStakeStateAccount(rpc, addresses, config); + assertAccountsExist(maybeAccounts); + return maybeAccounts; } export async function fetchAllMaybeStakeStateAccount( - rpc: Parameters[0], - addresses: Array
, - config?: FetchAccountsConfig + rpc: Parameters[0], + addresses: Array
, + config?: FetchAccountsConfig, ): Promise[]> { - const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config); - return maybeAccounts.map((maybeAccount) => - decodeStakeStateAccount(maybeAccount) - ); + const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config); + return maybeAccounts.map(maybeAccount => decodeStakeStateAccount(maybeAccount)); } diff --git a/clients/js/src/generated/errors/stake.ts b/clients/js/src/generated/errors/stake.ts index 5483e474..4de14fc8 100644 --- a/clients/js/src/generated/errors/stake.ts +++ b/clients/js/src/generated/errors/stake.ts @@ -7,10 +7,10 @@ */ import { - isProgramError, - type Address, - type SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM, - type SolanaError, + isProgramError, + type Address, + type SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM, + type SolanaError, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; @@ -33,67 +33,60 @@ export const STAKE_ERROR__REDELEGATED_STAKE_MUST_FULLY_ACTIVATE_BEFORE_DEACTIVAT export const STAKE_ERROR__EPOCH_REWARDS_ACTIVE = 0x10; // 16 export type StakeError = - | typeof STAKE_ERROR__ALREADY_DEACTIVATED - | typeof STAKE_ERROR__CUSTODIAN_MISSING - | typeof STAKE_ERROR__CUSTODIAN_SIGNATURE_MISSING - | typeof STAKE_ERROR__EPOCH_REWARDS_ACTIVE - | typeof STAKE_ERROR__INSUFFICIENT_DELEGATION - | typeof STAKE_ERROR__INSUFFICIENT_REFERENCE_VOTES - | typeof STAKE_ERROR__INSUFFICIENT_STAKE - | typeof STAKE_ERROR__LOCKUP_IN_FORCE - | typeof STAKE_ERROR__MERGE_MISMATCH - | typeof STAKE_ERROR__MERGE_TRANSIENT_STAKE - | typeof STAKE_ERROR__MINIMUM_DELINQUENT_EPOCHS_FOR_DEACTIVATION_NOT_MET - | typeof STAKE_ERROR__NO_CREDITS_TO_REDEEM - | typeof STAKE_ERROR__REDELEGATED_STAKE_MUST_FULLY_ACTIVATE_BEFORE_DEACTIVATION_IS_PERMITTED - | typeof STAKE_ERROR__REDELEGATE_TO_SAME_VOTE_ACCOUNT - | typeof STAKE_ERROR__REDELEGATE_TRANSIENT_OR_INACTIVE_STAKE - | typeof STAKE_ERROR__TOO_SOON_TO_REDELEGATE - | typeof STAKE_ERROR__VOTE_ADDRESS_MISMATCH; + | typeof STAKE_ERROR__ALREADY_DEACTIVATED + | typeof STAKE_ERROR__CUSTODIAN_MISSING + | typeof STAKE_ERROR__CUSTODIAN_SIGNATURE_MISSING + | typeof STAKE_ERROR__EPOCH_REWARDS_ACTIVE + | typeof STAKE_ERROR__INSUFFICIENT_DELEGATION + | typeof STAKE_ERROR__INSUFFICIENT_REFERENCE_VOTES + | typeof STAKE_ERROR__INSUFFICIENT_STAKE + | typeof STAKE_ERROR__LOCKUP_IN_FORCE + | typeof STAKE_ERROR__MERGE_MISMATCH + | typeof STAKE_ERROR__MERGE_TRANSIENT_STAKE + | typeof STAKE_ERROR__MINIMUM_DELINQUENT_EPOCHS_FOR_DEACTIVATION_NOT_MET + | typeof STAKE_ERROR__NO_CREDITS_TO_REDEEM + | typeof STAKE_ERROR__REDELEGATED_STAKE_MUST_FULLY_ACTIVATE_BEFORE_DEACTIVATION_IS_PERMITTED + | typeof STAKE_ERROR__REDELEGATE_TO_SAME_VOTE_ACCOUNT + | typeof STAKE_ERROR__REDELEGATE_TRANSIENT_OR_INACTIVE_STAKE + | typeof STAKE_ERROR__TOO_SOON_TO_REDELEGATE + | typeof STAKE_ERROR__VOTE_ADDRESS_MISMATCH; let stakeErrorMessages: Record | undefined; if (process.env.NODE_ENV !== 'production') { - stakeErrorMessages = { - [STAKE_ERROR__ALREADY_DEACTIVATED]: `Stake already deactivated`, - [STAKE_ERROR__CUSTODIAN_MISSING]: `Custodian address not present`, - [STAKE_ERROR__CUSTODIAN_SIGNATURE_MISSING]: `Custodian signature not present`, - [STAKE_ERROR__EPOCH_REWARDS_ACTIVE]: `Stake action is not permitted while the epoch rewards period is active`, - [STAKE_ERROR__INSUFFICIENT_DELEGATION]: `Delegation amount is less than the minimum`, - [STAKE_ERROR__INSUFFICIENT_REFERENCE_VOTES]: `Insufficient voting activity in the reference vote account`, - [STAKE_ERROR__INSUFFICIENT_STAKE]: `Split amount is more than is staked`, - [STAKE_ERROR__LOCKUP_IN_FORCE]: `Lockup has not yet expired`, - [STAKE_ERROR__MERGE_MISMATCH]: `Stake account merge failed due to different authority, lockups or state`, - [STAKE_ERROR__MERGE_TRANSIENT_STAKE]: `Stake account with transient stake cannot be merged`, - [STAKE_ERROR__MINIMUM_DELINQUENT_EPOCHS_FOR_DEACTIVATION_NOT_MET]: `Stake account has not been delinquent for the minimum epochs required for deactivation`, - [STAKE_ERROR__NO_CREDITS_TO_REDEEM]: `Not enough credits to redeem`, - [STAKE_ERROR__REDELEGATED_STAKE_MUST_FULLY_ACTIVATE_BEFORE_DEACTIVATION_IS_PERMITTED]: `Redelegated stake must be fully activated before deactivation`, - [STAKE_ERROR__REDELEGATE_TO_SAME_VOTE_ACCOUNT]: `Stake redelegation to the same vote account is not permitted`, - [STAKE_ERROR__REDELEGATE_TRANSIENT_OR_INACTIVE_STAKE]: `Stake account with transient or inactive stake cannot be redelegated`, - [STAKE_ERROR__TOO_SOON_TO_REDELEGATE]: `One re-delegation permitted per epoch`, - [STAKE_ERROR__VOTE_ADDRESS_MISMATCH]: `Stake account is not delegated to the provided vote account`, - }; + stakeErrorMessages = { + [STAKE_ERROR__ALREADY_DEACTIVATED]: `Stake already deactivated`, + [STAKE_ERROR__CUSTODIAN_MISSING]: `Custodian address not present`, + [STAKE_ERROR__CUSTODIAN_SIGNATURE_MISSING]: `Custodian signature not present`, + [STAKE_ERROR__EPOCH_REWARDS_ACTIVE]: `Stake action is not permitted while the epoch rewards period is active`, + [STAKE_ERROR__INSUFFICIENT_DELEGATION]: `Delegation amount is less than the minimum`, + [STAKE_ERROR__INSUFFICIENT_REFERENCE_VOTES]: `Insufficient voting activity in the reference vote account`, + [STAKE_ERROR__INSUFFICIENT_STAKE]: `Split amount is more than is staked`, + [STAKE_ERROR__LOCKUP_IN_FORCE]: `Lockup has not yet expired`, + [STAKE_ERROR__MERGE_MISMATCH]: `Stake account merge failed due to different authority, lockups or state`, + [STAKE_ERROR__MERGE_TRANSIENT_STAKE]: `Stake account with transient stake cannot be merged`, + [STAKE_ERROR__MINIMUM_DELINQUENT_EPOCHS_FOR_DEACTIVATION_NOT_MET]: `Stake account has not been delinquent for the minimum epochs required for deactivation`, + [STAKE_ERROR__NO_CREDITS_TO_REDEEM]: `Not enough credits to redeem`, + [STAKE_ERROR__REDELEGATED_STAKE_MUST_FULLY_ACTIVATE_BEFORE_DEACTIVATION_IS_PERMITTED]: `Redelegated stake must be fully activated before deactivation`, + [STAKE_ERROR__REDELEGATE_TO_SAME_VOTE_ACCOUNT]: `Stake redelegation to the same vote account is not permitted`, + [STAKE_ERROR__REDELEGATE_TRANSIENT_OR_INACTIVE_STAKE]: `Stake account with transient or inactive stake cannot be redelegated`, + [STAKE_ERROR__TOO_SOON_TO_REDELEGATE]: `One re-delegation permitted per epoch`, + [STAKE_ERROR__VOTE_ADDRESS_MISMATCH]: `Stake account is not delegated to the provided vote account`, + }; } export function getStakeErrorMessage(code: StakeError): string { - if (process.env.NODE_ENV !== 'production') { - return (stakeErrorMessages as Record)[code]; - } + if (process.env.NODE_ENV !== 'production') { + return (stakeErrorMessages as Record)[code]; + } - return 'Error message not available in production bundles.'; + return 'Error message not available in production bundles.'; } export function isStakeError( - error: unknown, - transactionMessage: { - instructions: Record; - }, - code?: TProgramErrorCode + error: unknown, + transactionMessage: { instructions: Record }, + code?: TProgramErrorCode, ): error is SolanaError & - Readonly<{ context: Readonly<{ code: TProgramErrorCode }> }> { - return isProgramError( - error, - transactionMessage, - STAKE_PROGRAM_ADDRESS, - code - ); + Readonly<{ context: Readonly<{ code: TProgramErrorCode }> }> { + return isProgramError(error, transactionMessage, STAKE_PROGRAM_ADDRESS, code); } diff --git a/clients/js/src/generated/instructions/authorize.ts b/clients/js/src/generated/instructions/authorize.ts index 4411210b..c56c8614 100644 --- a/clients/js/src/generated/instructions/authorize.ts +++ b/clients/js/src/generated/instructions/authorize.ts @@ -7,259 +7,222 @@ */ import { - combineCodec, - getAddressDecoder, - getAddressEncoder, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - transformEncoder, - type AccountMeta, - type AccountSignerMeta, - type Address, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type ReadonlyAccount, - type ReadonlySignerAccount, - type ReadonlyUint8Array, - type TransactionSigner, - type WritableAccount, + combineCodec, + getAddressDecoder, + getAddressEncoder, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlySignerAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; import { - getStakeAuthorizeDecoder, - getStakeAuthorizeEncoder, - type StakeAuthorize, - type StakeAuthorizeArgs, + getStakeAuthorizeDecoder, + getStakeAuthorizeEncoder, + type StakeAuthorize, + type StakeAuthorizeArgs, } from '../types'; export const AUTHORIZE_DISCRIMINATOR = 1; export function getAuthorizeDiscriminatorBytes() { - return getU32Encoder().encode(AUTHORIZE_DISCRIMINATOR); + return getU32Encoder().encode(AUTHORIZE_DISCRIMINATOR); } export type AuthorizeInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountStake extends string | AccountMeta = string, - TAccountClockSysvar extends - | string - | AccountMeta = 'SysvarC1ock11111111111111111111111111111111', - TAccountAuthority extends string | AccountMeta = string, - TAccountLockupAuthority extends - | string - | AccountMeta - | undefined = undefined, - TRemainingAccounts extends readonly AccountMeta[] = [], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string | AccountMeta = string, + TAccountClockSysvar extends string | AccountMeta = 'SysvarC1ock11111111111111111111111111111111', + TAccountAuthority extends string | AccountMeta = string, + TAccountLockupAuthority extends string | AccountMeta | undefined = undefined, + TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & - InstructionWithData & - InstructionWithAccounts< - [ - TAccountStake extends string - ? WritableAccount - : TAccountStake, - TAccountClockSysvar extends string - ? ReadonlyAccount - : TAccountClockSysvar, - TAccountAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountAuthority, - ...(TAccountLockupAuthority extends undefined - ? [] - : [ - TAccountLockupAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountLockupAuthority, - ]), - ...TRemainingAccounts, - ] - >; - -export type AuthorizeInstructionData = { - discriminator: number; - arg0: Address; - arg1: StakeAuthorize; -}; - -export type AuthorizeInstructionDataArgs = { - arg0: Address; - arg1: StakeAuthorizeArgs; -}; + InstructionWithData & + InstructionWithAccounts< + [ + TAccountStake extends string ? WritableAccount : TAccountStake, + TAccountClockSysvar extends string ? ReadonlyAccount : TAccountClockSysvar, + TAccountAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountAuthority, + ...(TAccountLockupAuthority extends undefined + ? [] + : [ + TAccountLockupAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountLockupAuthority, + ]), + ...TRemainingAccounts, + ] + >; + +export type AuthorizeInstructionData = { discriminator: number; arg0: Address; arg1: StakeAuthorize }; + +export type AuthorizeInstructionDataArgs = { arg0: Address; arg1: StakeAuthorizeArgs }; export function getAuthorizeInstructionDataEncoder(): FixedSizeEncoder { - return transformEncoder( - getStructEncoder([ - ['discriminator', getU32Encoder()], - ['arg0', getAddressEncoder()], - ['arg1', getStakeAuthorizeEncoder()], - ]), - (value) => ({ ...value, discriminator: AUTHORIZE_DISCRIMINATOR }) - ); + return transformEncoder( + getStructEncoder([ + ['discriminator', getU32Encoder()], + ['arg0', getAddressEncoder()], + ['arg1', getStakeAuthorizeEncoder()], + ]), + value => ({ ...value, discriminator: AUTHORIZE_DISCRIMINATOR }), + ); } export function getAuthorizeInstructionDataDecoder(): FixedSizeDecoder { - return getStructDecoder([ - ['discriminator', getU32Decoder()], - ['arg0', getAddressDecoder()], - ['arg1', getStakeAuthorizeDecoder()], - ]); + return getStructDecoder([ + ['discriminator', getU32Decoder()], + ['arg0', getAddressDecoder()], + ['arg1', getStakeAuthorizeDecoder()], + ]); } export function getAuthorizeInstructionDataCodec(): FixedSizeCodec< - AuthorizeInstructionDataArgs, - AuthorizeInstructionData + AuthorizeInstructionDataArgs, + AuthorizeInstructionData > { - return combineCodec( - getAuthorizeInstructionDataEncoder(), - getAuthorizeInstructionDataDecoder() - ); + return combineCodec(getAuthorizeInstructionDataEncoder(), getAuthorizeInstructionDataDecoder()); } export type AuthorizeInput< - TAccountStake extends string = string, - TAccountClockSysvar extends string = string, - TAccountAuthority extends string = string, - TAccountLockupAuthority extends string = string, + TAccountStake extends string = string, + TAccountClockSysvar extends string = string, + TAccountAuthority extends string = string, + TAccountLockupAuthority extends string = string, > = { - /** Stake account to be updated */ - stake: Address; - /** Clock sysvar */ - clockSysvar?: Address; - /** The stake or withdraw authority */ - authority: TransactionSigner; - /** Lockup authority, if updating `StakeAuthorize::Withdrawer` before lockup expiration */ - lockupAuthority?: TransactionSigner; - arg0: AuthorizeInstructionDataArgs['arg0']; - arg1: AuthorizeInstructionDataArgs['arg1']; + /** Stake account to be updated */ + stake: Address; + /** Clock sysvar */ + clockSysvar?: Address; + /** The stake or withdraw authority */ + authority: TransactionSigner; + /** Lockup authority, if updating `StakeAuthorize::Withdrawer` before lockup expiration */ + lockupAuthority?: TransactionSigner; + arg0: AuthorizeInstructionDataArgs['arg0']; + arg1: AuthorizeInstructionDataArgs['arg1']; }; export function getAuthorizeInstruction< - TAccountStake extends string, - TAccountClockSysvar extends string, - TAccountAuthority extends string, - TAccountLockupAuthority extends string, - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string, + TAccountClockSysvar extends string, + TAccountAuthority extends string, + TAccountLockupAuthority extends string, + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, >( - input: AuthorizeInput< - TAccountStake, - TAccountClockSysvar, - TAccountAuthority, - TAccountLockupAuthority - >, - config?: { programAddress?: TProgramAddress } + input: AuthorizeInput, + config?: { programAddress?: TProgramAddress }, ): AuthorizeInstruction< - TProgramAddress, - TAccountStake, - TAccountClockSysvar, - TAccountAuthority, - TAccountLockupAuthority -> { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - - // Original accounts. - const originalAccounts = { - stake: { value: input.stake ?? null, isWritable: true }, - clockSysvar: { value: input.clockSysvar ?? null, isWritable: false }, - authority: { value: input.authority ?? null, isWritable: false }, - lockupAuthority: { - value: input.lockupAuthority ?? null, - isWritable: false, - }, - }; - const accounts = originalAccounts as Record< - keyof typeof originalAccounts, - ResolvedAccount - >; - - // Original args. - const args = { ...input }; - - // Resolve default values. - if (!accounts.clockSysvar.value) { - accounts.clockSysvar.value = - 'SysvarC1ock11111111111111111111111111111111' as Address<'SysvarC1ock11111111111111111111111111111111'>; - } - - const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); - return Object.freeze({ - accounts: [ - getAccountMeta(accounts.stake), - getAccountMeta(accounts.clockSysvar), - getAccountMeta(accounts.authority), - getAccountMeta(accounts.lockupAuthority), - ].filter((x: T | undefined): x is T => x !== undefined), - data: getAuthorizeInstructionDataEncoder().encode( - args as AuthorizeInstructionDataArgs - ), - programAddress, - } as AuthorizeInstruction< TProgramAddress, TAccountStake, TAccountClockSysvar, TAccountAuthority, TAccountLockupAuthority - >); +> { + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + stake: { value: input.stake ?? null, isWritable: true }, + clockSysvar: { value: input.clockSysvar ?? null, isWritable: false }, + authority: { value: input.authority ?? null, isWritable: false }, + lockupAuthority: { value: input.lockupAuthority ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + // Resolve default values. + if (!accounts.clockSysvar.value) { + accounts.clockSysvar.value = + 'SysvarC1ock11111111111111111111111111111111' as Address<'SysvarC1ock11111111111111111111111111111111'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); + return Object.freeze({ + accounts: [ + getAccountMeta(accounts.stake), + getAccountMeta(accounts.clockSysvar), + getAccountMeta(accounts.authority), + getAccountMeta(accounts.lockupAuthority), + ].filter((x: T | undefined): x is T => x !== undefined), + data: getAuthorizeInstructionDataEncoder().encode(args as AuthorizeInstructionDataArgs), + programAddress, + } as AuthorizeInstruction< + TProgramAddress, + TAccountStake, + TAccountClockSysvar, + TAccountAuthority, + TAccountLockupAuthority + >); } export type ParsedAuthorizeInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { - programAddress: Address; - accounts: { - /** Stake account to be updated */ - stake: TAccountMetas[0]; - /** Clock sysvar */ - clockSysvar: TAccountMetas[1]; - /** The stake or withdraw authority */ - authority: TAccountMetas[2]; - /** Lockup authority, if updating `StakeAuthorize::Withdrawer` before lockup expiration */ - lockupAuthority?: TAccountMetas[3] | undefined; - }; - data: AuthorizeInstructionData; + programAddress: Address; + accounts: { + /** Stake account to be updated */ + stake: TAccountMetas[0]; + /** Clock sysvar */ + clockSysvar: TAccountMetas[1]; + /** The stake or withdraw authority */ + authority: TAccountMetas[2]; + /** Lockup authority, if updating `StakeAuthorize::Withdrawer` before lockup expiration */ + lockupAuthority?: TAccountMetas[3] | undefined; + }; + data: AuthorizeInstructionData; }; -export function parseAuthorizeInstruction< - TProgram extends string, - TAccountMetas extends readonly AccountMeta[], ->( - instruction: Instruction & - InstructionWithAccounts & - InstructionWithData +export function parseAuthorizeInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, ): ParsedAuthorizeInstruction { - if (instruction.accounts.length < 3) { - // TODO: Coded error. - throw new Error('Not enough accounts'); - } - let accountIndex = 0; - const getNextAccount = () => { - const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; - accountIndex += 1; - return accountMeta; - }; - let optionalAccountsRemaining = instruction.accounts.length - 3; - const getNextOptionalAccount = () => { - if (optionalAccountsRemaining === 0) return undefined; - optionalAccountsRemaining -= 1; - return getNextAccount(); - }; - return { - programAddress: instruction.programAddress, - accounts: { - stake: getNextAccount(), - clockSysvar: getNextAccount(), - authority: getNextAccount(), - lockupAuthority: getNextOptionalAccount(), - }, - data: getAuthorizeInstructionDataDecoder().decode(instruction.data), - }; + if (instruction.accounts.length < 3) { + // TODO: Coded error. + throw new Error('Not enough accounts'); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + let optionalAccountsRemaining = instruction.accounts.length - 3; + const getNextOptionalAccount = () => { + if (optionalAccountsRemaining === 0) return undefined; + optionalAccountsRemaining -= 1; + return getNextAccount(); + }; + return { + programAddress: instruction.programAddress, + accounts: { + stake: getNextAccount(), + clockSysvar: getNextAccount(), + authority: getNextAccount(), + lockupAuthority: getNextOptionalAccount(), + }, + data: getAuthorizeInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/instructions/authorizeChecked.ts b/clients/js/src/generated/instructions/authorizeChecked.ts index b230f69f..fd6329e7 100644 --- a/clients/js/src/generated/instructions/authorizeChecked.ts +++ b/clients/js/src/generated/instructions/authorizeChecked.ts @@ -7,269 +7,238 @@ */ import { - combineCodec, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - transformEncoder, - type AccountMeta, - type AccountSignerMeta, - type Address, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type ReadonlyAccount, - type ReadonlySignerAccount, - type ReadonlyUint8Array, - type TransactionSigner, - type WritableAccount, + combineCodec, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlySignerAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; import { - getStakeAuthorizeDecoder, - getStakeAuthorizeEncoder, - type StakeAuthorize, - type StakeAuthorizeArgs, + getStakeAuthorizeDecoder, + getStakeAuthorizeEncoder, + type StakeAuthorize, + type StakeAuthorizeArgs, } from '../types'; export const AUTHORIZE_CHECKED_DISCRIMINATOR = 10; export function getAuthorizeCheckedDiscriminatorBytes() { - return getU32Encoder().encode(AUTHORIZE_CHECKED_DISCRIMINATOR); + return getU32Encoder().encode(AUTHORIZE_CHECKED_DISCRIMINATOR); } export type AuthorizeCheckedInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountStake extends string | AccountMeta = string, - TAccountClockSysvar extends - | string - | AccountMeta = 'SysvarC1ock11111111111111111111111111111111', - TAccountAuthority extends string | AccountMeta = string, - TAccountNewAuthority extends string | AccountMeta = string, - TAccountLockupAuthority extends - | string - | AccountMeta - | undefined = undefined, - TRemainingAccounts extends readonly AccountMeta[] = [], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string | AccountMeta = string, + TAccountClockSysvar extends string | AccountMeta = 'SysvarC1ock11111111111111111111111111111111', + TAccountAuthority extends string | AccountMeta = string, + TAccountNewAuthority extends string | AccountMeta = string, + TAccountLockupAuthority extends string | AccountMeta | undefined = undefined, + TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & - InstructionWithData & - InstructionWithAccounts< - [ - TAccountStake extends string - ? WritableAccount - : TAccountStake, - TAccountClockSysvar extends string - ? ReadonlyAccount - : TAccountClockSysvar, - TAccountAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountAuthority, - TAccountNewAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountNewAuthority, - ...(TAccountLockupAuthority extends undefined - ? [] - : [ - TAccountLockupAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountLockupAuthority, - ]), - ...TRemainingAccounts, - ] - >; - -export type AuthorizeCheckedInstructionData = { - discriminator: number; - stakeAuthorize: StakeAuthorize; -}; - -export type AuthorizeCheckedInstructionDataArgs = { - stakeAuthorize: StakeAuthorizeArgs; -}; + InstructionWithData & + InstructionWithAccounts< + [ + TAccountStake extends string ? WritableAccount : TAccountStake, + TAccountClockSysvar extends string ? ReadonlyAccount : TAccountClockSysvar, + TAccountAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountAuthority, + TAccountNewAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountNewAuthority, + ...(TAccountLockupAuthority extends undefined + ? [] + : [ + TAccountLockupAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountLockupAuthority, + ]), + ...TRemainingAccounts, + ] + >; + +export type AuthorizeCheckedInstructionData = { discriminator: number; stakeAuthorize: StakeAuthorize }; + +export type AuthorizeCheckedInstructionDataArgs = { stakeAuthorize: StakeAuthorizeArgs }; export function getAuthorizeCheckedInstructionDataEncoder(): FixedSizeEncoder { - return transformEncoder( - getStructEncoder([ - ['discriminator', getU32Encoder()], - ['stakeAuthorize', getStakeAuthorizeEncoder()], - ]), - (value) => ({ ...value, discriminator: AUTHORIZE_CHECKED_DISCRIMINATOR }) - ); + return transformEncoder( + getStructEncoder([ + ['discriminator', getU32Encoder()], + ['stakeAuthorize', getStakeAuthorizeEncoder()], + ]), + value => ({ ...value, discriminator: AUTHORIZE_CHECKED_DISCRIMINATOR }), + ); } export function getAuthorizeCheckedInstructionDataDecoder(): FixedSizeDecoder { - return getStructDecoder([ - ['discriminator', getU32Decoder()], - ['stakeAuthorize', getStakeAuthorizeDecoder()], - ]); + return getStructDecoder([ + ['discriminator', getU32Decoder()], + ['stakeAuthorize', getStakeAuthorizeDecoder()], + ]); } export function getAuthorizeCheckedInstructionDataCodec(): FixedSizeCodec< - AuthorizeCheckedInstructionDataArgs, - AuthorizeCheckedInstructionData + AuthorizeCheckedInstructionDataArgs, + AuthorizeCheckedInstructionData > { - return combineCodec( - getAuthorizeCheckedInstructionDataEncoder(), - getAuthorizeCheckedInstructionDataDecoder() - ); + return combineCodec(getAuthorizeCheckedInstructionDataEncoder(), getAuthorizeCheckedInstructionDataDecoder()); } export type AuthorizeCheckedInput< - TAccountStake extends string = string, - TAccountClockSysvar extends string = string, - TAccountAuthority extends string = string, - TAccountNewAuthority extends string = string, - TAccountLockupAuthority extends string = string, + TAccountStake extends string = string, + TAccountClockSysvar extends string = string, + TAccountAuthority extends string = string, + TAccountNewAuthority extends string = string, + TAccountLockupAuthority extends string = string, > = { - /** Stake account to be updated */ - stake: Address; - /** Clock sysvar */ - clockSysvar?: Address; - /** The stake or withdraw authority */ - authority: TransactionSigner; - /** The new stake or withdraw authority */ - newAuthority: TransactionSigner; - /** Lockup authority, if updating `StakeAuthorize::Withdrawer` before lockup expiration */ - lockupAuthority?: TransactionSigner; - stakeAuthorize: AuthorizeCheckedInstructionDataArgs['stakeAuthorize']; + /** Stake account to be updated */ + stake: Address; + /** Clock sysvar */ + clockSysvar?: Address; + /** The stake or withdraw authority */ + authority: TransactionSigner; + /** The new stake or withdraw authority */ + newAuthority: TransactionSigner; + /** Lockup authority, if updating `StakeAuthorize::Withdrawer` before lockup expiration */ + lockupAuthority?: TransactionSigner; + stakeAuthorize: AuthorizeCheckedInstructionDataArgs['stakeAuthorize']; }; export function getAuthorizeCheckedInstruction< - TAccountStake extends string, - TAccountClockSysvar extends string, - TAccountAuthority extends string, - TAccountNewAuthority extends string, - TAccountLockupAuthority extends string, - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string, + TAccountClockSysvar extends string, + TAccountAuthority extends string, + TAccountNewAuthority extends string, + TAccountLockupAuthority extends string, + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, >( - input: AuthorizeCheckedInput< - TAccountStake, - TAccountClockSysvar, - TAccountAuthority, - TAccountNewAuthority, - TAccountLockupAuthority - >, - config?: { programAddress?: TProgramAddress } + input: AuthorizeCheckedInput< + TAccountStake, + TAccountClockSysvar, + TAccountAuthority, + TAccountNewAuthority, + TAccountLockupAuthority + >, + config?: { programAddress?: TProgramAddress }, ): AuthorizeCheckedInstruction< - TProgramAddress, - TAccountStake, - TAccountClockSysvar, - TAccountAuthority, - TAccountNewAuthority, - TAccountLockupAuthority -> { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - - // Original accounts. - const originalAccounts = { - stake: { value: input.stake ?? null, isWritable: true }, - clockSysvar: { value: input.clockSysvar ?? null, isWritable: false }, - authority: { value: input.authority ?? null, isWritable: false }, - newAuthority: { value: input.newAuthority ?? null, isWritable: false }, - lockupAuthority: { - value: input.lockupAuthority ?? null, - isWritable: false, - }, - }; - const accounts = originalAccounts as Record< - keyof typeof originalAccounts, - ResolvedAccount - >; - - // Original args. - const args = { ...input }; - - // Resolve default values. - if (!accounts.clockSysvar.value) { - accounts.clockSysvar.value = - 'SysvarC1ock11111111111111111111111111111111' as Address<'SysvarC1ock11111111111111111111111111111111'>; - } - - const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); - return Object.freeze({ - accounts: [ - getAccountMeta(accounts.stake), - getAccountMeta(accounts.clockSysvar), - getAccountMeta(accounts.authority), - getAccountMeta(accounts.newAuthority), - getAccountMeta(accounts.lockupAuthority), - ].filter((x: T | undefined): x is T => x !== undefined), - data: getAuthorizeCheckedInstructionDataEncoder().encode( - args as AuthorizeCheckedInstructionDataArgs - ), - programAddress, - } as AuthorizeCheckedInstruction< TProgramAddress, TAccountStake, TAccountClockSysvar, TAccountAuthority, TAccountNewAuthority, TAccountLockupAuthority - >); +> { + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + stake: { value: input.stake ?? null, isWritable: true }, + clockSysvar: { value: input.clockSysvar ?? null, isWritable: false }, + authority: { value: input.authority ?? null, isWritable: false }, + newAuthority: { value: input.newAuthority ?? null, isWritable: false }, + lockupAuthority: { value: input.lockupAuthority ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + // Resolve default values. + if (!accounts.clockSysvar.value) { + accounts.clockSysvar.value = + 'SysvarC1ock11111111111111111111111111111111' as Address<'SysvarC1ock11111111111111111111111111111111'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); + return Object.freeze({ + accounts: [ + getAccountMeta(accounts.stake), + getAccountMeta(accounts.clockSysvar), + getAccountMeta(accounts.authority), + getAccountMeta(accounts.newAuthority), + getAccountMeta(accounts.lockupAuthority), + ].filter((x: T | undefined): x is T => x !== undefined), + data: getAuthorizeCheckedInstructionDataEncoder().encode(args as AuthorizeCheckedInstructionDataArgs), + programAddress, + } as AuthorizeCheckedInstruction< + TProgramAddress, + TAccountStake, + TAccountClockSysvar, + TAccountAuthority, + TAccountNewAuthority, + TAccountLockupAuthority + >); } export type ParsedAuthorizeCheckedInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { - programAddress: Address; - accounts: { - /** Stake account to be updated */ - stake: TAccountMetas[0]; - /** Clock sysvar */ - clockSysvar: TAccountMetas[1]; - /** The stake or withdraw authority */ - authority: TAccountMetas[2]; - /** The new stake or withdraw authority */ - newAuthority: TAccountMetas[3]; - /** Lockup authority, if updating `StakeAuthorize::Withdrawer` before lockup expiration */ - lockupAuthority?: TAccountMetas[4] | undefined; - }; - data: AuthorizeCheckedInstructionData; + programAddress: Address; + accounts: { + /** Stake account to be updated */ + stake: TAccountMetas[0]; + /** Clock sysvar */ + clockSysvar: TAccountMetas[1]; + /** The stake or withdraw authority */ + authority: TAccountMetas[2]; + /** The new stake or withdraw authority */ + newAuthority: TAccountMetas[3]; + /** Lockup authority, if updating `StakeAuthorize::Withdrawer` before lockup expiration */ + lockupAuthority?: TAccountMetas[4] | undefined; + }; + data: AuthorizeCheckedInstructionData; }; -export function parseAuthorizeCheckedInstruction< - TProgram extends string, - TAccountMetas extends readonly AccountMeta[], ->( - instruction: Instruction & - InstructionWithAccounts & - InstructionWithData +export function parseAuthorizeCheckedInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, ): ParsedAuthorizeCheckedInstruction { - if (instruction.accounts.length < 4) { - // TODO: Coded error. - throw new Error('Not enough accounts'); - } - let accountIndex = 0; - const getNextAccount = () => { - const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; - accountIndex += 1; - return accountMeta; - }; - let optionalAccountsRemaining = instruction.accounts.length - 4; - const getNextOptionalAccount = () => { - if (optionalAccountsRemaining === 0) return undefined; - optionalAccountsRemaining -= 1; - return getNextAccount(); - }; - return { - programAddress: instruction.programAddress, - accounts: { - stake: getNextAccount(), - clockSysvar: getNextAccount(), - authority: getNextAccount(), - newAuthority: getNextAccount(), - lockupAuthority: getNextOptionalAccount(), - }, - data: getAuthorizeCheckedInstructionDataDecoder().decode(instruction.data), - }; + if (instruction.accounts.length < 4) { + // TODO: Coded error. + throw new Error('Not enough accounts'); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + let optionalAccountsRemaining = instruction.accounts.length - 4; + const getNextOptionalAccount = () => { + if (optionalAccountsRemaining === 0) return undefined; + optionalAccountsRemaining -= 1; + return getNextAccount(); + }; + return { + programAddress: instruction.programAddress, + accounts: { + stake: getNextAccount(), + clockSysvar: getNextAccount(), + authority: getNextAccount(), + newAuthority: getNextAccount(), + lockupAuthority: getNextOptionalAccount(), + }, + data: getAuthorizeCheckedInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/instructions/authorizeCheckedWithSeed.ts b/clients/js/src/generated/instructions/authorizeCheckedWithSeed.ts index 317277e1..8ef2e4ca 100644 --- a/clients/js/src/generated/instructions/authorizeCheckedWithSeed.ts +++ b/clients/js/src/generated/instructions/authorizeCheckedWithSeed.ts @@ -7,292 +7,267 @@ */ import { - addDecoderSizePrefix, - addEncoderSizePrefix, - combineCodec, - getAddressDecoder, - getAddressEncoder, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - getUtf8Decoder, - getUtf8Encoder, - transformEncoder, - type AccountMeta, - type AccountSignerMeta, - type Address, - type Codec, - type Decoder, - type Encoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type ReadonlyAccount, - type ReadonlySignerAccount, - type ReadonlyUint8Array, - type TransactionSigner, - type WritableAccount, + addDecoderSizePrefix, + addEncoderSizePrefix, + combineCodec, + getAddressDecoder, + getAddressEncoder, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + getUtf8Decoder, + getUtf8Encoder, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type Codec, + type Decoder, + type Encoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlySignerAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; import { - getStakeAuthorizeDecoder, - getStakeAuthorizeEncoder, - type StakeAuthorize, - type StakeAuthorizeArgs, + getStakeAuthorizeDecoder, + getStakeAuthorizeEncoder, + type StakeAuthorize, + type StakeAuthorizeArgs, } from '../types'; export const AUTHORIZE_CHECKED_WITH_SEED_DISCRIMINATOR = 11; export function getAuthorizeCheckedWithSeedDiscriminatorBytes() { - return getU32Encoder().encode(AUTHORIZE_CHECKED_WITH_SEED_DISCRIMINATOR); + return getU32Encoder().encode(AUTHORIZE_CHECKED_WITH_SEED_DISCRIMINATOR); } export type AuthorizeCheckedWithSeedInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountStake extends string | AccountMeta = string, - TAccountBase extends string | AccountMeta = string, - TAccountClockSysvar extends - | string - | AccountMeta = 'SysvarC1ock11111111111111111111111111111111', - TAccountNewAuthority extends string | AccountMeta = string, - TAccountLockupAuthority extends - | string - | AccountMeta - | undefined = undefined, - TRemainingAccounts extends readonly AccountMeta[] = [], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string | AccountMeta = string, + TAccountBase extends string | AccountMeta = string, + TAccountClockSysvar extends string | AccountMeta = 'SysvarC1ock11111111111111111111111111111111', + TAccountNewAuthority extends string | AccountMeta = string, + TAccountLockupAuthority extends string | AccountMeta | undefined = undefined, + TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & - InstructionWithData & - InstructionWithAccounts< - [ - TAccountStake extends string - ? WritableAccount - : TAccountStake, - TAccountBase extends string - ? ReadonlySignerAccount & AccountSignerMeta - : TAccountBase, - TAccountClockSysvar extends string - ? ReadonlyAccount - : TAccountClockSysvar, - TAccountNewAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountNewAuthority, - ...(TAccountLockupAuthority extends undefined - ? [] - : [ - TAccountLockupAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountLockupAuthority, - ]), - ...TRemainingAccounts, - ] - >; + InstructionWithData & + InstructionWithAccounts< + [ + TAccountStake extends string ? WritableAccount : TAccountStake, + TAccountBase extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountBase, + TAccountClockSysvar extends string ? ReadonlyAccount : TAccountClockSysvar, + TAccountNewAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountNewAuthority, + ...(TAccountLockupAuthority extends undefined + ? [] + : [ + TAccountLockupAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountLockupAuthority, + ]), + ...TRemainingAccounts, + ] + >; export type AuthorizeCheckedWithSeedInstructionData = { - discriminator: number; - stakeAuthorize: StakeAuthorize; - authoritySeed: string; - authorityOwner: Address; + discriminator: number; + stakeAuthorize: StakeAuthorize; + authoritySeed: string; + authorityOwner: Address; }; export type AuthorizeCheckedWithSeedInstructionDataArgs = { - stakeAuthorize: StakeAuthorizeArgs; - authoritySeed: string; - authorityOwner: Address; + stakeAuthorize: StakeAuthorizeArgs; + authoritySeed: string; + authorityOwner: Address; }; export function getAuthorizeCheckedWithSeedInstructionDataEncoder(): Encoder { - return transformEncoder( - getStructEncoder([ - ['discriminator', getU32Encoder()], - ['stakeAuthorize', getStakeAuthorizeEncoder()], - [ - 'authoritySeed', - addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder()), - ], - ['authorityOwner', getAddressEncoder()], - ]), - (value) => ({ - ...value, - discriminator: AUTHORIZE_CHECKED_WITH_SEED_DISCRIMINATOR, - }) - ); + return transformEncoder( + getStructEncoder([ + ['discriminator', getU32Encoder()], + ['stakeAuthorize', getStakeAuthorizeEncoder()], + ['authoritySeed', addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder())], + ['authorityOwner', getAddressEncoder()], + ]), + value => ({ ...value, discriminator: AUTHORIZE_CHECKED_WITH_SEED_DISCRIMINATOR }), + ); } export function getAuthorizeCheckedWithSeedInstructionDataDecoder(): Decoder { - return getStructDecoder([ - ['discriminator', getU32Decoder()], - ['stakeAuthorize', getStakeAuthorizeDecoder()], - ['authoritySeed', addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder())], - ['authorityOwner', getAddressDecoder()], - ]); + return getStructDecoder([ + ['discriminator', getU32Decoder()], + ['stakeAuthorize', getStakeAuthorizeDecoder()], + ['authoritySeed', addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder())], + ['authorityOwner', getAddressDecoder()], + ]); } export function getAuthorizeCheckedWithSeedInstructionDataCodec(): Codec< - AuthorizeCheckedWithSeedInstructionDataArgs, - AuthorizeCheckedWithSeedInstructionData + AuthorizeCheckedWithSeedInstructionDataArgs, + AuthorizeCheckedWithSeedInstructionData > { - return combineCodec( - getAuthorizeCheckedWithSeedInstructionDataEncoder(), - getAuthorizeCheckedWithSeedInstructionDataDecoder() - ); + return combineCodec( + getAuthorizeCheckedWithSeedInstructionDataEncoder(), + getAuthorizeCheckedWithSeedInstructionDataDecoder(), + ); } export type AuthorizeCheckedWithSeedInput< - TAccountStake extends string = string, - TAccountBase extends string = string, - TAccountClockSysvar extends string = string, - TAccountNewAuthority extends string = string, - TAccountLockupAuthority extends string = string, + TAccountStake extends string = string, + TAccountBase extends string = string, + TAccountClockSysvar extends string = string, + TAccountNewAuthority extends string = string, + TAccountLockupAuthority extends string = string, > = { - /** Stake account to be updated */ - stake: Address; - /** Base key of stake or withdraw authority */ - base: TransactionSigner; - /** Clock sysvar */ - clockSysvar?: Address; - /** The new stake or withdraw authority */ - newAuthority: TransactionSigner; - /** Lockup authority, if updating `StakeAuthorize::Withdrawer` before lockup expiration */ - lockupAuthority?: TransactionSigner; - stakeAuthorize: AuthorizeCheckedWithSeedInstructionDataArgs['stakeAuthorize']; - authoritySeed: AuthorizeCheckedWithSeedInstructionDataArgs['authoritySeed']; - authorityOwner: AuthorizeCheckedWithSeedInstructionDataArgs['authorityOwner']; + /** Stake account to be updated */ + stake: Address; + /** Base key of stake or withdraw authority */ + base: TransactionSigner; + /** Clock sysvar */ + clockSysvar?: Address; + /** The new stake or withdraw authority */ + newAuthority: TransactionSigner; + /** Lockup authority, if updating `StakeAuthorize::Withdrawer` before lockup expiration */ + lockupAuthority?: TransactionSigner; + stakeAuthorize: AuthorizeCheckedWithSeedInstructionDataArgs['stakeAuthorize']; + authoritySeed: AuthorizeCheckedWithSeedInstructionDataArgs['authoritySeed']; + authorityOwner: AuthorizeCheckedWithSeedInstructionDataArgs['authorityOwner']; }; export function getAuthorizeCheckedWithSeedInstruction< - TAccountStake extends string, - TAccountBase extends string, - TAccountClockSysvar extends string, - TAccountNewAuthority extends string, - TAccountLockupAuthority extends string, - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string, + TAccountBase extends string, + TAccountClockSysvar extends string, + TAccountNewAuthority extends string, + TAccountLockupAuthority extends string, + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, >( - input: AuthorizeCheckedWithSeedInput< + input: AuthorizeCheckedWithSeedInput< + TAccountStake, + TAccountBase, + TAccountClockSysvar, + TAccountNewAuthority, + TAccountLockupAuthority + >, + config?: { programAddress?: TProgramAddress }, +): AuthorizeCheckedWithSeedInstruction< + TProgramAddress, TAccountStake, TAccountBase, TAccountClockSysvar, TAccountNewAuthority, TAccountLockupAuthority - >, - config?: { programAddress?: TProgramAddress } -): AuthorizeCheckedWithSeedInstruction< - TProgramAddress, - TAccountStake, - TAccountBase, - TAccountClockSysvar, - TAccountNewAuthority, - TAccountLockupAuthority > { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - // Original accounts. - const originalAccounts = { - stake: { value: input.stake ?? null, isWritable: true }, - base: { value: input.base ?? null, isWritable: false }, - clockSysvar: { value: input.clockSysvar ?? null, isWritable: false }, - newAuthority: { value: input.newAuthority ?? null, isWritable: false }, - lockupAuthority: { - value: input.lockupAuthority ?? null, - isWritable: false, - }, - }; - const accounts = originalAccounts as Record< - keyof typeof originalAccounts, - ResolvedAccount - >; + // Original accounts. + const originalAccounts = { + stake: { value: input.stake ?? null, isWritable: true }, + base: { value: input.base ?? null, isWritable: false }, + clockSysvar: { value: input.clockSysvar ?? null, isWritable: false }, + newAuthority: { value: input.newAuthority ?? null, isWritable: false }, + lockupAuthority: { value: input.lockupAuthority ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; - // Original args. - const args = { ...input }; + // Original args. + const args = { ...input }; - // Resolve default values. - if (!accounts.clockSysvar.value) { - accounts.clockSysvar.value = - 'SysvarC1ock11111111111111111111111111111111' as Address<'SysvarC1ock11111111111111111111111111111111'>; - } + // Resolve default values. + if (!accounts.clockSysvar.value) { + accounts.clockSysvar.value = + 'SysvarC1ock11111111111111111111111111111111' as Address<'SysvarC1ock11111111111111111111111111111111'>; + } - const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); - return Object.freeze({ - accounts: [ - getAccountMeta(accounts.stake), - getAccountMeta(accounts.base), - getAccountMeta(accounts.clockSysvar), - getAccountMeta(accounts.newAuthority), - getAccountMeta(accounts.lockupAuthority), - ].filter((x: T | undefined): x is T => x !== undefined), - data: getAuthorizeCheckedWithSeedInstructionDataEncoder().encode( - args as AuthorizeCheckedWithSeedInstructionDataArgs - ), - programAddress, - } as AuthorizeCheckedWithSeedInstruction< - TProgramAddress, - TAccountStake, - TAccountBase, - TAccountClockSysvar, - TAccountNewAuthority, - TAccountLockupAuthority - >); + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); + return Object.freeze({ + accounts: [ + getAccountMeta(accounts.stake), + getAccountMeta(accounts.base), + getAccountMeta(accounts.clockSysvar), + getAccountMeta(accounts.newAuthority), + getAccountMeta(accounts.lockupAuthority), + ].filter((x: T | undefined): x is T => x !== undefined), + data: getAuthorizeCheckedWithSeedInstructionDataEncoder().encode( + args as AuthorizeCheckedWithSeedInstructionDataArgs, + ), + programAddress, + } as AuthorizeCheckedWithSeedInstruction< + TProgramAddress, + TAccountStake, + TAccountBase, + TAccountClockSysvar, + TAccountNewAuthority, + TAccountLockupAuthority + >); } export type ParsedAuthorizeCheckedWithSeedInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { - programAddress: Address; - accounts: { - /** Stake account to be updated */ - stake: TAccountMetas[0]; - /** Base key of stake or withdraw authority */ - base: TAccountMetas[1]; - /** Clock sysvar */ - clockSysvar: TAccountMetas[2]; - /** The new stake or withdraw authority */ - newAuthority: TAccountMetas[3]; - /** Lockup authority, if updating `StakeAuthorize::Withdrawer` before lockup expiration */ - lockupAuthority?: TAccountMetas[4] | undefined; - }; - data: AuthorizeCheckedWithSeedInstructionData; + programAddress: Address; + accounts: { + /** Stake account to be updated */ + stake: TAccountMetas[0]; + /** Base key of stake or withdraw authority */ + base: TAccountMetas[1]; + /** Clock sysvar */ + clockSysvar: TAccountMetas[2]; + /** The new stake or withdraw authority */ + newAuthority: TAccountMetas[3]; + /** Lockup authority, if updating `StakeAuthorize::Withdrawer` before lockup expiration */ + lockupAuthority?: TAccountMetas[4] | undefined; + }; + data: AuthorizeCheckedWithSeedInstructionData; }; export function parseAuthorizeCheckedWithSeedInstruction< - TProgram extends string, - TAccountMetas extends readonly AccountMeta[], + TProgram extends string, + TAccountMetas extends readonly AccountMeta[], >( - instruction: Instruction & - InstructionWithAccounts & - InstructionWithData + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, ): ParsedAuthorizeCheckedWithSeedInstruction { - if (instruction.accounts.length < 4) { - // TODO: Coded error. - throw new Error('Not enough accounts'); - } - let accountIndex = 0; - const getNextAccount = () => { - const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; - accountIndex += 1; - return accountMeta; - }; - let optionalAccountsRemaining = instruction.accounts.length - 4; - const getNextOptionalAccount = () => { - if (optionalAccountsRemaining === 0) return undefined; - optionalAccountsRemaining -= 1; - return getNextAccount(); - }; - return { - programAddress: instruction.programAddress, - accounts: { - stake: getNextAccount(), - base: getNextAccount(), - clockSysvar: getNextAccount(), - newAuthority: getNextAccount(), - lockupAuthority: getNextOptionalAccount(), - }, - data: getAuthorizeCheckedWithSeedInstructionDataDecoder().decode( - instruction.data - ), - }; + if (instruction.accounts.length < 4) { + // TODO: Coded error. + throw new Error('Not enough accounts'); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + let optionalAccountsRemaining = instruction.accounts.length - 4; + const getNextOptionalAccount = () => { + if (optionalAccountsRemaining === 0) return undefined; + optionalAccountsRemaining -= 1; + return getNextAccount(); + }; + return { + programAddress: instruction.programAddress, + accounts: { + stake: getNextAccount(), + base: getNextAccount(), + clockSysvar: getNextAccount(), + newAuthority: getNextAccount(), + lockupAuthority: getNextOptionalAccount(), + }, + data: getAuthorizeCheckedWithSeedInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/instructions/authorizeWithSeed.ts b/clients/js/src/generated/instructions/authorizeWithSeed.ts index 0007b5b7..de031cde 100644 --- a/clients/js/src/generated/instructions/authorizeWithSeed.ts +++ b/clients/js/src/generated/instructions/authorizeWithSeed.ts @@ -7,275 +7,246 @@ */ import { - addDecoderSizePrefix, - addEncoderSizePrefix, - combineCodec, - getAddressDecoder, - getAddressEncoder, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - getUtf8Decoder, - getUtf8Encoder, - transformEncoder, - type AccountMeta, - type AccountSignerMeta, - type Address, - type Codec, - type Decoder, - type Encoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type ReadonlyAccount, - type ReadonlySignerAccount, - type ReadonlyUint8Array, - type TransactionSigner, - type WritableAccount, + addDecoderSizePrefix, + addEncoderSizePrefix, + combineCodec, + getAddressDecoder, + getAddressEncoder, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + getUtf8Decoder, + getUtf8Encoder, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type Codec, + type Decoder, + type Encoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlySignerAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; import { - getStakeAuthorizeDecoder, - getStakeAuthorizeEncoder, - type StakeAuthorize, - type StakeAuthorizeArgs, + getStakeAuthorizeDecoder, + getStakeAuthorizeEncoder, + type StakeAuthorize, + type StakeAuthorizeArgs, } from '../types'; export const AUTHORIZE_WITH_SEED_DISCRIMINATOR = 8; export function getAuthorizeWithSeedDiscriminatorBytes() { - return getU32Encoder().encode(AUTHORIZE_WITH_SEED_DISCRIMINATOR); + return getU32Encoder().encode(AUTHORIZE_WITH_SEED_DISCRIMINATOR); } export type AuthorizeWithSeedInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountStake extends string | AccountMeta = string, - TAccountBase extends string | AccountMeta = string, - TAccountClockSysvar extends - | string - | AccountMeta = 'SysvarC1ock11111111111111111111111111111111', - TAccountLockupAuthority extends - | string - | AccountMeta - | undefined = undefined, - TRemainingAccounts extends readonly AccountMeta[] = [], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string | AccountMeta = string, + TAccountBase extends string | AccountMeta = string, + TAccountClockSysvar extends string | AccountMeta = 'SysvarC1ock11111111111111111111111111111111', + TAccountLockupAuthority extends string | AccountMeta | undefined = undefined, + TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & - InstructionWithData & - InstructionWithAccounts< - [ - TAccountStake extends string - ? WritableAccount - : TAccountStake, - TAccountBase extends string - ? ReadonlySignerAccount & AccountSignerMeta - : TAccountBase, - TAccountClockSysvar extends string - ? ReadonlyAccount - : TAccountClockSysvar, - ...(TAccountLockupAuthority extends undefined - ? [] - : [ - TAccountLockupAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountLockupAuthority, - ]), - ...TRemainingAccounts, - ] - >; + InstructionWithData & + InstructionWithAccounts< + [ + TAccountStake extends string ? WritableAccount : TAccountStake, + TAccountBase extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountBase, + TAccountClockSysvar extends string ? ReadonlyAccount : TAccountClockSysvar, + ...(TAccountLockupAuthority extends undefined + ? [] + : [ + TAccountLockupAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountLockupAuthority, + ]), + ...TRemainingAccounts, + ] + >; export type AuthorizeWithSeedInstructionData = { - discriminator: number; - newAuthorizedPubkey: Address; - stakeAuthorize: StakeAuthorize; - authoritySeed: string; - authorityOwner: Address; + discriminator: number; + newAuthorizedPubkey: Address; + stakeAuthorize: StakeAuthorize; + authoritySeed: string; + authorityOwner: Address; }; export type AuthorizeWithSeedInstructionDataArgs = { - newAuthorizedPubkey: Address; - stakeAuthorize: StakeAuthorizeArgs; - authoritySeed: string; - authorityOwner: Address; + newAuthorizedPubkey: Address; + stakeAuthorize: StakeAuthorizeArgs; + authoritySeed: string; + authorityOwner: Address; }; export function getAuthorizeWithSeedInstructionDataEncoder(): Encoder { - return transformEncoder( - getStructEncoder([ - ['discriminator', getU32Encoder()], - ['newAuthorizedPubkey', getAddressEncoder()], - ['stakeAuthorize', getStakeAuthorizeEncoder()], - [ - 'authoritySeed', - addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder()), - ], - ['authorityOwner', getAddressEncoder()], - ]), - (value) => ({ ...value, discriminator: AUTHORIZE_WITH_SEED_DISCRIMINATOR }) - ); + return transformEncoder( + getStructEncoder([ + ['discriminator', getU32Encoder()], + ['newAuthorizedPubkey', getAddressEncoder()], + ['stakeAuthorize', getStakeAuthorizeEncoder()], + ['authoritySeed', addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder())], + ['authorityOwner', getAddressEncoder()], + ]), + value => ({ ...value, discriminator: AUTHORIZE_WITH_SEED_DISCRIMINATOR }), + ); } export function getAuthorizeWithSeedInstructionDataDecoder(): Decoder { - return getStructDecoder([ - ['discriminator', getU32Decoder()], - ['newAuthorizedPubkey', getAddressDecoder()], - ['stakeAuthorize', getStakeAuthorizeDecoder()], - ['authoritySeed', addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder())], - ['authorityOwner', getAddressDecoder()], - ]); + return getStructDecoder([ + ['discriminator', getU32Decoder()], + ['newAuthorizedPubkey', getAddressDecoder()], + ['stakeAuthorize', getStakeAuthorizeDecoder()], + ['authoritySeed', addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder())], + ['authorityOwner', getAddressDecoder()], + ]); } export function getAuthorizeWithSeedInstructionDataCodec(): Codec< - AuthorizeWithSeedInstructionDataArgs, - AuthorizeWithSeedInstructionData + AuthorizeWithSeedInstructionDataArgs, + AuthorizeWithSeedInstructionData > { - return combineCodec( - getAuthorizeWithSeedInstructionDataEncoder(), - getAuthorizeWithSeedInstructionDataDecoder() - ); + return combineCodec(getAuthorizeWithSeedInstructionDataEncoder(), getAuthorizeWithSeedInstructionDataDecoder()); } export type AuthorizeWithSeedInput< - TAccountStake extends string = string, - TAccountBase extends string = string, - TAccountClockSysvar extends string = string, - TAccountLockupAuthority extends string = string, + TAccountStake extends string = string, + TAccountBase extends string = string, + TAccountClockSysvar extends string = string, + TAccountLockupAuthority extends string = string, > = { - /** Stake account to be updated */ - stake: Address; - /** Base key of stake or withdraw authority */ - base: TransactionSigner; - /** Clock sysvar */ - clockSysvar?: Address; - /** Lockup authority, if updating `StakeAuthorize::Withdrawer` before lockup expiration */ - lockupAuthority?: TransactionSigner; - newAuthorizedPubkey: AuthorizeWithSeedInstructionDataArgs['newAuthorizedPubkey']; - stakeAuthorize: AuthorizeWithSeedInstructionDataArgs['stakeAuthorize']; - authoritySeed: AuthorizeWithSeedInstructionDataArgs['authoritySeed']; - authorityOwner: AuthorizeWithSeedInstructionDataArgs['authorityOwner']; + /** Stake account to be updated */ + stake: Address; + /** Base key of stake or withdraw authority */ + base: TransactionSigner; + /** Clock sysvar */ + clockSysvar?: Address; + /** Lockup authority, if updating `StakeAuthorize::Withdrawer` before lockup expiration */ + lockupAuthority?: TransactionSigner; + newAuthorizedPubkey: AuthorizeWithSeedInstructionDataArgs['newAuthorizedPubkey']; + stakeAuthorize: AuthorizeWithSeedInstructionDataArgs['stakeAuthorize']; + authoritySeed: AuthorizeWithSeedInstructionDataArgs['authoritySeed']; + authorityOwner: AuthorizeWithSeedInstructionDataArgs['authorityOwner']; }; export function getAuthorizeWithSeedInstruction< - TAccountStake extends string, - TAccountBase extends string, - TAccountClockSysvar extends string, - TAccountLockupAuthority extends string, - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string, + TAccountBase extends string, + TAccountClockSysvar extends string, + TAccountLockupAuthority extends string, + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, >( - input: AuthorizeWithSeedInput< - TAccountStake, - TAccountBase, - TAccountClockSysvar, - TAccountLockupAuthority - >, - config?: { programAddress?: TProgramAddress } + input: AuthorizeWithSeedInput, + config?: { programAddress?: TProgramAddress }, ): AuthorizeWithSeedInstruction< - TProgramAddress, - TAccountStake, - TAccountBase, - TAccountClockSysvar, - TAccountLockupAuthority -> { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - - // Original accounts. - const originalAccounts = { - stake: { value: input.stake ?? null, isWritable: true }, - base: { value: input.base ?? null, isWritable: false }, - clockSysvar: { value: input.clockSysvar ?? null, isWritable: false }, - lockupAuthority: { - value: input.lockupAuthority ?? null, - isWritable: false, - }, - }; - const accounts = originalAccounts as Record< - keyof typeof originalAccounts, - ResolvedAccount - >; - - // Original args. - const args = { ...input }; - - // Resolve default values. - if (!accounts.clockSysvar.value) { - accounts.clockSysvar.value = - 'SysvarC1ock11111111111111111111111111111111' as Address<'SysvarC1ock11111111111111111111111111111111'>; - } - - const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); - return Object.freeze({ - accounts: [ - getAccountMeta(accounts.stake), - getAccountMeta(accounts.base), - getAccountMeta(accounts.clockSysvar), - getAccountMeta(accounts.lockupAuthority), - ].filter((x: T | undefined): x is T => x !== undefined), - data: getAuthorizeWithSeedInstructionDataEncoder().encode( - args as AuthorizeWithSeedInstructionDataArgs - ), - programAddress, - } as AuthorizeWithSeedInstruction< TProgramAddress, TAccountStake, TAccountBase, TAccountClockSysvar, TAccountLockupAuthority - >); +> { + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + stake: { value: input.stake ?? null, isWritable: true }, + base: { value: input.base ?? null, isWritable: false }, + clockSysvar: { value: input.clockSysvar ?? null, isWritable: false }, + lockupAuthority: { value: input.lockupAuthority ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + // Resolve default values. + if (!accounts.clockSysvar.value) { + accounts.clockSysvar.value = + 'SysvarC1ock11111111111111111111111111111111' as Address<'SysvarC1ock11111111111111111111111111111111'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); + return Object.freeze({ + accounts: [ + getAccountMeta(accounts.stake), + getAccountMeta(accounts.base), + getAccountMeta(accounts.clockSysvar), + getAccountMeta(accounts.lockupAuthority), + ].filter((x: T | undefined): x is T => x !== undefined), + data: getAuthorizeWithSeedInstructionDataEncoder().encode(args as AuthorizeWithSeedInstructionDataArgs), + programAddress, + } as AuthorizeWithSeedInstruction< + TProgramAddress, + TAccountStake, + TAccountBase, + TAccountClockSysvar, + TAccountLockupAuthority + >); } export type ParsedAuthorizeWithSeedInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { - programAddress: Address; - accounts: { - /** Stake account to be updated */ - stake: TAccountMetas[0]; - /** Base key of stake or withdraw authority */ - base: TAccountMetas[1]; - /** Clock sysvar */ - clockSysvar: TAccountMetas[2]; - /** Lockup authority, if updating `StakeAuthorize::Withdrawer` before lockup expiration */ - lockupAuthority?: TAccountMetas[3] | undefined; - }; - data: AuthorizeWithSeedInstructionData; + programAddress: Address; + accounts: { + /** Stake account to be updated */ + stake: TAccountMetas[0]; + /** Base key of stake or withdraw authority */ + base: TAccountMetas[1]; + /** Clock sysvar */ + clockSysvar: TAccountMetas[2]; + /** Lockup authority, if updating `StakeAuthorize::Withdrawer` before lockup expiration */ + lockupAuthority?: TAccountMetas[3] | undefined; + }; + data: AuthorizeWithSeedInstructionData; }; export function parseAuthorizeWithSeedInstruction< - TProgram extends string, - TAccountMetas extends readonly AccountMeta[], + TProgram extends string, + TAccountMetas extends readonly AccountMeta[], >( - instruction: Instruction & - InstructionWithAccounts & - InstructionWithData + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, ): ParsedAuthorizeWithSeedInstruction { - if (instruction.accounts.length < 3) { - // TODO: Coded error. - throw new Error('Not enough accounts'); - } - let accountIndex = 0; - const getNextAccount = () => { - const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; - accountIndex += 1; - return accountMeta; - }; - let optionalAccountsRemaining = instruction.accounts.length - 3; - const getNextOptionalAccount = () => { - if (optionalAccountsRemaining === 0) return undefined; - optionalAccountsRemaining -= 1; - return getNextAccount(); - }; - return { - programAddress: instruction.programAddress, - accounts: { - stake: getNextAccount(), - base: getNextAccount(), - clockSysvar: getNextAccount(), - lockupAuthority: getNextOptionalAccount(), - }, - data: getAuthorizeWithSeedInstructionDataDecoder().decode(instruction.data), - }; + if (instruction.accounts.length < 3) { + // TODO: Coded error. + throw new Error('Not enough accounts'); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + let optionalAccountsRemaining = instruction.accounts.length - 3; + const getNextOptionalAccount = () => { + if (optionalAccountsRemaining === 0) return undefined; + optionalAccountsRemaining -= 1; + return getNextAccount(); + }; + return { + programAddress: instruction.programAddress, + accounts: { + stake: getNextAccount(), + base: getNextAccount(), + clockSysvar: getNextAccount(), + lockupAuthority: getNextOptionalAccount(), + }, + data: getAuthorizeWithSeedInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/instructions/deactivate.ts b/clients/js/src/generated/instructions/deactivate.ts index 7bbce5a8..3503a54b 100644 --- a/clients/js/src/generated/instructions/deactivate.ts +++ b/clients/js/src/generated/instructions/deactivate.ts @@ -7,26 +7,26 @@ */ import { - combineCodec, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - transformEncoder, - type AccountMeta, - type AccountSignerMeta, - type Address, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type ReadonlyAccount, - type ReadonlySignerAccount, - type ReadonlyUint8Array, - type TransactionSigner, - type WritableAccount, + combineCodec, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlySignerAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; @@ -34,169 +34,135 @@ import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; export const DEACTIVATE_DISCRIMINATOR = 5; export function getDeactivateDiscriminatorBytes() { - return getU32Encoder().encode(DEACTIVATE_DISCRIMINATOR); + return getU32Encoder().encode(DEACTIVATE_DISCRIMINATOR); } export type DeactivateInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountStake extends string | AccountMeta = string, - TAccountClockSysvar extends - | string - | AccountMeta = 'SysvarC1ock11111111111111111111111111111111', - TAccountStakeAuthority extends string | AccountMeta = string, - TRemainingAccounts extends readonly AccountMeta[] = [], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string | AccountMeta = string, + TAccountClockSysvar extends string | AccountMeta = 'SysvarC1ock11111111111111111111111111111111', + TAccountStakeAuthority extends string | AccountMeta = string, + TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & - InstructionWithData & - InstructionWithAccounts< - [ - TAccountStake extends string - ? WritableAccount - : TAccountStake, - TAccountClockSysvar extends string - ? ReadonlyAccount - : TAccountClockSysvar, - TAccountStakeAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountStakeAuthority, - ...TRemainingAccounts, - ] - >; + InstructionWithData & + InstructionWithAccounts< + [ + TAccountStake extends string ? WritableAccount : TAccountStake, + TAccountClockSysvar extends string ? ReadonlyAccount : TAccountClockSysvar, + TAccountStakeAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountStakeAuthority, + ...TRemainingAccounts, + ] + >; export type DeactivateInstructionData = { discriminator: number }; export type DeactivateInstructionDataArgs = {}; export function getDeactivateInstructionDataEncoder(): FixedSizeEncoder { - return transformEncoder( - getStructEncoder([['discriminator', getU32Encoder()]]), - (value) => ({ ...value, discriminator: DEACTIVATE_DISCRIMINATOR }) - ); + return transformEncoder(getStructEncoder([['discriminator', getU32Encoder()]]), value => ({ + ...value, + discriminator: DEACTIVATE_DISCRIMINATOR, + })); } export function getDeactivateInstructionDataDecoder(): FixedSizeDecoder { - return getStructDecoder([['discriminator', getU32Decoder()]]); + return getStructDecoder([['discriminator', getU32Decoder()]]); } export function getDeactivateInstructionDataCodec(): FixedSizeCodec< - DeactivateInstructionDataArgs, - DeactivateInstructionData + DeactivateInstructionDataArgs, + DeactivateInstructionData > { - return combineCodec( - getDeactivateInstructionDataEncoder(), - getDeactivateInstructionDataDecoder() - ); + return combineCodec(getDeactivateInstructionDataEncoder(), getDeactivateInstructionDataDecoder()); } export type DeactivateInput< - TAccountStake extends string = string, - TAccountClockSysvar extends string = string, - TAccountStakeAuthority extends string = string, + TAccountStake extends string = string, + TAccountClockSysvar extends string = string, + TAccountStakeAuthority extends string = string, > = { - /** Delegated stake account to be deactivated */ - stake: Address; - /** Clock sysvar */ - clockSysvar?: Address; - /** Stake authority */ - stakeAuthority: TransactionSigner; + /** Delegated stake account to be deactivated */ + stake: Address; + /** Clock sysvar */ + clockSysvar?: Address; + /** Stake authority */ + stakeAuthority: TransactionSigner; }; export function getDeactivateInstruction< - TAccountStake extends string, - TAccountClockSysvar extends string, - TAccountStakeAuthority extends string, - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string, + TAccountClockSysvar extends string, + TAccountStakeAuthority extends string, + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, >( - input: DeactivateInput< - TAccountStake, - TAccountClockSysvar, - TAccountStakeAuthority - >, - config?: { programAddress?: TProgramAddress } -): DeactivateInstruction< - TProgramAddress, - TAccountStake, - TAccountClockSysvar, - TAccountStakeAuthority -> { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - - // Original accounts. - const originalAccounts = { - stake: { value: input.stake ?? null, isWritable: true }, - clockSysvar: { value: input.clockSysvar ?? null, isWritable: false }, - stakeAuthority: { value: input.stakeAuthority ?? null, isWritable: false }, - }; - const accounts = originalAccounts as Record< - keyof typeof originalAccounts, - ResolvedAccount - >; - - // Resolve default values. - if (!accounts.clockSysvar.value) { - accounts.clockSysvar.value = - 'SysvarC1ock11111111111111111111111111111111' as Address<'SysvarC1ock11111111111111111111111111111111'>; - } - - const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); - return Object.freeze({ - accounts: [ - getAccountMeta(accounts.stake), - getAccountMeta(accounts.clockSysvar), - getAccountMeta(accounts.stakeAuthority), - ], - data: getDeactivateInstructionDataEncoder().encode({}), - programAddress, - } as DeactivateInstruction< - TProgramAddress, - TAccountStake, - TAccountClockSysvar, - TAccountStakeAuthority - >); + input: DeactivateInput, + config?: { programAddress?: TProgramAddress }, +): DeactivateInstruction { + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + stake: { value: input.stake ?? null, isWritable: true }, + clockSysvar: { value: input.clockSysvar ?? null, isWritable: false }, + stakeAuthority: { value: input.stakeAuthority ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Resolve default values. + if (!accounts.clockSysvar.value) { + accounts.clockSysvar.value = + 'SysvarC1ock11111111111111111111111111111111' as Address<'SysvarC1ock11111111111111111111111111111111'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); + return Object.freeze({ + accounts: [ + getAccountMeta(accounts.stake), + getAccountMeta(accounts.clockSysvar), + getAccountMeta(accounts.stakeAuthority), + ], + data: getDeactivateInstructionDataEncoder().encode({}), + programAddress, + } as DeactivateInstruction); } export type ParsedDeactivateInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { - programAddress: Address; - accounts: { - /** Delegated stake account to be deactivated */ - stake: TAccountMetas[0]; - /** Clock sysvar */ - clockSysvar: TAccountMetas[1]; - /** Stake authority */ - stakeAuthority: TAccountMetas[2]; - }; - data: DeactivateInstructionData; + programAddress: Address; + accounts: { + /** Delegated stake account to be deactivated */ + stake: TAccountMetas[0]; + /** Clock sysvar */ + clockSysvar: TAccountMetas[1]; + /** Stake authority */ + stakeAuthority: TAccountMetas[2]; + }; + data: DeactivateInstructionData; }; -export function parseDeactivateInstruction< - TProgram extends string, - TAccountMetas extends readonly AccountMeta[], ->( - instruction: Instruction & - InstructionWithAccounts & - InstructionWithData +export function parseDeactivateInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, ): ParsedDeactivateInstruction { - if (instruction.accounts.length < 3) { - // TODO: Coded error. - throw new Error('Not enough accounts'); - } - let accountIndex = 0; - const getNextAccount = () => { - const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; - accountIndex += 1; - return accountMeta; - }; - return { - programAddress: instruction.programAddress, - accounts: { - stake: getNextAccount(), - clockSysvar: getNextAccount(), - stakeAuthority: getNextAccount(), - }, - data: getDeactivateInstructionDataDecoder().decode(instruction.data), - }; + if (instruction.accounts.length < 3) { + // TODO: Coded error. + throw new Error('Not enough accounts'); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { stake: getNextAccount(), clockSysvar: getNextAccount(), stakeAuthority: getNextAccount() }, + data: getDeactivateInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/instructions/deactivateDelinquent.ts b/clients/js/src/generated/instructions/deactivateDelinquent.ts index 88ecf8ad..43527bcd 100644 --- a/clients/js/src/generated/instructions/deactivateDelinquent.ts +++ b/clients/js/src/generated/instructions/deactivateDelinquent.ts @@ -7,23 +7,23 @@ */ import { - combineCodec, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - transformEncoder, - type AccountMeta, - type Address, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type ReadonlyAccount, - type ReadonlyUint8Array, - type WritableAccount, + combineCodec, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + transformEncoder, + type AccountMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlyUint8Array, + type WritableAccount, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; @@ -31,165 +31,138 @@ import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; export const DEACTIVATE_DELINQUENT_DISCRIMINATOR = 14; export function getDeactivateDelinquentDiscriminatorBytes() { - return getU32Encoder().encode(DEACTIVATE_DELINQUENT_DISCRIMINATOR); + return getU32Encoder().encode(DEACTIVATE_DELINQUENT_DISCRIMINATOR); } export type DeactivateDelinquentInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountStake extends string | AccountMeta = string, - TAccountDelinquentVote extends string | AccountMeta = string, - TAccountReferenceVote extends string | AccountMeta = string, - TRemainingAccounts extends readonly AccountMeta[] = [], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string | AccountMeta = string, + TAccountDelinquentVote extends string | AccountMeta = string, + TAccountReferenceVote extends string | AccountMeta = string, + TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & - InstructionWithData & - InstructionWithAccounts< - [ - TAccountStake extends string - ? WritableAccount - : TAccountStake, - TAccountDelinquentVote extends string - ? ReadonlyAccount - : TAccountDelinquentVote, - TAccountReferenceVote extends string - ? ReadonlyAccount - : TAccountReferenceVote, - ...TRemainingAccounts, - ] - >; + InstructionWithData & + InstructionWithAccounts< + [ + TAccountStake extends string ? WritableAccount : TAccountStake, + TAccountDelinquentVote extends string ? ReadonlyAccount : TAccountDelinquentVote, + TAccountReferenceVote extends string ? ReadonlyAccount : TAccountReferenceVote, + ...TRemainingAccounts, + ] + >; export type DeactivateDelinquentInstructionData = { discriminator: number }; export type DeactivateDelinquentInstructionDataArgs = {}; export function getDeactivateDelinquentInstructionDataEncoder(): FixedSizeEncoder { - return transformEncoder( - getStructEncoder([['discriminator', getU32Encoder()]]), - (value) => ({ - ...value, - discriminator: DEACTIVATE_DELINQUENT_DISCRIMINATOR, - }) - ); + return transformEncoder(getStructEncoder([['discriminator', getU32Encoder()]]), value => ({ + ...value, + discriminator: DEACTIVATE_DELINQUENT_DISCRIMINATOR, + })); } export function getDeactivateDelinquentInstructionDataDecoder(): FixedSizeDecoder { - return getStructDecoder([['discriminator', getU32Decoder()]]); + return getStructDecoder([['discriminator', getU32Decoder()]]); } export function getDeactivateDelinquentInstructionDataCodec(): FixedSizeCodec< - DeactivateDelinquentInstructionDataArgs, - DeactivateDelinquentInstructionData + DeactivateDelinquentInstructionDataArgs, + DeactivateDelinquentInstructionData > { - return combineCodec( - getDeactivateDelinquentInstructionDataEncoder(), - getDeactivateDelinquentInstructionDataDecoder() - ); + return combineCodec( + getDeactivateDelinquentInstructionDataEncoder(), + getDeactivateDelinquentInstructionDataDecoder(), + ); } export type DeactivateDelinquentInput< - TAccountStake extends string = string, - TAccountDelinquentVote extends string = string, - TAccountReferenceVote extends string = string, + TAccountStake extends string = string, + TAccountDelinquentVote extends string = string, + TAccountReferenceVote extends string = string, > = { - /** Delegated stake account */ - stake: Address; - /** Delinquent vote account for the delegated stake account */ - delinquentVote: Address; - /** Reference vote account that has voted at least once in the last `MINIMUM_DELINQUENT_EPOCHS_FOR_DEACTIVATION` epochs */ - referenceVote: Address; + /** Delegated stake account */ + stake: Address; + /** Delinquent vote account for the delegated stake account */ + delinquentVote: Address; + /** Reference vote account that has voted at least once in the last `MINIMUM_DELINQUENT_EPOCHS_FOR_DEACTIVATION` epochs */ + referenceVote: Address; }; export function getDeactivateDelinquentInstruction< - TAccountStake extends string, - TAccountDelinquentVote extends string, - TAccountReferenceVote extends string, - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string, + TAccountDelinquentVote extends string, + TAccountReferenceVote extends string, + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, >( - input: DeactivateDelinquentInput< - TAccountStake, - TAccountDelinquentVote, - TAccountReferenceVote - >, - config?: { programAddress?: TProgramAddress } -): DeactivateDelinquentInstruction< - TProgramAddress, - TAccountStake, - TAccountDelinquentVote, - TAccountReferenceVote -> { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + input: DeactivateDelinquentInput, + config?: { programAddress?: TProgramAddress }, +): DeactivateDelinquentInstruction { + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - // Original accounts. - const originalAccounts = { - stake: { value: input.stake ?? null, isWritable: true }, - delinquentVote: { value: input.delinquentVote ?? null, isWritable: false }, - referenceVote: { value: input.referenceVote ?? null, isWritable: false }, - }; - const accounts = originalAccounts as Record< - keyof typeof originalAccounts, - ResolvedAccount - >; + // Original accounts. + const originalAccounts = { + stake: { value: input.stake ?? null, isWritable: true }, + delinquentVote: { value: input.delinquentVote ?? null, isWritable: false }, + referenceVote: { value: input.referenceVote ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; - const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); - return Object.freeze({ - accounts: [ - getAccountMeta(accounts.stake), - getAccountMeta(accounts.delinquentVote), - getAccountMeta(accounts.referenceVote), - ], - data: getDeactivateDelinquentInstructionDataEncoder().encode({}), - programAddress, - } as DeactivateDelinquentInstruction< - TProgramAddress, - TAccountStake, - TAccountDelinquentVote, - TAccountReferenceVote - >); + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); + return Object.freeze({ + accounts: [ + getAccountMeta(accounts.stake), + getAccountMeta(accounts.delinquentVote), + getAccountMeta(accounts.referenceVote), + ], + data: getDeactivateDelinquentInstructionDataEncoder().encode({}), + programAddress, + } as DeactivateDelinquentInstruction< + TProgramAddress, + TAccountStake, + TAccountDelinquentVote, + TAccountReferenceVote + >); } export type ParsedDeactivateDelinquentInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { - programAddress: Address; - accounts: { - /** Delegated stake account */ - stake: TAccountMetas[0]; - /** Delinquent vote account for the delegated stake account */ - delinquentVote: TAccountMetas[1]; - /** Reference vote account that has voted at least once in the last `MINIMUM_DELINQUENT_EPOCHS_FOR_DEACTIVATION` epochs */ - referenceVote: TAccountMetas[2]; - }; - data: DeactivateDelinquentInstructionData; + programAddress: Address; + accounts: { + /** Delegated stake account */ + stake: TAccountMetas[0]; + /** Delinquent vote account for the delegated stake account */ + delinquentVote: TAccountMetas[1]; + /** Reference vote account that has voted at least once in the last `MINIMUM_DELINQUENT_EPOCHS_FOR_DEACTIVATION` epochs */ + referenceVote: TAccountMetas[2]; + }; + data: DeactivateDelinquentInstructionData; }; export function parseDeactivateDelinquentInstruction< - TProgram extends string, - TAccountMetas extends readonly AccountMeta[], + TProgram extends string, + TAccountMetas extends readonly AccountMeta[], >( - instruction: Instruction & - InstructionWithAccounts & - InstructionWithData + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, ): ParsedDeactivateDelinquentInstruction { - if (instruction.accounts.length < 3) { - // TODO: Coded error. - throw new Error('Not enough accounts'); - } - let accountIndex = 0; - const getNextAccount = () => { - const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; - accountIndex += 1; - return accountMeta; - }; - return { - programAddress: instruction.programAddress, - accounts: { - stake: getNextAccount(), - delinquentVote: getNextAccount(), - referenceVote: getNextAccount(), - }, - data: getDeactivateDelinquentInstructionDataDecoder().decode( - instruction.data - ), - }; + if (instruction.accounts.length < 3) { + // TODO: Coded error. + throw new Error('Not enough accounts'); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { stake: getNextAccount(), delinquentVote: getNextAccount(), referenceVote: getNextAccount() }, + data: getDeactivateDelinquentInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/instructions/delegateStake.ts b/clients/js/src/generated/instructions/delegateStake.ts index 1797f2fe..bab2139f 100644 --- a/clients/js/src/generated/instructions/delegateStake.ts +++ b/clients/js/src/generated/instructions/delegateStake.ts @@ -7,26 +7,26 @@ */ import { - combineCodec, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - transformEncoder, - type AccountMeta, - type AccountSignerMeta, - type Address, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type ReadonlyAccount, - type ReadonlySignerAccount, - type ReadonlyUint8Array, - type TransactionSigner, - type WritableAccount, + combineCodec, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlySignerAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; @@ -34,163 +34,97 @@ import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; export const DELEGATE_STAKE_DISCRIMINATOR = 2; export function getDelegateStakeDiscriminatorBytes() { - return getU32Encoder().encode(DELEGATE_STAKE_DISCRIMINATOR); + return getU32Encoder().encode(DELEGATE_STAKE_DISCRIMINATOR); } export type DelegateStakeInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountStake extends string | AccountMeta = string, - TAccountVote extends string | AccountMeta = string, - TAccountClockSysvar extends - | string - | AccountMeta = 'SysvarC1ock11111111111111111111111111111111', - TAccountStakeHistory extends - | string - | AccountMeta = 'SysvarStakeHistory1111111111111111111111111', - TAccountUnused extends string | AccountMeta = string, - TAccountStakeAuthority extends string | AccountMeta = string, - TRemainingAccounts extends readonly AccountMeta[] = [], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string | AccountMeta = string, + TAccountVote extends string | AccountMeta = string, + TAccountClockSysvar extends string | AccountMeta = 'SysvarC1ock11111111111111111111111111111111', + TAccountStakeHistory extends string | AccountMeta = 'SysvarStakeHistory1111111111111111111111111', + TAccountUnused extends string | AccountMeta = string, + TAccountStakeAuthority extends string | AccountMeta = string, + TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & - InstructionWithData & - InstructionWithAccounts< - [ - TAccountStake extends string - ? WritableAccount - : TAccountStake, - TAccountVote extends string - ? ReadonlyAccount - : TAccountVote, - TAccountClockSysvar extends string - ? ReadonlyAccount - : TAccountClockSysvar, - TAccountStakeHistory extends string - ? ReadonlyAccount - : TAccountStakeHistory, - TAccountUnused extends string - ? ReadonlyAccount - : TAccountUnused, - TAccountStakeAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountStakeAuthority, - ...TRemainingAccounts, - ] - >; + InstructionWithData & + InstructionWithAccounts< + [ + TAccountStake extends string ? WritableAccount : TAccountStake, + TAccountVote extends string ? ReadonlyAccount : TAccountVote, + TAccountClockSysvar extends string ? ReadonlyAccount : TAccountClockSysvar, + TAccountStakeHistory extends string ? ReadonlyAccount : TAccountStakeHistory, + TAccountUnused extends string ? ReadonlyAccount : TAccountUnused, + TAccountStakeAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountStakeAuthority, + ...TRemainingAccounts, + ] + >; export type DelegateStakeInstructionData = { discriminator: number }; export type DelegateStakeInstructionDataArgs = {}; export function getDelegateStakeInstructionDataEncoder(): FixedSizeEncoder { - return transformEncoder( - getStructEncoder([['discriminator', getU32Encoder()]]), - (value) => ({ ...value, discriminator: DELEGATE_STAKE_DISCRIMINATOR }) - ); + return transformEncoder(getStructEncoder([['discriminator', getU32Encoder()]]), value => ({ + ...value, + discriminator: DELEGATE_STAKE_DISCRIMINATOR, + })); } export function getDelegateStakeInstructionDataDecoder(): FixedSizeDecoder { - return getStructDecoder([['discriminator', getU32Decoder()]]); + return getStructDecoder([['discriminator', getU32Decoder()]]); } export function getDelegateStakeInstructionDataCodec(): FixedSizeCodec< - DelegateStakeInstructionDataArgs, - DelegateStakeInstructionData + DelegateStakeInstructionDataArgs, + DelegateStakeInstructionData > { - return combineCodec( - getDelegateStakeInstructionDataEncoder(), - getDelegateStakeInstructionDataDecoder() - ); + return combineCodec(getDelegateStakeInstructionDataEncoder(), getDelegateStakeInstructionDataDecoder()); } export type DelegateStakeInput< - TAccountStake extends string = string, - TAccountVote extends string = string, - TAccountClockSysvar extends string = string, - TAccountStakeHistory extends string = string, - TAccountUnused extends string = string, - TAccountStakeAuthority extends string = string, + TAccountStake extends string = string, + TAccountVote extends string = string, + TAccountClockSysvar extends string = string, + TAccountStakeHistory extends string = string, + TAccountUnused extends string = string, + TAccountStakeAuthority extends string = string, > = { - /** Initialized stake account to be delegated */ - stake: Address; - /** Vote account to which this stake will be delegated */ - vote: Address; - /** Clock sysvar */ - clockSysvar?: Address; - /** Stake history sysvar that carries stake warmup/cooldown history */ - stakeHistory?: Address; - /** Unused account, formerly the stake config */ - unused: Address; - /** Stake authority */ - stakeAuthority: TransactionSigner; + /** Initialized stake account to be delegated */ + stake: Address; + /** Vote account to which this stake will be delegated */ + vote: Address; + /** Clock sysvar */ + clockSysvar?: Address; + /** Stake history sysvar that carries stake warmup/cooldown history */ + stakeHistory?: Address; + /** Unused account, formerly the stake config */ + unused: Address; + /** Stake authority */ + stakeAuthority: TransactionSigner; }; export function getDelegateStakeInstruction< - TAccountStake extends string, - TAccountVote extends string, - TAccountClockSysvar extends string, - TAccountStakeHistory extends string, - TAccountUnused extends string, - TAccountStakeAuthority extends string, - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string, + TAccountVote extends string, + TAccountClockSysvar extends string, + TAccountStakeHistory extends string, + TAccountUnused extends string, + TAccountStakeAuthority extends string, + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, >( - input: DelegateStakeInput< - TAccountStake, - TAccountVote, - TAccountClockSysvar, - TAccountStakeHistory, - TAccountUnused, - TAccountStakeAuthority - >, - config?: { programAddress?: TProgramAddress } + input: DelegateStakeInput< + TAccountStake, + TAccountVote, + TAccountClockSysvar, + TAccountStakeHistory, + TAccountUnused, + TAccountStakeAuthority + >, + config?: { programAddress?: TProgramAddress }, ): DelegateStakeInstruction< - TProgramAddress, - TAccountStake, - TAccountVote, - TAccountClockSysvar, - TAccountStakeHistory, - TAccountUnused, - TAccountStakeAuthority -> { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - - // Original accounts. - const originalAccounts = { - stake: { value: input.stake ?? null, isWritable: true }, - vote: { value: input.vote ?? null, isWritable: false }, - clockSysvar: { value: input.clockSysvar ?? null, isWritable: false }, - stakeHistory: { value: input.stakeHistory ?? null, isWritable: false }, - unused: { value: input.unused ?? null, isWritable: false }, - stakeAuthority: { value: input.stakeAuthority ?? null, isWritable: false }, - }; - const accounts = originalAccounts as Record< - keyof typeof originalAccounts, - ResolvedAccount - >; - - // Resolve default values. - if (!accounts.clockSysvar.value) { - accounts.clockSysvar.value = - 'SysvarC1ock11111111111111111111111111111111' as Address<'SysvarC1ock11111111111111111111111111111111'>; - } - if (!accounts.stakeHistory.value) { - accounts.stakeHistory.value = - 'SysvarStakeHistory1111111111111111111111111' as Address<'SysvarStakeHistory1111111111111111111111111'>; - } - - const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); - return Object.freeze({ - accounts: [ - getAccountMeta(accounts.stake), - getAccountMeta(accounts.vote), - getAccountMeta(accounts.clockSysvar), - getAccountMeta(accounts.stakeHistory), - getAccountMeta(accounts.unused), - getAccountMeta(accounts.stakeAuthority), - ], - data: getDelegateStakeInstructionDataEncoder().encode({}), - programAddress, - } as DelegateStakeInstruction< TProgramAddress, TAccountStake, TAccountVote, @@ -198,59 +132,101 @@ export function getDelegateStakeInstruction< TAccountStakeHistory, TAccountUnused, TAccountStakeAuthority - >); +> { + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + stake: { value: input.stake ?? null, isWritable: true }, + vote: { value: input.vote ?? null, isWritable: false }, + clockSysvar: { value: input.clockSysvar ?? null, isWritable: false }, + stakeHistory: { value: input.stakeHistory ?? null, isWritable: false }, + unused: { value: input.unused ?? null, isWritable: false }, + stakeAuthority: { value: input.stakeAuthority ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Resolve default values. + if (!accounts.clockSysvar.value) { + accounts.clockSysvar.value = + 'SysvarC1ock11111111111111111111111111111111' as Address<'SysvarC1ock11111111111111111111111111111111'>; + } + if (!accounts.stakeHistory.value) { + accounts.stakeHistory.value = + 'SysvarStakeHistory1111111111111111111111111' as Address<'SysvarStakeHistory1111111111111111111111111'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); + return Object.freeze({ + accounts: [ + getAccountMeta(accounts.stake), + getAccountMeta(accounts.vote), + getAccountMeta(accounts.clockSysvar), + getAccountMeta(accounts.stakeHistory), + getAccountMeta(accounts.unused), + getAccountMeta(accounts.stakeAuthority), + ], + data: getDelegateStakeInstructionDataEncoder().encode({}), + programAddress, + } as DelegateStakeInstruction< + TProgramAddress, + TAccountStake, + TAccountVote, + TAccountClockSysvar, + TAccountStakeHistory, + TAccountUnused, + TAccountStakeAuthority + >); } export type ParsedDelegateStakeInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { - programAddress: Address; - accounts: { - /** Initialized stake account to be delegated */ - stake: TAccountMetas[0]; - /** Vote account to which this stake will be delegated */ - vote: TAccountMetas[1]; - /** Clock sysvar */ - clockSysvar: TAccountMetas[2]; - /** Stake history sysvar that carries stake warmup/cooldown history */ - stakeHistory: TAccountMetas[3]; - /** Unused account, formerly the stake config */ - unused: TAccountMetas[4]; - /** Stake authority */ - stakeAuthority: TAccountMetas[5]; - }; - data: DelegateStakeInstructionData; + programAddress: Address; + accounts: { + /** Initialized stake account to be delegated */ + stake: TAccountMetas[0]; + /** Vote account to which this stake will be delegated */ + vote: TAccountMetas[1]; + /** Clock sysvar */ + clockSysvar: TAccountMetas[2]; + /** Stake history sysvar that carries stake warmup/cooldown history */ + stakeHistory: TAccountMetas[3]; + /** Unused account, formerly the stake config */ + unused: TAccountMetas[4]; + /** Stake authority */ + stakeAuthority: TAccountMetas[5]; + }; + data: DelegateStakeInstructionData; }; -export function parseDelegateStakeInstruction< - TProgram extends string, - TAccountMetas extends readonly AccountMeta[], ->( - instruction: Instruction & - InstructionWithAccounts & - InstructionWithData +export function parseDelegateStakeInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, ): ParsedDelegateStakeInstruction { - if (instruction.accounts.length < 6) { - // TODO: Coded error. - throw new Error('Not enough accounts'); - } - let accountIndex = 0; - const getNextAccount = () => { - const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; - accountIndex += 1; - return accountMeta; - }; - return { - programAddress: instruction.programAddress, - accounts: { - stake: getNextAccount(), - vote: getNextAccount(), - clockSysvar: getNextAccount(), - stakeHistory: getNextAccount(), - unused: getNextAccount(), - stakeAuthority: getNextAccount(), - }, - data: getDelegateStakeInstructionDataDecoder().decode(instruction.data), - }; + if (instruction.accounts.length < 6) { + // TODO: Coded error. + throw new Error('Not enough accounts'); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { + stake: getNextAccount(), + vote: getNextAccount(), + clockSysvar: getNextAccount(), + stakeHistory: getNextAccount(), + unused: getNextAccount(), + stakeAuthority: getNextAccount(), + }, + data: getDelegateStakeInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/instructions/getMinimumDelegation.ts b/clients/js/src/generated/instructions/getMinimumDelegation.ts index 6e1a2f5a..99071c1e 100644 --- a/clients/js/src/generated/instructions/getMinimumDelegation.ts +++ b/clients/js/src/generated/instructions/getMinimumDelegation.ts @@ -7,95 +7,84 @@ */ import { - combineCodec, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - transformEncoder, - type AccountMeta, - type Address, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type ReadonlyUint8Array, + combineCodec, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + transformEncoder, + type AccountMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyUint8Array, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; export const GET_MINIMUM_DELEGATION_DISCRIMINATOR = 13; export function getGetMinimumDelegationDiscriminatorBytes() { - return getU32Encoder().encode(GET_MINIMUM_DELEGATION_DISCRIMINATOR); + return getU32Encoder().encode(GET_MINIMUM_DELEGATION_DISCRIMINATOR); } export type GetMinimumDelegationInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TRemainingAccounts extends readonly AccountMeta[] = [], -> = Instruction & - InstructionWithData & - InstructionWithAccounts; + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TRemainingAccounts extends readonly AccountMeta[] = [], +> = Instruction & InstructionWithData & InstructionWithAccounts; export type GetMinimumDelegationInstructionData = { discriminator: number }; export type GetMinimumDelegationInstructionDataArgs = {}; export function getGetMinimumDelegationInstructionDataEncoder(): FixedSizeEncoder { - return transformEncoder( - getStructEncoder([['discriminator', getU32Encoder()]]), - (value) => ({ - ...value, - discriminator: GET_MINIMUM_DELEGATION_DISCRIMINATOR, - }) - ); + return transformEncoder(getStructEncoder([['discriminator', getU32Encoder()]]), value => ({ + ...value, + discriminator: GET_MINIMUM_DELEGATION_DISCRIMINATOR, + })); } export function getGetMinimumDelegationInstructionDataDecoder(): FixedSizeDecoder { - return getStructDecoder([['discriminator', getU32Decoder()]]); + return getStructDecoder([['discriminator', getU32Decoder()]]); } export function getGetMinimumDelegationInstructionDataCodec(): FixedSizeCodec< - GetMinimumDelegationInstructionDataArgs, - GetMinimumDelegationInstructionData + GetMinimumDelegationInstructionDataArgs, + GetMinimumDelegationInstructionData > { - return combineCodec( - getGetMinimumDelegationInstructionDataEncoder(), - getGetMinimumDelegationInstructionDataDecoder() - ); + return combineCodec( + getGetMinimumDelegationInstructionDataEncoder(), + getGetMinimumDelegationInstructionDataDecoder(), + ); } export type GetMinimumDelegationInput = {}; export function getGetMinimumDelegationInstruction< - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, ->(config?: { - programAddress?: TProgramAddress; -}): GetMinimumDelegationInstruction { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, +>(config?: { programAddress?: TProgramAddress }): GetMinimumDelegationInstruction { + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - return Object.freeze({ - data: getGetMinimumDelegationInstructionDataEncoder().encode({}), - programAddress, - } as GetMinimumDelegationInstruction); + return Object.freeze({ + data: getGetMinimumDelegationInstructionDataEncoder().encode({}), + programAddress, + } as GetMinimumDelegationInstruction); } -export type ParsedGetMinimumDelegationInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, -> = { - programAddress: Address; - data: GetMinimumDelegationInstructionData; +export type ParsedGetMinimumDelegationInstruction = { + programAddress: Address; + data: GetMinimumDelegationInstructionData; }; export function parseGetMinimumDelegationInstruction( - instruction: Instruction & InstructionWithData + instruction: Instruction & InstructionWithData, ): ParsedGetMinimumDelegationInstruction { - return { - programAddress: instruction.programAddress, - data: getGetMinimumDelegationInstructionDataDecoder().decode( - instruction.data - ), - }; + return { + programAddress: instruction.programAddress, + data: getGetMinimumDelegationInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/instructions/initialize.ts b/clients/js/src/generated/instructions/initialize.ts index 0e22930a..347dafe3 100644 --- a/clients/js/src/generated/instructions/initialize.ts +++ b/clients/js/src/generated/instructions/initialize.ts @@ -7,198 +7,164 @@ */ import { - combineCodec, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - transformEncoder, - type AccountMeta, - type Address, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type ReadonlyAccount, - type ReadonlyUint8Array, - type WritableAccount, + combineCodec, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + transformEncoder, + type AccountMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlyUint8Array, + type WritableAccount, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; import { - getAuthorizedDecoder, - getAuthorizedEncoder, - getLockupDecoder, - getLockupEncoder, - type Authorized, - type AuthorizedArgs, - type Lockup, - type LockupArgs, + getAuthorizedDecoder, + getAuthorizedEncoder, + getLockupDecoder, + getLockupEncoder, + type Authorized, + type AuthorizedArgs, + type Lockup, + type LockupArgs, } from '../types'; export const INITIALIZE_DISCRIMINATOR = 0; export function getInitializeDiscriminatorBytes() { - return getU32Encoder().encode(INITIALIZE_DISCRIMINATOR); + return getU32Encoder().encode(INITIALIZE_DISCRIMINATOR); } export type InitializeInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountStake extends string | AccountMeta = string, - TAccountRentSysvar extends - | string - | AccountMeta = 'SysvarRent111111111111111111111111111111111', - TRemainingAccounts extends readonly AccountMeta[] = [], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string | AccountMeta = string, + TAccountRentSysvar extends string | AccountMeta = 'SysvarRent111111111111111111111111111111111', + TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & - InstructionWithData & - InstructionWithAccounts< - [ - TAccountStake extends string - ? WritableAccount - : TAccountStake, - TAccountRentSysvar extends string - ? ReadonlyAccount - : TAccountRentSysvar, - ...TRemainingAccounts, - ] - >; - -export type InitializeInstructionData = { - discriminator: number; - arg0: Authorized; - arg1: Lockup; -}; + InstructionWithData & + InstructionWithAccounts< + [ + TAccountStake extends string ? WritableAccount : TAccountStake, + TAccountRentSysvar extends string ? ReadonlyAccount : TAccountRentSysvar, + ...TRemainingAccounts, + ] + >; -export type InitializeInstructionDataArgs = { - arg0: AuthorizedArgs; - arg1: LockupArgs; -}; +export type InitializeInstructionData = { discriminator: number; arg0: Authorized; arg1: Lockup }; + +export type InitializeInstructionDataArgs = { arg0: AuthorizedArgs; arg1: LockupArgs }; export function getInitializeInstructionDataEncoder(): FixedSizeEncoder { - return transformEncoder( - getStructEncoder([ - ['discriminator', getU32Encoder()], - ['arg0', getAuthorizedEncoder()], - ['arg1', getLockupEncoder()], - ]), - (value) => ({ ...value, discriminator: INITIALIZE_DISCRIMINATOR }) - ); + return transformEncoder( + getStructEncoder([ + ['discriminator', getU32Encoder()], + ['arg0', getAuthorizedEncoder()], + ['arg1', getLockupEncoder()], + ]), + value => ({ ...value, discriminator: INITIALIZE_DISCRIMINATOR }), + ); } export function getInitializeInstructionDataDecoder(): FixedSizeDecoder { - return getStructDecoder([ - ['discriminator', getU32Decoder()], - ['arg0', getAuthorizedDecoder()], - ['arg1', getLockupDecoder()], - ]); + return getStructDecoder([ + ['discriminator', getU32Decoder()], + ['arg0', getAuthorizedDecoder()], + ['arg1', getLockupDecoder()], + ]); } export function getInitializeInstructionDataCodec(): FixedSizeCodec< - InitializeInstructionDataArgs, - InitializeInstructionData + InitializeInstructionDataArgs, + InitializeInstructionData > { - return combineCodec( - getInitializeInstructionDataEncoder(), - getInitializeInstructionDataDecoder() - ); + return combineCodec(getInitializeInstructionDataEncoder(), getInitializeInstructionDataDecoder()); } -export type InitializeInput< - TAccountStake extends string = string, - TAccountRentSysvar extends string = string, -> = { - /** Uninitialized stake account */ - stake: Address; - /** Rent sysvar */ - rentSysvar?: Address; - arg0: InitializeInstructionDataArgs['arg0']; - arg1: InitializeInstructionDataArgs['arg1']; +export type InitializeInput = { + /** Uninitialized stake account */ + stake: Address; + /** Rent sysvar */ + rentSysvar?: Address; + arg0: InitializeInstructionDataArgs['arg0']; + arg1: InitializeInstructionDataArgs['arg1']; }; export function getInitializeInstruction< - TAccountStake extends string, - TAccountRentSysvar extends string, - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string, + TAccountRentSysvar extends string, + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, >( - input: InitializeInput, - config?: { programAddress?: TProgramAddress } + input: InitializeInput, + config?: { programAddress?: TProgramAddress }, ): InitializeInstruction { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - - // Original accounts. - const originalAccounts = { - stake: { value: input.stake ?? null, isWritable: true }, - rentSysvar: { value: input.rentSysvar ?? null, isWritable: false }, - }; - const accounts = originalAccounts as Record< - keyof typeof originalAccounts, - ResolvedAccount - >; - - // Original args. - const args = { ...input }; - - // Resolve default values. - if (!accounts.rentSysvar.value) { - accounts.rentSysvar.value = - 'SysvarRent111111111111111111111111111111111' as Address<'SysvarRent111111111111111111111111111111111'>; - } - - const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); - return Object.freeze({ - accounts: [ - getAccountMeta(accounts.stake), - getAccountMeta(accounts.rentSysvar), - ], - data: getInitializeInstructionDataEncoder().encode( - args as InitializeInstructionDataArgs - ), - programAddress, - } as InitializeInstruction< - TProgramAddress, - TAccountStake, - TAccountRentSysvar - >); + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + stake: { value: input.stake ?? null, isWritable: true }, + rentSysvar: { value: input.rentSysvar ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + // Resolve default values. + if (!accounts.rentSysvar.value) { + accounts.rentSysvar.value = + 'SysvarRent111111111111111111111111111111111' as Address<'SysvarRent111111111111111111111111111111111'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); + return Object.freeze({ + accounts: [getAccountMeta(accounts.stake), getAccountMeta(accounts.rentSysvar)], + data: getInitializeInstructionDataEncoder().encode(args as InitializeInstructionDataArgs), + programAddress, + } as InitializeInstruction); } export type ParsedInitializeInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { - programAddress: Address; - accounts: { - /** Uninitialized stake account */ - stake: TAccountMetas[0]; - /** Rent sysvar */ - rentSysvar: TAccountMetas[1]; - }; - data: InitializeInstructionData; + programAddress: Address; + accounts: { + /** Uninitialized stake account */ + stake: TAccountMetas[0]; + /** Rent sysvar */ + rentSysvar: TAccountMetas[1]; + }; + data: InitializeInstructionData; }; -export function parseInitializeInstruction< - TProgram extends string, - TAccountMetas extends readonly AccountMeta[], ->( - instruction: Instruction & - InstructionWithAccounts & - InstructionWithData +export function parseInitializeInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, ): ParsedInitializeInstruction { - if (instruction.accounts.length < 2) { - // TODO: Coded error. - throw new Error('Not enough accounts'); - } - let accountIndex = 0; - const getNextAccount = () => { - const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; - accountIndex += 1; - return accountMeta; - }; - return { - programAddress: instruction.programAddress, - accounts: { stake: getNextAccount(), rentSysvar: getNextAccount() }, - data: getInitializeInstructionDataDecoder().decode(instruction.data), - }; + if (instruction.accounts.length < 2) { + // TODO: Coded error. + throw new Error('Not enough accounts'); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { stake: getNextAccount(), rentSysvar: getNextAccount() }, + data: getInitializeInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/instructions/initializeChecked.ts b/clients/js/src/generated/instructions/initializeChecked.ts index 4b733d9e..a30a0f5d 100644 --- a/clients/js/src/generated/instructions/initializeChecked.ts +++ b/clients/js/src/generated/instructions/initializeChecked.ts @@ -7,26 +7,26 @@ */ import { - combineCodec, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - transformEncoder, - type AccountMeta, - type AccountSignerMeta, - type Address, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type ReadonlyAccount, - type ReadonlySignerAccount, - type ReadonlyUint8Array, - type TransactionSigner, - type WritableAccount, + combineCodec, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlySignerAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; @@ -34,188 +34,165 @@ import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; export const INITIALIZE_CHECKED_DISCRIMINATOR = 9; export function getInitializeCheckedDiscriminatorBytes() { - return getU32Encoder().encode(INITIALIZE_CHECKED_DISCRIMINATOR); + return getU32Encoder().encode(INITIALIZE_CHECKED_DISCRIMINATOR); } export type InitializeCheckedInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountStake extends string | AccountMeta = string, - TAccountRentSysvar extends - | string - | AccountMeta = 'SysvarRent111111111111111111111111111111111', - TAccountStakeAuthority extends string | AccountMeta = string, - TAccountWithdrawAuthority extends string | AccountMeta = string, - TRemainingAccounts extends readonly AccountMeta[] = [], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string | AccountMeta = string, + TAccountRentSysvar extends string | AccountMeta = 'SysvarRent111111111111111111111111111111111', + TAccountStakeAuthority extends string | AccountMeta = string, + TAccountWithdrawAuthority extends string | AccountMeta = string, + TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & - InstructionWithData & - InstructionWithAccounts< - [ - TAccountStake extends string - ? WritableAccount - : TAccountStake, - TAccountRentSysvar extends string - ? ReadonlyAccount - : TAccountRentSysvar, - TAccountStakeAuthority extends string - ? ReadonlyAccount - : TAccountStakeAuthority, - TAccountWithdrawAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountWithdrawAuthority, - ...TRemainingAccounts, - ] - >; + InstructionWithData & + InstructionWithAccounts< + [ + TAccountStake extends string ? WritableAccount : TAccountStake, + TAccountRentSysvar extends string ? ReadonlyAccount : TAccountRentSysvar, + TAccountStakeAuthority extends string ? ReadonlyAccount : TAccountStakeAuthority, + TAccountWithdrawAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountWithdrawAuthority, + ...TRemainingAccounts, + ] + >; export type InitializeCheckedInstructionData = { discriminator: number }; export type InitializeCheckedInstructionDataArgs = {}; export function getInitializeCheckedInstructionDataEncoder(): FixedSizeEncoder { - return transformEncoder( - getStructEncoder([['discriminator', getU32Encoder()]]), - (value) => ({ ...value, discriminator: INITIALIZE_CHECKED_DISCRIMINATOR }) - ); + return transformEncoder(getStructEncoder([['discriminator', getU32Encoder()]]), value => ({ + ...value, + discriminator: INITIALIZE_CHECKED_DISCRIMINATOR, + })); } export function getInitializeCheckedInstructionDataDecoder(): FixedSizeDecoder { - return getStructDecoder([['discriminator', getU32Decoder()]]); + return getStructDecoder([['discriminator', getU32Decoder()]]); } export function getInitializeCheckedInstructionDataCodec(): FixedSizeCodec< - InitializeCheckedInstructionDataArgs, - InitializeCheckedInstructionData + InitializeCheckedInstructionDataArgs, + InitializeCheckedInstructionData > { - return combineCodec( - getInitializeCheckedInstructionDataEncoder(), - getInitializeCheckedInstructionDataDecoder() - ); + return combineCodec(getInitializeCheckedInstructionDataEncoder(), getInitializeCheckedInstructionDataDecoder()); } export type InitializeCheckedInput< - TAccountStake extends string = string, - TAccountRentSysvar extends string = string, - TAccountStakeAuthority extends string = string, - TAccountWithdrawAuthority extends string = string, + TAccountStake extends string = string, + TAccountRentSysvar extends string = string, + TAccountStakeAuthority extends string = string, + TAccountWithdrawAuthority extends string = string, > = { - /** Uninitialized stake account */ - stake: Address; - /** Rent sysvar */ - rentSysvar?: Address; - /** The stake authority */ - stakeAuthority: Address; - /** The withdraw authority */ - withdrawAuthority: TransactionSigner; + /** Uninitialized stake account */ + stake: Address; + /** Rent sysvar */ + rentSysvar?: Address; + /** The stake authority */ + stakeAuthority: Address; + /** The withdraw authority */ + withdrawAuthority: TransactionSigner; }; export function getInitializeCheckedInstruction< - TAccountStake extends string, - TAccountRentSysvar extends string, - TAccountStakeAuthority extends string, - TAccountWithdrawAuthority extends string, - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string, + TAccountRentSysvar extends string, + TAccountStakeAuthority extends string, + TAccountWithdrawAuthority extends string, + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, >( - input: InitializeCheckedInput< - TAccountStake, - TAccountRentSysvar, - TAccountStakeAuthority, - TAccountWithdrawAuthority - >, - config?: { programAddress?: TProgramAddress } + input: InitializeCheckedInput, + config?: { programAddress?: TProgramAddress }, ): InitializeCheckedInstruction< - TProgramAddress, - TAccountStake, - TAccountRentSysvar, - TAccountStakeAuthority, - TAccountWithdrawAuthority -> { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - - // Original accounts. - const originalAccounts = { - stake: { value: input.stake ?? null, isWritable: true }, - rentSysvar: { value: input.rentSysvar ?? null, isWritable: false }, - stakeAuthority: { value: input.stakeAuthority ?? null, isWritable: false }, - withdrawAuthority: { - value: input.withdrawAuthority ?? null, - isWritable: false, - }, - }; - const accounts = originalAccounts as Record< - keyof typeof originalAccounts, - ResolvedAccount - >; - - // Resolve default values. - if (!accounts.rentSysvar.value) { - accounts.rentSysvar.value = - 'SysvarRent111111111111111111111111111111111' as Address<'SysvarRent111111111111111111111111111111111'>; - } - - const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); - return Object.freeze({ - accounts: [ - getAccountMeta(accounts.stake), - getAccountMeta(accounts.rentSysvar), - getAccountMeta(accounts.stakeAuthority), - getAccountMeta(accounts.withdrawAuthority), - ], - data: getInitializeCheckedInstructionDataEncoder().encode({}), - programAddress, - } as InitializeCheckedInstruction< TProgramAddress, TAccountStake, TAccountRentSysvar, TAccountStakeAuthority, TAccountWithdrawAuthority - >); +> { + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + stake: { value: input.stake ?? null, isWritable: true }, + rentSysvar: { value: input.rentSysvar ?? null, isWritable: false }, + stakeAuthority: { value: input.stakeAuthority ?? null, isWritable: false }, + withdrawAuthority: { value: input.withdrawAuthority ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Resolve default values. + if (!accounts.rentSysvar.value) { + accounts.rentSysvar.value = + 'SysvarRent111111111111111111111111111111111' as Address<'SysvarRent111111111111111111111111111111111'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); + return Object.freeze({ + accounts: [ + getAccountMeta(accounts.stake), + getAccountMeta(accounts.rentSysvar), + getAccountMeta(accounts.stakeAuthority), + getAccountMeta(accounts.withdrawAuthority), + ], + data: getInitializeCheckedInstructionDataEncoder().encode({}), + programAddress, + } as InitializeCheckedInstruction< + TProgramAddress, + TAccountStake, + TAccountRentSysvar, + TAccountStakeAuthority, + TAccountWithdrawAuthority + >); } export type ParsedInitializeCheckedInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { - programAddress: Address; - accounts: { - /** Uninitialized stake account */ - stake: TAccountMetas[0]; - /** Rent sysvar */ - rentSysvar: TAccountMetas[1]; - /** The stake authority */ - stakeAuthority: TAccountMetas[2]; - /** The withdraw authority */ - withdrawAuthority: TAccountMetas[3]; - }; - data: InitializeCheckedInstructionData; + programAddress: Address; + accounts: { + /** Uninitialized stake account */ + stake: TAccountMetas[0]; + /** Rent sysvar */ + rentSysvar: TAccountMetas[1]; + /** The stake authority */ + stakeAuthority: TAccountMetas[2]; + /** The withdraw authority */ + withdrawAuthority: TAccountMetas[3]; + }; + data: InitializeCheckedInstructionData; }; export function parseInitializeCheckedInstruction< - TProgram extends string, - TAccountMetas extends readonly AccountMeta[], + TProgram extends string, + TAccountMetas extends readonly AccountMeta[], >( - instruction: Instruction & - InstructionWithAccounts & - InstructionWithData + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, ): ParsedInitializeCheckedInstruction { - if (instruction.accounts.length < 4) { - // TODO: Coded error. - throw new Error('Not enough accounts'); - } - let accountIndex = 0; - const getNextAccount = () => { - const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; - accountIndex += 1; - return accountMeta; - }; - return { - programAddress: instruction.programAddress, - accounts: { - stake: getNextAccount(), - rentSysvar: getNextAccount(), - stakeAuthority: getNextAccount(), - withdrawAuthority: getNextAccount(), - }, - data: getInitializeCheckedInstructionDataDecoder().decode(instruction.data), - }; + if (instruction.accounts.length < 4) { + // TODO: Coded error. + throw new Error('Not enough accounts'); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { + stake: getNextAccount(), + rentSysvar: getNextAccount(), + stakeAuthority: getNextAccount(), + withdrawAuthority: getNextAccount(), + }, + data: getInitializeCheckedInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/instructions/merge.ts b/clients/js/src/generated/instructions/merge.ts index f792d606..b72dc0a4 100644 --- a/clients/js/src/generated/instructions/merge.ts +++ b/clients/js/src/generated/instructions/merge.ts @@ -7,26 +7,26 @@ */ import { - combineCodec, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - transformEncoder, - type AccountMeta, - type AccountSignerMeta, - type Address, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type ReadonlyAccount, - type ReadonlySignerAccount, - type ReadonlyUint8Array, - type TransactionSigner, - type WritableAccount, + combineCodec, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlySignerAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; @@ -34,210 +34,184 @@ import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; export const MERGE_DISCRIMINATOR = 7; export function getMergeDiscriminatorBytes() { - return getU32Encoder().encode(MERGE_DISCRIMINATOR); + return getU32Encoder().encode(MERGE_DISCRIMINATOR); } export type MergeInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountDestinationStake extends string | AccountMeta = string, - TAccountSourceStake extends string | AccountMeta = string, - TAccountClockSysvar extends - | string - | AccountMeta = 'SysvarC1ock11111111111111111111111111111111', - TAccountStakeHistory extends - | string - | AccountMeta = 'SysvarStakeHistory1111111111111111111111111', - TAccountStakeAuthority extends string | AccountMeta = string, - TRemainingAccounts extends readonly AccountMeta[] = [], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountDestinationStake extends string | AccountMeta = string, + TAccountSourceStake extends string | AccountMeta = string, + TAccountClockSysvar extends string | AccountMeta = 'SysvarC1ock11111111111111111111111111111111', + TAccountStakeHistory extends string | AccountMeta = 'SysvarStakeHistory1111111111111111111111111', + TAccountStakeAuthority extends string | AccountMeta = string, + TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & - InstructionWithData & - InstructionWithAccounts< - [ - TAccountDestinationStake extends string - ? WritableAccount - : TAccountDestinationStake, - TAccountSourceStake extends string - ? WritableAccount - : TAccountSourceStake, - TAccountClockSysvar extends string - ? ReadonlyAccount - : TAccountClockSysvar, - TAccountStakeHistory extends string - ? ReadonlyAccount - : TAccountStakeHistory, - TAccountStakeAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountStakeAuthority, - ...TRemainingAccounts, - ] - >; + InstructionWithData & + InstructionWithAccounts< + [ + TAccountDestinationStake extends string + ? WritableAccount + : TAccountDestinationStake, + TAccountSourceStake extends string ? WritableAccount : TAccountSourceStake, + TAccountClockSysvar extends string ? ReadonlyAccount : TAccountClockSysvar, + TAccountStakeHistory extends string ? ReadonlyAccount : TAccountStakeHistory, + TAccountStakeAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountStakeAuthority, + ...TRemainingAccounts, + ] + >; export type MergeInstructionData = { discriminator: number }; export type MergeInstructionDataArgs = {}; export function getMergeInstructionDataEncoder(): FixedSizeEncoder { - return transformEncoder( - getStructEncoder([['discriminator', getU32Encoder()]]), - (value) => ({ ...value, discriminator: MERGE_DISCRIMINATOR }) - ); + return transformEncoder(getStructEncoder([['discriminator', getU32Encoder()]]), value => ({ + ...value, + discriminator: MERGE_DISCRIMINATOR, + })); } export function getMergeInstructionDataDecoder(): FixedSizeDecoder { - return getStructDecoder([['discriminator', getU32Decoder()]]); + return getStructDecoder([['discriminator', getU32Decoder()]]); } -export function getMergeInstructionDataCodec(): FixedSizeCodec< - MergeInstructionDataArgs, - MergeInstructionData -> { - return combineCodec( - getMergeInstructionDataEncoder(), - getMergeInstructionDataDecoder() - ); +export function getMergeInstructionDataCodec(): FixedSizeCodec { + return combineCodec(getMergeInstructionDataEncoder(), getMergeInstructionDataDecoder()); } export type MergeInput< - TAccountDestinationStake extends string = string, - TAccountSourceStake extends string = string, - TAccountClockSysvar extends string = string, - TAccountStakeHistory extends string = string, - TAccountStakeAuthority extends string = string, + TAccountDestinationStake extends string = string, + TAccountSourceStake extends string = string, + TAccountClockSysvar extends string = string, + TAccountStakeHistory extends string = string, + TAccountStakeAuthority extends string = string, > = { - /** Destination stake account for the merge */ - destinationStake: Address; - /** Source stake account for to merge. This account will be drained */ - sourceStake: Address; - /** Clock sysvar */ - clockSysvar?: Address; - /** Stake history sysvar that carries stake warmup/cooldown history */ - stakeHistory?: Address; - /** Stake authority */ - stakeAuthority: TransactionSigner; + /** Destination stake account for the merge */ + destinationStake: Address; + /** Source stake account for to merge. This account will be drained */ + sourceStake: Address; + /** Clock sysvar */ + clockSysvar?: Address; + /** Stake history sysvar that carries stake warmup/cooldown history */ + stakeHistory?: Address; + /** Stake authority */ + stakeAuthority: TransactionSigner; }; export function getMergeInstruction< - TAccountDestinationStake extends string, - TAccountSourceStake extends string, - TAccountClockSysvar extends string, - TAccountStakeHistory extends string, - TAccountStakeAuthority extends string, - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, + TAccountDestinationStake extends string, + TAccountSourceStake extends string, + TAccountClockSysvar extends string, + TAccountStakeHistory extends string, + TAccountStakeAuthority extends string, + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, >( - input: MergeInput< - TAccountDestinationStake, - TAccountSourceStake, - TAccountClockSysvar, - TAccountStakeHistory, - TAccountStakeAuthority - >, - config?: { programAddress?: TProgramAddress } + input: MergeInput< + TAccountDestinationStake, + TAccountSourceStake, + TAccountClockSysvar, + TAccountStakeHistory, + TAccountStakeAuthority + >, + config?: { programAddress?: TProgramAddress }, ): MergeInstruction< - TProgramAddress, - TAccountDestinationStake, - TAccountSourceStake, - TAccountClockSysvar, - TAccountStakeHistory, - TAccountStakeAuthority -> { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - - // Original accounts. - const originalAccounts = { - destinationStake: { - value: input.destinationStake ?? null, - isWritable: true, - }, - sourceStake: { value: input.sourceStake ?? null, isWritable: true }, - clockSysvar: { value: input.clockSysvar ?? null, isWritable: false }, - stakeHistory: { value: input.stakeHistory ?? null, isWritable: false }, - stakeAuthority: { value: input.stakeAuthority ?? null, isWritable: false }, - }; - const accounts = originalAccounts as Record< - keyof typeof originalAccounts, - ResolvedAccount - >; - - // Resolve default values. - if (!accounts.clockSysvar.value) { - accounts.clockSysvar.value = - 'SysvarC1ock11111111111111111111111111111111' as Address<'SysvarC1ock11111111111111111111111111111111'>; - } - if (!accounts.stakeHistory.value) { - accounts.stakeHistory.value = - 'SysvarStakeHistory1111111111111111111111111' as Address<'SysvarStakeHistory1111111111111111111111111'>; - } - - const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); - return Object.freeze({ - accounts: [ - getAccountMeta(accounts.destinationStake), - getAccountMeta(accounts.sourceStake), - getAccountMeta(accounts.clockSysvar), - getAccountMeta(accounts.stakeHistory), - getAccountMeta(accounts.stakeAuthority), - ], - data: getMergeInstructionDataEncoder().encode({}), - programAddress, - } as MergeInstruction< TProgramAddress, TAccountDestinationStake, TAccountSourceStake, TAccountClockSysvar, TAccountStakeHistory, TAccountStakeAuthority - >); +> { + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + destinationStake: { value: input.destinationStake ?? null, isWritable: true }, + sourceStake: { value: input.sourceStake ?? null, isWritable: true }, + clockSysvar: { value: input.clockSysvar ?? null, isWritable: false }, + stakeHistory: { value: input.stakeHistory ?? null, isWritable: false }, + stakeAuthority: { value: input.stakeAuthority ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Resolve default values. + if (!accounts.clockSysvar.value) { + accounts.clockSysvar.value = + 'SysvarC1ock11111111111111111111111111111111' as Address<'SysvarC1ock11111111111111111111111111111111'>; + } + if (!accounts.stakeHistory.value) { + accounts.stakeHistory.value = + 'SysvarStakeHistory1111111111111111111111111' as Address<'SysvarStakeHistory1111111111111111111111111'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); + return Object.freeze({ + accounts: [ + getAccountMeta(accounts.destinationStake), + getAccountMeta(accounts.sourceStake), + getAccountMeta(accounts.clockSysvar), + getAccountMeta(accounts.stakeHistory), + getAccountMeta(accounts.stakeAuthority), + ], + data: getMergeInstructionDataEncoder().encode({}), + programAddress, + } as MergeInstruction< + TProgramAddress, + TAccountDestinationStake, + TAccountSourceStake, + TAccountClockSysvar, + TAccountStakeHistory, + TAccountStakeAuthority + >); } export type ParsedMergeInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { - programAddress: Address; - accounts: { - /** Destination stake account for the merge */ - destinationStake: TAccountMetas[0]; - /** Source stake account for to merge. This account will be drained */ - sourceStake: TAccountMetas[1]; - /** Clock sysvar */ - clockSysvar: TAccountMetas[2]; - /** Stake history sysvar that carries stake warmup/cooldown history */ - stakeHistory: TAccountMetas[3]; - /** Stake authority */ - stakeAuthority: TAccountMetas[4]; - }; - data: MergeInstructionData; + programAddress: Address; + accounts: { + /** Destination stake account for the merge */ + destinationStake: TAccountMetas[0]; + /** Source stake account for to merge. This account will be drained */ + sourceStake: TAccountMetas[1]; + /** Clock sysvar */ + clockSysvar: TAccountMetas[2]; + /** Stake history sysvar that carries stake warmup/cooldown history */ + stakeHistory: TAccountMetas[3]; + /** Stake authority */ + stakeAuthority: TAccountMetas[4]; + }; + data: MergeInstructionData; }; -export function parseMergeInstruction< - TProgram extends string, - TAccountMetas extends readonly AccountMeta[], ->( - instruction: Instruction & - InstructionWithAccounts & - InstructionWithData +export function parseMergeInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, ): ParsedMergeInstruction { - if (instruction.accounts.length < 5) { - // TODO: Coded error. - throw new Error('Not enough accounts'); - } - let accountIndex = 0; - const getNextAccount = () => { - const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; - accountIndex += 1; - return accountMeta; - }; - return { - programAddress: instruction.programAddress, - accounts: { - destinationStake: getNextAccount(), - sourceStake: getNextAccount(), - clockSysvar: getNextAccount(), - stakeHistory: getNextAccount(), - stakeAuthority: getNextAccount(), - }, - data: getMergeInstructionDataDecoder().decode(instruction.data), - }; + if (instruction.accounts.length < 5) { + // TODO: Coded error. + throw new Error('Not enough accounts'); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { + destinationStake: getNextAccount(), + sourceStake: getNextAccount(), + clockSysvar: getNextAccount(), + stakeHistory: getNextAccount(), + stakeAuthority: getNextAccount(), + }, + data: getMergeInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/instructions/moveLamports.ts b/clients/js/src/generated/instructions/moveLamports.ts index 3261bb91..fe9fe212 100644 --- a/clients/js/src/generated/instructions/moveLamports.ts +++ b/clients/js/src/generated/instructions/moveLamports.ts @@ -7,27 +7,27 @@ */ import { - combineCodec, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - getU64Decoder, - getU64Encoder, - transformEncoder, - type AccountMeta, - type AccountSignerMeta, - type Address, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type ReadonlySignerAccount, - type ReadonlyUint8Array, - type TransactionSigner, - type WritableAccount, + combineCodec, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + getU64Decoder, + getU64Encoder, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlySignerAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; @@ -35,179 +35,150 @@ import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; export const MOVE_LAMPORTS_DISCRIMINATOR = 17; export function getMoveLamportsDiscriminatorBytes() { - return getU32Encoder().encode(MOVE_LAMPORTS_DISCRIMINATOR); + return getU32Encoder().encode(MOVE_LAMPORTS_DISCRIMINATOR); } export type MoveLamportsInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountSourceStake extends string | AccountMeta = string, - TAccountDestinationStake extends string | AccountMeta = string, - TAccountStakeAuthority extends string | AccountMeta = string, - TRemainingAccounts extends readonly AccountMeta[] = [], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountSourceStake extends string | AccountMeta = string, + TAccountDestinationStake extends string | AccountMeta = string, + TAccountStakeAuthority extends string | AccountMeta = string, + TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & - InstructionWithData & - InstructionWithAccounts< - [ - TAccountSourceStake extends string - ? WritableAccount - : TAccountSourceStake, - TAccountDestinationStake extends string - ? WritableAccount - : TAccountDestinationStake, - TAccountStakeAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountStakeAuthority, - ...TRemainingAccounts, - ] - >; - -export type MoveLamportsInstructionData = { - discriminator: number; - args: bigint; -}; + InstructionWithData & + InstructionWithAccounts< + [ + TAccountSourceStake extends string ? WritableAccount : TAccountSourceStake, + TAccountDestinationStake extends string + ? WritableAccount + : TAccountDestinationStake, + TAccountStakeAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountStakeAuthority, + ...TRemainingAccounts, + ] + >; + +export type MoveLamportsInstructionData = { discriminator: number; args: bigint }; export type MoveLamportsInstructionDataArgs = { args: number | bigint }; export function getMoveLamportsInstructionDataEncoder(): FixedSizeEncoder { - return transformEncoder( - getStructEncoder([ - ['discriminator', getU32Encoder()], - ['args', getU64Encoder()], - ]), - (value) => ({ ...value, discriminator: MOVE_LAMPORTS_DISCRIMINATOR }) - ); + return transformEncoder( + getStructEncoder([ + ['discriminator', getU32Encoder()], + ['args', getU64Encoder()], + ]), + value => ({ ...value, discriminator: MOVE_LAMPORTS_DISCRIMINATOR }), + ); } export function getMoveLamportsInstructionDataDecoder(): FixedSizeDecoder { - return getStructDecoder([ - ['discriminator', getU32Decoder()], - ['args', getU64Decoder()], - ]); + return getStructDecoder([ + ['discriminator', getU32Decoder()], + ['args', getU64Decoder()], + ]); } export function getMoveLamportsInstructionDataCodec(): FixedSizeCodec< - MoveLamportsInstructionDataArgs, - MoveLamportsInstructionData + MoveLamportsInstructionDataArgs, + MoveLamportsInstructionData > { - return combineCodec( - getMoveLamportsInstructionDataEncoder(), - getMoveLamportsInstructionDataDecoder() - ); + return combineCodec(getMoveLamportsInstructionDataEncoder(), getMoveLamportsInstructionDataDecoder()); } export type MoveLamportsInput< - TAccountSourceStake extends string = string, - TAccountDestinationStake extends string = string, - TAccountStakeAuthority extends string = string, + TAccountSourceStake extends string = string, + TAccountDestinationStake extends string = string, + TAccountStakeAuthority extends string = string, > = { - /** Active or inactive source stake account */ - sourceStake: Address; - /** Mergeable destination stake account */ - destinationStake: Address; - /** Stake authority */ - stakeAuthority: TransactionSigner; - args: MoveLamportsInstructionDataArgs['args']; + /** Active or inactive source stake account */ + sourceStake: Address; + /** Mergeable destination stake account */ + destinationStake: Address; + /** Stake authority */ + stakeAuthority: TransactionSigner; + args: MoveLamportsInstructionDataArgs['args']; }; export function getMoveLamportsInstruction< - TAccountSourceStake extends string, - TAccountDestinationStake extends string, - TAccountStakeAuthority extends string, - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, + TAccountSourceStake extends string, + TAccountDestinationStake extends string, + TAccountStakeAuthority extends string, + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, >( - input: MoveLamportsInput< - TAccountSourceStake, - TAccountDestinationStake, - TAccountStakeAuthority - >, - config?: { programAddress?: TProgramAddress } -): MoveLamportsInstruction< - TProgramAddress, - TAccountSourceStake, - TAccountDestinationStake, - TAccountStakeAuthority -> { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - - // Original accounts. - const originalAccounts = { - sourceStake: { value: input.sourceStake ?? null, isWritable: true }, - destinationStake: { - value: input.destinationStake ?? null, - isWritable: true, - }, - stakeAuthority: { value: input.stakeAuthority ?? null, isWritable: false }, - }; - const accounts = originalAccounts as Record< - keyof typeof originalAccounts, - ResolvedAccount - >; - - // Original args. - const args = { ...input }; - - const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); - return Object.freeze({ - accounts: [ - getAccountMeta(accounts.sourceStake), - getAccountMeta(accounts.destinationStake), - getAccountMeta(accounts.stakeAuthority), - ], - data: getMoveLamportsInstructionDataEncoder().encode( - args as MoveLamportsInstructionDataArgs - ), - programAddress, - } as MoveLamportsInstruction< - TProgramAddress, - TAccountSourceStake, - TAccountDestinationStake, - TAccountStakeAuthority - >); + input: MoveLamportsInput, + config?: { programAddress?: TProgramAddress }, +): MoveLamportsInstruction { + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + sourceStake: { value: input.sourceStake ?? null, isWritable: true }, + destinationStake: { value: input.destinationStake ?? null, isWritable: true }, + stakeAuthority: { value: input.stakeAuthority ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); + return Object.freeze({ + accounts: [ + getAccountMeta(accounts.sourceStake), + getAccountMeta(accounts.destinationStake), + getAccountMeta(accounts.stakeAuthority), + ], + data: getMoveLamportsInstructionDataEncoder().encode(args as MoveLamportsInstructionDataArgs), + programAddress, + } as MoveLamportsInstruction< + TProgramAddress, + TAccountSourceStake, + TAccountDestinationStake, + TAccountStakeAuthority + >); } export type ParsedMoveLamportsInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { - programAddress: Address; - accounts: { - /** Active or inactive source stake account */ - sourceStake: TAccountMetas[0]; - /** Mergeable destination stake account */ - destinationStake: TAccountMetas[1]; - /** Stake authority */ - stakeAuthority: TAccountMetas[2]; - }; - data: MoveLamportsInstructionData; + programAddress: Address; + accounts: { + /** Active or inactive source stake account */ + sourceStake: TAccountMetas[0]; + /** Mergeable destination stake account */ + destinationStake: TAccountMetas[1]; + /** Stake authority */ + stakeAuthority: TAccountMetas[2]; + }; + data: MoveLamportsInstructionData; }; -export function parseMoveLamportsInstruction< - TProgram extends string, - TAccountMetas extends readonly AccountMeta[], ->( - instruction: Instruction & - InstructionWithAccounts & - InstructionWithData +export function parseMoveLamportsInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, ): ParsedMoveLamportsInstruction { - if (instruction.accounts.length < 3) { - // TODO: Coded error. - throw new Error('Not enough accounts'); - } - let accountIndex = 0; - const getNextAccount = () => { - const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; - accountIndex += 1; - return accountMeta; - }; - return { - programAddress: instruction.programAddress, - accounts: { - sourceStake: getNextAccount(), - destinationStake: getNextAccount(), - stakeAuthority: getNextAccount(), - }, - data: getMoveLamportsInstructionDataDecoder().decode(instruction.data), - }; + if (instruction.accounts.length < 3) { + // TODO: Coded error. + throw new Error('Not enough accounts'); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { + sourceStake: getNextAccount(), + destinationStake: getNextAccount(), + stakeAuthority: getNextAccount(), + }, + data: getMoveLamportsInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/instructions/moveStake.ts b/clients/js/src/generated/instructions/moveStake.ts index e216194e..0724282c 100644 --- a/clients/js/src/generated/instructions/moveStake.ts +++ b/clients/js/src/generated/instructions/moveStake.ts @@ -7,27 +7,27 @@ */ import { - combineCodec, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - getU64Decoder, - getU64Encoder, - transformEncoder, - type AccountMeta, - type AccountSignerMeta, - type Address, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type ReadonlySignerAccount, - type ReadonlyUint8Array, - type TransactionSigner, - type WritableAccount, + combineCodec, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + getU64Decoder, + getU64Encoder, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlySignerAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; @@ -35,176 +35,145 @@ import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; export const MOVE_STAKE_DISCRIMINATOR = 16; export function getMoveStakeDiscriminatorBytes() { - return getU32Encoder().encode(MOVE_STAKE_DISCRIMINATOR); + return getU32Encoder().encode(MOVE_STAKE_DISCRIMINATOR); } export type MoveStakeInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountSourceStake extends string | AccountMeta = string, - TAccountDestinationStake extends string | AccountMeta = string, - TAccountStakeAuthority extends string | AccountMeta = string, - TRemainingAccounts extends readonly AccountMeta[] = [], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountSourceStake extends string | AccountMeta = string, + TAccountDestinationStake extends string | AccountMeta = string, + TAccountStakeAuthority extends string | AccountMeta = string, + TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & - InstructionWithData & - InstructionWithAccounts< - [ - TAccountSourceStake extends string - ? WritableAccount - : TAccountSourceStake, - TAccountDestinationStake extends string - ? WritableAccount - : TAccountDestinationStake, - TAccountStakeAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountStakeAuthority, - ...TRemainingAccounts, - ] - >; + InstructionWithData & + InstructionWithAccounts< + [ + TAccountSourceStake extends string ? WritableAccount : TAccountSourceStake, + TAccountDestinationStake extends string + ? WritableAccount + : TAccountDestinationStake, + TAccountStakeAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountStakeAuthority, + ...TRemainingAccounts, + ] + >; export type MoveStakeInstructionData = { discriminator: number; args: bigint }; export type MoveStakeInstructionDataArgs = { args: number | bigint }; export function getMoveStakeInstructionDataEncoder(): FixedSizeEncoder { - return transformEncoder( - getStructEncoder([ - ['discriminator', getU32Encoder()], - ['args', getU64Encoder()], - ]), - (value) => ({ ...value, discriminator: MOVE_STAKE_DISCRIMINATOR }) - ); + return transformEncoder( + getStructEncoder([ + ['discriminator', getU32Encoder()], + ['args', getU64Encoder()], + ]), + value => ({ ...value, discriminator: MOVE_STAKE_DISCRIMINATOR }), + ); } export function getMoveStakeInstructionDataDecoder(): FixedSizeDecoder { - return getStructDecoder([ - ['discriminator', getU32Decoder()], - ['args', getU64Decoder()], - ]); + return getStructDecoder([ + ['discriminator', getU32Decoder()], + ['args', getU64Decoder()], + ]); } export function getMoveStakeInstructionDataCodec(): FixedSizeCodec< - MoveStakeInstructionDataArgs, - MoveStakeInstructionData + MoveStakeInstructionDataArgs, + MoveStakeInstructionData > { - return combineCodec( - getMoveStakeInstructionDataEncoder(), - getMoveStakeInstructionDataDecoder() - ); + return combineCodec(getMoveStakeInstructionDataEncoder(), getMoveStakeInstructionDataDecoder()); } export type MoveStakeInput< - TAccountSourceStake extends string = string, - TAccountDestinationStake extends string = string, - TAccountStakeAuthority extends string = string, + TAccountSourceStake extends string = string, + TAccountDestinationStake extends string = string, + TAccountStakeAuthority extends string = string, > = { - /** Active source stake account */ - sourceStake: Address; - /** Active or inactive destination stake account */ - destinationStake: Address; - /** Stake authority */ - stakeAuthority: TransactionSigner; - args: MoveStakeInstructionDataArgs['args']; + /** Active source stake account */ + sourceStake: Address; + /** Active or inactive destination stake account */ + destinationStake: Address; + /** Stake authority */ + stakeAuthority: TransactionSigner; + args: MoveStakeInstructionDataArgs['args']; }; export function getMoveStakeInstruction< - TAccountSourceStake extends string, - TAccountDestinationStake extends string, - TAccountStakeAuthority extends string, - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, + TAccountSourceStake extends string, + TAccountDestinationStake extends string, + TAccountStakeAuthority extends string, + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, >( - input: MoveStakeInput< - TAccountSourceStake, - TAccountDestinationStake, - TAccountStakeAuthority - >, - config?: { programAddress?: TProgramAddress } -): MoveStakeInstruction< - TProgramAddress, - TAccountSourceStake, - TAccountDestinationStake, - TAccountStakeAuthority -> { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - - // Original accounts. - const originalAccounts = { - sourceStake: { value: input.sourceStake ?? null, isWritable: true }, - destinationStake: { - value: input.destinationStake ?? null, - isWritable: true, - }, - stakeAuthority: { value: input.stakeAuthority ?? null, isWritable: false }, - }; - const accounts = originalAccounts as Record< - keyof typeof originalAccounts, - ResolvedAccount - >; - - // Original args. - const args = { ...input }; - - const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); - return Object.freeze({ - accounts: [ - getAccountMeta(accounts.sourceStake), - getAccountMeta(accounts.destinationStake), - getAccountMeta(accounts.stakeAuthority), - ], - data: getMoveStakeInstructionDataEncoder().encode( - args as MoveStakeInstructionDataArgs - ), - programAddress, - } as MoveStakeInstruction< - TProgramAddress, - TAccountSourceStake, - TAccountDestinationStake, - TAccountStakeAuthority - >); + input: MoveStakeInput, + config?: { programAddress?: TProgramAddress }, +): MoveStakeInstruction { + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + sourceStake: { value: input.sourceStake ?? null, isWritable: true }, + destinationStake: { value: input.destinationStake ?? null, isWritable: true }, + stakeAuthority: { value: input.stakeAuthority ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); + return Object.freeze({ + accounts: [ + getAccountMeta(accounts.sourceStake), + getAccountMeta(accounts.destinationStake), + getAccountMeta(accounts.stakeAuthority), + ], + data: getMoveStakeInstructionDataEncoder().encode(args as MoveStakeInstructionDataArgs), + programAddress, + } as MoveStakeInstruction); } export type ParsedMoveStakeInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { - programAddress: Address; - accounts: { - /** Active source stake account */ - sourceStake: TAccountMetas[0]; - /** Active or inactive destination stake account */ - destinationStake: TAccountMetas[1]; - /** Stake authority */ - stakeAuthority: TAccountMetas[2]; - }; - data: MoveStakeInstructionData; + programAddress: Address; + accounts: { + /** Active source stake account */ + sourceStake: TAccountMetas[0]; + /** Active or inactive destination stake account */ + destinationStake: TAccountMetas[1]; + /** Stake authority */ + stakeAuthority: TAccountMetas[2]; + }; + data: MoveStakeInstructionData; }; -export function parseMoveStakeInstruction< - TProgram extends string, - TAccountMetas extends readonly AccountMeta[], ->( - instruction: Instruction & - InstructionWithAccounts & - InstructionWithData +export function parseMoveStakeInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, ): ParsedMoveStakeInstruction { - if (instruction.accounts.length < 3) { - // TODO: Coded error. - throw new Error('Not enough accounts'); - } - let accountIndex = 0; - const getNextAccount = () => { - const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; - accountIndex += 1; - return accountMeta; - }; - return { - programAddress: instruction.programAddress, - accounts: { - sourceStake: getNextAccount(), - destinationStake: getNextAccount(), - stakeAuthority: getNextAccount(), - }, - data: getMoveStakeInstructionDataDecoder().decode(instruction.data), - }; + if (instruction.accounts.length < 3) { + // TODO: Coded error. + throw new Error('Not enough accounts'); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { + sourceStake: getNextAccount(), + destinationStake: getNextAccount(), + stakeAuthority: getNextAccount(), + }, + data: getMoveStakeInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/instructions/setLockup.ts b/clients/js/src/generated/instructions/setLockup.ts index 18dc14b1..171f16b0 100644 --- a/clients/js/src/generated/instructions/setLockup.ts +++ b/clients/js/src/generated/instructions/setLockup.ts @@ -7,200 +7,177 @@ */ import { - combineCodec, - getAddressDecoder, - getAddressEncoder, - getOptionDecoder, - getOptionEncoder, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - transformEncoder, - type AccountMeta, - type AccountSignerMeta, - type Address, - type Codec, - type Decoder, - type Encoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type Option, - type OptionOrNullable, - type ReadonlySignerAccount, - type ReadonlyUint8Array, - type TransactionSigner, - type WritableAccount, + combineCodec, + getAddressDecoder, + getAddressEncoder, + getOptionDecoder, + getOptionEncoder, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type Codec, + type Decoder, + type Encoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type Option, + type OptionOrNullable, + type ReadonlySignerAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; import { - getEpochDecoder, - getEpochEncoder, - getUnixTimestampDecoder, - getUnixTimestampEncoder, - type Epoch, - type EpochArgs, - type UnixTimestamp, - type UnixTimestampArgs, + getEpochDecoder, + getEpochEncoder, + getUnixTimestampDecoder, + getUnixTimestampEncoder, + type Epoch, + type EpochArgs, + type UnixTimestamp, + type UnixTimestampArgs, } from '../types'; export const SET_LOCKUP_DISCRIMINATOR = 6; export function getSetLockupDiscriminatorBytes() { - return getU32Encoder().encode(SET_LOCKUP_DISCRIMINATOR); + return getU32Encoder().encode(SET_LOCKUP_DISCRIMINATOR); } export type SetLockupInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountStake extends string | AccountMeta = string, - TAccountAuthority extends string | AccountMeta = string, - TRemainingAccounts extends readonly AccountMeta[] = [], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string | AccountMeta = string, + TAccountAuthority extends string | AccountMeta = string, + TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & - InstructionWithData & - InstructionWithAccounts< - [ - TAccountStake extends string - ? WritableAccount - : TAccountStake, - TAccountAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountAuthority, - ...TRemainingAccounts, - ] - >; + InstructionWithData & + InstructionWithAccounts< + [ + TAccountStake extends string ? WritableAccount : TAccountStake, + TAccountAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountAuthority, + ...TRemainingAccounts, + ] + >; export type SetLockupInstructionData = { - discriminator: number; - unixTimestamp: Option; - epoch: Option; - custodian: Option
; + discriminator: number; + unixTimestamp: Option; + epoch: Option; + custodian: Option
; }; export type SetLockupInstructionDataArgs = { - unixTimestamp: OptionOrNullable; - epoch: OptionOrNullable; - custodian: OptionOrNullable
; + unixTimestamp: OptionOrNullable; + epoch: OptionOrNullable; + custodian: OptionOrNullable
; }; export function getSetLockupInstructionDataEncoder(): Encoder { - return transformEncoder( - getStructEncoder([ - ['discriminator', getU32Encoder()], - ['unixTimestamp', getOptionEncoder(getUnixTimestampEncoder())], - ['epoch', getOptionEncoder(getEpochEncoder())], - ['custodian', getOptionEncoder(getAddressEncoder())], - ]), - (value) => ({ ...value, discriminator: SET_LOCKUP_DISCRIMINATOR }) - ); + return transformEncoder( + getStructEncoder([ + ['discriminator', getU32Encoder()], + ['unixTimestamp', getOptionEncoder(getUnixTimestampEncoder())], + ['epoch', getOptionEncoder(getEpochEncoder())], + ['custodian', getOptionEncoder(getAddressEncoder())], + ]), + value => ({ ...value, discriminator: SET_LOCKUP_DISCRIMINATOR }), + ); } export function getSetLockupInstructionDataDecoder(): Decoder { - return getStructDecoder([ - ['discriminator', getU32Decoder()], - ['unixTimestamp', getOptionDecoder(getUnixTimestampDecoder())], - ['epoch', getOptionDecoder(getEpochDecoder())], - ['custodian', getOptionDecoder(getAddressDecoder())], - ]); + return getStructDecoder([ + ['discriminator', getU32Decoder()], + ['unixTimestamp', getOptionDecoder(getUnixTimestampDecoder())], + ['epoch', getOptionDecoder(getEpochDecoder())], + ['custodian', getOptionDecoder(getAddressDecoder())], + ]); } -export function getSetLockupInstructionDataCodec(): Codec< - SetLockupInstructionDataArgs, - SetLockupInstructionData -> { - return combineCodec( - getSetLockupInstructionDataEncoder(), - getSetLockupInstructionDataDecoder() - ); +export function getSetLockupInstructionDataCodec(): Codec { + return combineCodec(getSetLockupInstructionDataEncoder(), getSetLockupInstructionDataDecoder()); } -export type SetLockupInput< - TAccountStake extends string = string, - TAccountAuthority extends string = string, -> = { - /** Initialized stake account */ - stake: Address; - /** Lockup authority or withdraw authority */ - authority: TransactionSigner; - unixTimestamp: SetLockupInstructionDataArgs['unixTimestamp']; - epoch: SetLockupInstructionDataArgs['epoch']; - custodian: SetLockupInstructionDataArgs['custodian']; +export type SetLockupInput = { + /** Initialized stake account */ + stake: Address; + /** Lockup authority or withdraw authority */ + authority: TransactionSigner; + unixTimestamp: SetLockupInstructionDataArgs['unixTimestamp']; + epoch: SetLockupInstructionDataArgs['epoch']; + custodian: SetLockupInstructionDataArgs['custodian']; }; export function getSetLockupInstruction< - TAccountStake extends string, - TAccountAuthority extends string, - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string, + TAccountAuthority extends string, + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, >( - input: SetLockupInput, - config?: { programAddress?: TProgramAddress } + input: SetLockupInput, + config?: { programAddress?: TProgramAddress }, ): SetLockupInstruction { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - - // Original accounts. - const originalAccounts = { - stake: { value: input.stake ?? null, isWritable: true }, - authority: { value: input.authority ?? null, isWritable: false }, - }; - const accounts = originalAccounts as Record< - keyof typeof originalAccounts, - ResolvedAccount - >; - - // Original args. - const args = { ...input }; - - const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); - return Object.freeze({ - accounts: [ - getAccountMeta(accounts.stake), - getAccountMeta(accounts.authority), - ], - data: getSetLockupInstructionDataEncoder().encode( - args as SetLockupInstructionDataArgs - ), - programAddress, - } as SetLockupInstruction); + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + stake: { value: input.stake ?? null, isWritable: true }, + authority: { value: input.authority ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); + return Object.freeze({ + accounts: [getAccountMeta(accounts.stake), getAccountMeta(accounts.authority)], + data: getSetLockupInstructionDataEncoder().encode(args as SetLockupInstructionDataArgs), + programAddress, + } as SetLockupInstruction); } export type ParsedSetLockupInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { - programAddress: Address; - accounts: { - /** Initialized stake account */ - stake: TAccountMetas[0]; - /** Lockup authority or withdraw authority */ - authority: TAccountMetas[1]; - }; - data: SetLockupInstructionData; + programAddress: Address; + accounts: { + /** Initialized stake account */ + stake: TAccountMetas[0]; + /** Lockup authority or withdraw authority */ + authority: TAccountMetas[1]; + }; + data: SetLockupInstructionData; }; -export function parseSetLockupInstruction< - TProgram extends string, - TAccountMetas extends readonly AccountMeta[], ->( - instruction: Instruction & - InstructionWithAccounts & - InstructionWithData +export function parseSetLockupInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, ): ParsedSetLockupInstruction { - if (instruction.accounts.length < 2) { - // TODO: Coded error. - throw new Error('Not enough accounts'); - } - let accountIndex = 0; - const getNextAccount = () => { - const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; - accountIndex += 1; - return accountMeta; - }; - return { - programAddress: instruction.programAddress, - accounts: { stake: getNextAccount(), authority: getNextAccount() }, - data: getSetLockupInstructionDataDecoder().decode(instruction.data), - }; + if (instruction.accounts.length < 2) { + // TODO: Coded error. + throw new Error('Not enough accounts'); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { stake: getNextAccount(), authority: getNextAccount() }, + data: getSetLockupInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/instructions/setLockupChecked.ts b/clients/js/src/generated/instructions/setLockupChecked.ts index 7256b7ad..0cc83835 100644 --- a/clients/js/src/generated/instructions/setLockupChecked.ts +++ b/clients/js/src/generated/instructions/setLockupChecked.ts @@ -7,237 +7,201 @@ */ import { - combineCodec, - getOptionDecoder, - getOptionEncoder, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - transformEncoder, - type AccountMeta, - type AccountSignerMeta, - type Address, - type Codec, - type Decoder, - type Encoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type Option, - type OptionOrNullable, - type ReadonlySignerAccount, - type ReadonlyUint8Array, - type TransactionSigner, - type WritableAccount, + combineCodec, + getOptionDecoder, + getOptionEncoder, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type Codec, + type Decoder, + type Encoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type Option, + type OptionOrNullable, + type ReadonlySignerAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; import { - getEpochDecoder, - getEpochEncoder, - getUnixTimestampDecoder, - getUnixTimestampEncoder, - type Epoch, - type EpochArgs, - type UnixTimestamp, - type UnixTimestampArgs, + getEpochDecoder, + getEpochEncoder, + getUnixTimestampDecoder, + getUnixTimestampEncoder, + type Epoch, + type EpochArgs, + type UnixTimestamp, + type UnixTimestampArgs, } from '../types'; export const SET_LOCKUP_CHECKED_DISCRIMINATOR = 12; export function getSetLockupCheckedDiscriminatorBytes() { - return getU32Encoder().encode(SET_LOCKUP_CHECKED_DISCRIMINATOR); + return getU32Encoder().encode(SET_LOCKUP_CHECKED_DISCRIMINATOR); } export type SetLockupCheckedInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountStake extends string | AccountMeta = string, - TAccountAuthority extends string | AccountMeta = string, - TAccountNewAuthority extends - | string - | AccountMeta - | undefined = undefined, - TRemainingAccounts extends readonly AccountMeta[] = [], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string | AccountMeta = string, + TAccountAuthority extends string | AccountMeta = string, + TAccountNewAuthority extends string | AccountMeta | undefined = undefined, + TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & - InstructionWithData & - InstructionWithAccounts< - [ - TAccountStake extends string - ? WritableAccount - : TAccountStake, - TAccountAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountAuthority, - ...(TAccountNewAuthority extends undefined - ? [] - : [ - TAccountNewAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountNewAuthority, - ]), - ...TRemainingAccounts, - ] - >; + InstructionWithData & + InstructionWithAccounts< + [ + TAccountStake extends string ? WritableAccount : TAccountStake, + TAccountAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountAuthority, + ...(TAccountNewAuthority extends undefined + ? [] + : [ + TAccountNewAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountNewAuthority, + ]), + ...TRemainingAccounts, + ] + >; export type SetLockupCheckedInstructionData = { - discriminator: number; - unixTimestamp: Option; - epoch: Option; + discriminator: number; + unixTimestamp: Option; + epoch: Option; }; export type SetLockupCheckedInstructionDataArgs = { - unixTimestamp: OptionOrNullable; - epoch: OptionOrNullable; + unixTimestamp: OptionOrNullable; + epoch: OptionOrNullable; }; export function getSetLockupCheckedInstructionDataEncoder(): Encoder { - return transformEncoder( - getStructEncoder([ - ['discriminator', getU32Encoder()], - ['unixTimestamp', getOptionEncoder(getUnixTimestampEncoder())], - ['epoch', getOptionEncoder(getEpochEncoder())], - ]), - (value) => ({ ...value, discriminator: SET_LOCKUP_CHECKED_DISCRIMINATOR }) - ); + return transformEncoder( + getStructEncoder([ + ['discriminator', getU32Encoder()], + ['unixTimestamp', getOptionEncoder(getUnixTimestampEncoder())], + ['epoch', getOptionEncoder(getEpochEncoder())], + ]), + value => ({ ...value, discriminator: SET_LOCKUP_CHECKED_DISCRIMINATOR }), + ); } export function getSetLockupCheckedInstructionDataDecoder(): Decoder { - return getStructDecoder([ - ['discriminator', getU32Decoder()], - ['unixTimestamp', getOptionDecoder(getUnixTimestampDecoder())], - ['epoch', getOptionDecoder(getEpochDecoder())], - ]); + return getStructDecoder([ + ['discriminator', getU32Decoder()], + ['unixTimestamp', getOptionDecoder(getUnixTimestampDecoder())], + ['epoch', getOptionDecoder(getEpochDecoder())], + ]); } export function getSetLockupCheckedInstructionDataCodec(): Codec< - SetLockupCheckedInstructionDataArgs, - SetLockupCheckedInstructionData + SetLockupCheckedInstructionDataArgs, + SetLockupCheckedInstructionData > { - return combineCodec( - getSetLockupCheckedInstructionDataEncoder(), - getSetLockupCheckedInstructionDataDecoder() - ); + return combineCodec(getSetLockupCheckedInstructionDataEncoder(), getSetLockupCheckedInstructionDataDecoder()); } export type SetLockupCheckedInput< - TAccountStake extends string = string, - TAccountAuthority extends string = string, - TAccountNewAuthority extends string = string, + TAccountStake extends string = string, + TAccountAuthority extends string = string, + TAccountNewAuthority extends string = string, > = { - /** Initialized stake account */ - stake: Address; - /** Lockup authority or withdraw authority */ - authority: TransactionSigner; - /** New lockup authority */ - newAuthority?: TransactionSigner; - unixTimestamp: SetLockupCheckedInstructionDataArgs['unixTimestamp']; - epoch: SetLockupCheckedInstructionDataArgs['epoch']; + /** Initialized stake account */ + stake: Address; + /** Lockup authority or withdraw authority */ + authority: TransactionSigner; + /** New lockup authority */ + newAuthority?: TransactionSigner; + unixTimestamp: SetLockupCheckedInstructionDataArgs['unixTimestamp']; + epoch: SetLockupCheckedInstructionDataArgs['epoch']; }; export function getSetLockupCheckedInstruction< - TAccountStake extends string, - TAccountAuthority extends string, - TAccountNewAuthority extends string, - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string, + TAccountAuthority extends string, + TAccountNewAuthority extends string, + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, >( - input: SetLockupCheckedInput< - TAccountStake, - TAccountAuthority, - TAccountNewAuthority - >, - config?: { programAddress?: TProgramAddress } -): SetLockupCheckedInstruction< - TProgramAddress, - TAccountStake, - TAccountAuthority, - TAccountNewAuthority -> { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - - // Original accounts. - const originalAccounts = { - stake: { value: input.stake ?? null, isWritable: true }, - authority: { value: input.authority ?? null, isWritable: false }, - newAuthority: { value: input.newAuthority ?? null, isWritable: false }, - }; - const accounts = originalAccounts as Record< - keyof typeof originalAccounts, - ResolvedAccount - >; - - // Original args. - const args = { ...input }; - - const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); - return Object.freeze({ - accounts: [ - getAccountMeta(accounts.stake), - getAccountMeta(accounts.authority), - getAccountMeta(accounts.newAuthority), - ].filter((x: T | undefined): x is T => x !== undefined), - data: getSetLockupCheckedInstructionDataEncoder().encode( - args as SetLockupCheckedInstructionDataArgs - ), - programAddress, - } as SetLockupCheckedInstruction< - TProgramAddress, - TAccountStake, - TAccountAuthority, - TAccountNewAuthority - >); + input: SetLockupCheckedInput, + config?: { programAddress?: TProgramAddress }, +): SetLockupCheckedInstruction { + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + stake: { value: input.stake ?? null, isWritable: true }, + authority: { value: input.authority ?? null, isWritable: false }, + newAuthority: { value: input.newAuthority ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); + return Object.freeze({ + accounts: [ + getAccountMeta(accounts.stake), + getAccountMeta(accounts.authority), + getAccountMeta(accounts.newAuthority), + ].filter((x: T | undefined): x is T => x !== undefined), + data: getSetLockupCheckedInstructionDataEncoder().encode(args as SetLockupCheckedInstructionDataArgs), + programAddress, + } as SetLockupCheckedInstruction); } export type ParsedSetLockupCheckedInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { - programAddress: Address; - accounts: { - /** Initialized stake account */ - stake: TAccountMetas[0]; - /** Lockup authority or withdraw authority */ - authority: TAccountMetas[1]; - /** New lockup authority */ - newAuthority?: TAccountMetas[2] | undefined; - }; - data: SetLockupCheckedInstructionData; + programAddress: Address; + accounts: { + /** Initialized stake account */ + stake: TAccountMetas[0]; + /** Lockup authority or withdraw authority */ + authority: TAccountMetas[1]; + /** New lockup authority */ + newAuthority?: TAccountMetas[2] | undefined; + }; + data: SetLockupCheckedInstructionData; }; -export function parseSetLockupCheckedInstruction< - TProgram extends string, - TAccountMetas extends readonly AccountMeta[], ->( - instruction: Instruction & - InstructionWithAccounts & - InstructionWithData +export function parseSetLockupCheckedInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, ): ParsedSetLockupCheckedInstruction { - if (instruction.accounts.length < 2) { - // TODO: Coded error. - throw new Error('Not enough accounts'); - } - let accountIndex = 0; - const getNextAccount = () => { - const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; - accountIndex += 1; - return accountMeta; - }; - let optionalAccountsRemaining = instruction.accounts.length - 2; - const getNextOptionalAccount = () => { - if (optionalAccountsRemaining === 0) return undefined; - optionalAccountsRemaining -= 1; - return getNextAccount(); - }; - return { - programAddress: instruction.programAddress, - accounts: { - stake: getNextAccount(), - authority: getNextAccount(), - newAuthority: getNextOptionalAccount(), - }, - data: getSetLockupCheckedInstructionDataDecoder().decode(instruction.data), - }; + if (instruction.accounts.length < 2) { + // TODO: Coded error. + throw new Error('Not enough accounts'); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + let optionalAccountsRemaining = instruction.accounts.length - 2; + const getNextOptionalAccount = () => { + if (optionalAccountsRemaining === 0) return undefined; + optionalAccountsRemaining -= 1; + return getNextAccount(); + }; + return { + programAddress: instruction.programAddress, + accounts: { stake: getNextAccount(), authority: getNextAccount(), newAuthority: getNextOptionalAccount() }, + data: getSetLockupCheckedInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/instructions/split.ts b/clients/js/src/generated/instructions/split.ts index 7095c7a3..8afdc3b9 100644 --- a/clients/js/src/generated/instructions/split.ts +++ b/clients/js/src/generated/instructions/split.ts @@ -7,27 +7,27 @@ */ import { - combineCodec, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - getU64Decoder, - getU64Encoder, - transformEncoder, - type AccountMeta, - type AccountSignerMeta, - type Address, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type ReadonlySignerAccount, - type ReadonlyUint8Array, - type TransactionSigner, - type WritableAccount, + combineCodec, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + getU64Decoder, + getU64Encoder, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlySignerAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; @@ -35,169 +35,136 @@ import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; export const SPLIT_DISCRIMINATOR = 3; export function getSplitDiscriminatorBytes() { - return getU32Encoder().encode(SPLIT_DISCRIMINATOR); + return getU32Encoder().encode(SPLIT_DISCRIMINATOR); } export type SplitInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountStake extends string | AccountMeta = string, - TAccountSplitStake extends string | AccountMeta = string, - TAccountStakeAuthority extends string | AccountMeta = string, - TRemainingAccounts extends readonly AccountMeta[] = [], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string | AccountMeta = string, + TAccountSplitStake extends string | AccountMeta = string, + TAccountStakeAuthority extends string | AccountMeta = string, + TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & - InstructionWithData & - InstructionWithAccounts< - [ - TAccountStake extends string - ? WritableAccount - : TAccountStake, - TAccountSplitStake extends string - ? WritableAccount - : TAccountSplitStake, - TAccountStakeAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountStakeAuthority, - ...TRemainingAccounts, - ] - >; + InstructionWithData & + InstructionWithAccounts< + [ + TAccountStake extends string ? WritableAccount : TAccountStake, + TAccountSplitStake extends string ? WritableAccount : TAccountSplitStake, + TAccountStakeAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountStakeAuthority, + ...TRemainingAccounts, + ] + >; export type SplitInstructionData = { discriminator: number; args: bigint }; export type SplitInstructionDataArgs = { args: number | bigint }; export function getSplitInstructionDataEncoder(): FixedSizeEncoder { - return transformEncoder( - getStructEncoder([ - ['discriminator', getU32Encoder()], - ['args', getU64Encoder()], - ]), - (value) => ({ ...value, discriminator: SPLIT_DISCRIMINATOR }) - ); + return transformEncoder( + getStructEncoder([ + ['discriminator', getU32Encoder()], + ['args', getU64Encoder()], + ]), + value => ({ ...value, discriminator: SPLIT_DISCRIMINATOR }), + ); } export function getSplitInstructionDataDecoder(): FixedSizeDecoder { - return getStructDecoder([ - ['discriminator', getU32Decoder()], - ['args', getU64Decoder()], - ]); + return getStructDecoder([ + ['discriminator', getU32Decoder()], + ['args', getU64Decoder()], + ]); } -export function getSplitInstructionDataCodec(): FixedSizeCodec< - SplitInstructionDataArgs, - SplitInstructionData -> { - return combineCodec( - getSplitInstructionDataEncoder(), - getSplitInstructionDataDecoder() - ); +export function getSplitInstructionDataCodec(): FixedSizeCodec { + return combineCodec(getSplitInstructionDataEncoder(), getSplitInstructionDataDecoder()); } export type SplitInput< - TAccountStake extends string = string, - TAccountSplitStake extends string = string, - TAccountStakeAuthority extends string = string, + TAccountStake extends string = string, + TAccountSplitStake extends string = string, + TAccountStakeAuthority extends string = string, > = { - /** Stake account to be split; must be in the Initialized or Stake state */ - stake: Address; - /** Uninitialized stake account that will take the split-off amount */ - splitStake: Address; - /** Stake authority */ - stakeAuthority: TransactionSigner; - args: SplitInstructionDataArgs['args']; + /** Stake account to be split; must be in the Initialized or Stake state */ + stake: Address; + /** Uninitialized stake account that will take the split-off amount */ + splitStake: Address; + /** Stake authority */ + stakeAuthority: TransactionSigner; + args: SplitInstructionDataArgs['args']; }; export function getSplitInstruction< - TAccountStake extends string, - TAccountSplitStake extends string, - TAccountStakeAuthority extends string, - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string, + TAccountSplitStake extends string, + TAccountStakeAuthority extends string, + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, >( - input: SplitInput, - config?: { programAddress?: TProgramAddress } -): SplitInstruction< - TProgramAddress, - TAccountStake, - TAccountSplitStake, - TAccountStakeAuthority -> { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - - // Original accounts. - const originalAccounts = { - stake: { value: input.stake ?? null, isWritable: true }, - splitStake: { value: input.splitStake ?? null, isWritable: true }, - stakeAuthority: { value: input.stakeAuthority ?? null, isWritable: false }, - }; - const accounts = originalAccounts as Record< - keyof typeof originalAccounts, - ResolvedAccount - >; - - // Original args. - const args = { ...input }; - - const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); - return Object.freeze({ - accounts: [ - getAccountMeta(accounts.stake), - getAccountMeta(accounts.splitStake), - getAccountMeta(accounts.stakeAuthority), - ], - data: getSplitInstructionDataEncoder().encode( - args as SplitInstructionDataArgs - ), - programAddress, - } as SplitInstruction< - TProgramAddress, - TAccountStake, - TAccountSplitStake, - TAccountStakeAuthority - >); + input: SplitInput, + config?: { programAddress?: TProgramAddress }, +): SplitInstruction { + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + stake: { value: input.stake ?? null, isWritable: true }, + splitStake: { value: input.splitStake ?? null, isWritable: true }, + stakeAuthority: { value: input.stakeAuthority ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); + return Object.freeze({ + accounts: [ + getAccountMeta(accounts.stake), + getAccountMeta(accounts.splitStake), + getAccountMeta(accounts.stakeAuthority), + ], + data: getSplitInstructionDataEncoder().encode(args as SplitInstructionDataArgs), + programAddress, + } as SplitInstruction); } export type ParsedSplitInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { - programAddress: Address; - accounts: { - /** Stake account to be split; must be in the Initialized or Stake state */ - stake: TAccountMetas[0]; - /** Uninitialized stake account that will take the split-off amount */ - splitStake: TAccountMetas[1]; - /** Stake authority */ - stakeAuthority: TAccountMetas[2]; - }; - data: SplitInstructionData; + programAddress: Address; + accounts: { + /** Stake account to be split; must be in the Initialized or Stake state */ + stake: TAccountMetas[0]; + /** Uninitialized stake account that will take the split-off amount */ + splitStake: TAccountMetas[1]; + /** Stake authority */ + stakeAuthority: TAccountMetas[2]; + }; + data: SplitInstructionData; }; -export function parseSplitInstruction< - TProgram extends string, - TAccountMetas extends readonly AccountMeta[], ->( - instruction: Instruction & - InstructionWithAccounts & - InstructionWithData +export function parseSplitInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, ): ParsedSplitInstruction { - if (instruction.accounts.length < 3) { - // TODO: Coded error. - throw new Error('Not enough accounts'); - } - let accountIndex = 0; - const getNextAccount = () => { - const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; - accountIndex += 1; - return accountMeta; - }; - return { - programAddress: instruction.programAddress, - accounts: { - stake: getNextAccount(), - splitStake: getNextAccount(), - stakeAuthority: getNextAccount(), - }, - data: getSplitInstructionDataDecoder().decode(instruction.data), - }; + if (instruction.accounts.length < 3) { + // TODO: Coded error. + throw new Error('Not enough accounts'); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { stake: getNextAccount(), splitStake: getNextAccount(), stakeAuthority: getNextAccount() }, + data: getSplitInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/instructions/withdraw.ts b/clients/js/src/generated/instructions/withdraw.ts index e19c0b77..ddd7cf6b 100644 --- a/clients/js/src/generated/instructions/withdraw.ts +++ b/clients/js/src/generated/instructions/withdraw.ts @@ -7,28 +7,28 @@ */ import { - combineCodec, - getStructDecoder, - getStructEncoder, - getU32Decoder, - getU32Encoder, - getU64Decoder, - getU64Encoder, - transformEncoder, - type AccountMeta, - type AccountSignerMeta, - type Address, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, - type Instruction, - type InstructionWithAccounts, - type InstructionWithData, - type ReadonlyAccount, - type ReadonlySignerAccount, - type ReadonlyUint8Array, - type TransactionSigner, - type WritableAccount, + combineCodec, + getStructDecoder, + getStructEncoder, + getU32Decoder, + getU32Encoder, + getU64Decoder, + getU64Encoder, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlySignerAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, } from '@solana/kit'; import { STAKE_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; @@ -36,255 +36,221 @@ import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; export const WITHDRAW_DISCRIMINATOR = 4; export function getWithdrawDiscriminatorBytes() { - return getU32Encoder().encode(WITHDRAW_DISCRIMINATOR); + return getU32Encoder().encode(WITHDRAW_DISCRIMINATOR); } export type WithdrawInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountStake extends string | AccountMeta = string, - TAccountRecipient extends string | AccountMeta = string, - TAccountClockSysvar extends - | string - | AccountMeta = 'SysvarC1ock11111111111111111111111111111111', - TAccountStakeHistory extends - | string - | AccountMeta = 'SysvarStakeHistory1111111111111111111111111', - TAccountWithdrawAuthority extends string | AccountMeta = string, - TAccountLockupAuthority extends - | string - | AccountMeta - | undefined = undefined, - TRemainingAccounts extends readonly AccountMeta[] = [], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string | AccountMeta = string, + TAccountRecipient extends string | AccountMeta = string, + TAccountClockSysvar extends string | AccountMeta = 'SysvarC1ock11111111111111111111111111111111', + TAccountStakeHistory extends string | AccountMeta = 'SysvarStakeHistory1111111111111111111111111', + TAccountWithdrawAuthority extends string | AccountMeta = string, + TAccountLockupAuthority extends string | AccountMeta | undefined = undefined, + TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & - InstructionWithData & - InstructionWithAccounts< - [ - TAccountStake extends string - ? WritableAccount - : TAccountStake, - TAccountRecipient extends string - ? WritableAccount - : TAccountRecipient, - TAccountClockSysvar extends string - ? ReadonlyAccount - : TAccountClockSysvar, - TAccountStakeHistory extends string - ? ReadonlyAccount - : TAccountStakeHistory, - TAccountWithdrawAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountWithdrawAuthority, - ...(TAccountLockupAuthority extends undefined - ? [] - : [ - TAccountLockupAuthority extends string - ? ReadonlySignerAccount & - AccountSignerMeta - : TAccountLockupAuthority, - ]), - ...TRemainingAccounts, - ] - >; + InstructionWithData & + InstructionWithAccounts< + [ + TAccountStake extends string ? WritableAccount : TAccountStake, + TAccountRecipient extends string ? WritableAccount : TAccountRecipient, + TAccountClockSysvar extends string ? ReadonlyAccount : TAccountClockSysvar, + TAccountStakeHistory extends string ? ReadonlyAccount : TAccountStakeHistory, + TAccountWithdrawAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountWithdrawAuthority, + ...(TAccountLockupAuthority extends undefined + ? [] + : [ + TAccountLockupAuthority extends string + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountLockupAuthority, + ]), + ...TRemainingAccounts, + ] + >; export type WithdrawInstructionData = { discriminator: number; args: bigint }; export type WithdrawInstructionDataArgs = { args: number | bigint }; export function getWithdrawInstructionDataEncoder(): FixedSizeEncoder { - return transformEncoder( - getStructEncoder([ - ['discriminator', getU32Encoder()], - ['args', getU64Encoder()], - ]), - (value) => ({ ...value, discriminator: WITHDRAW_DISCRIMINATOR }) - ); + return transformEncoder( + getStructEncoder([ + ['discriminator', getU32Encoder()], + ['args', getU64Encoder()], + ]), + value => ({ ...value, discriminator: WITHDRAW_DISCRIMINATOR }), + ); } export function getWithdrawInstructionDataDecoder(): FixedSizeDecoder { - return getStructDecoder([ - ['discriminator', getU32Decoder()], - ['args', getU64Decoder()], - ]); + return getStructDecoder([ + ['discriminator', getU32Decoder()], + ['args', getU64Decoder()], + ]); } export function getWithdrawInstructionDataCodec(): FixedSizeCodec< - WithdrawInstructionDataArgs, - WithdrawInstructionData + WithdrawInstructionDataArgs, + WithdrawInstructionData > { - return combineCodec( - getWithdrawInstructionDataEncoder(), - getWithdrawInstructionDataDecoder() - ); + return combineCodec(getWithdrawInstructionDataEncoder(), getWithdrawInstructionDataDecoder()); } export type WithdrawInput< - TAccountStake extends string = string, - TAccountRecipient extends string = string, - TAccountClockSysvar extends string = string, - TAccountStakeHistory extends string = string, - TAccountWithdrawAuthority extends string = string, - TAccountLockupAuthority extends string = string, + TAccountStake extends string = string, + TAccountRecipient extends string = string, + TAccountClockSysvar extends string = string, + TAccountStakeHistory extends string = string, + TAccountWithdrawAuthority extends string = string, + TAccountLockupAuthority extends string = string, > = { - /** Stake account from which to withdraw */ - stake: Address; - /** Recipient account */ - recipient: Address; - /** Clock sysvar */ - clockSysvar?: Address; - /** Stake history sysvar that carries stake warmup/cooldown history */ - stakeHistory?: Address; - /** Withdraw authority */ - withdrawAuthority: TransactionSigner; - /** Lockup authority, if before lockup expiration */ - lockupAuthority?: TransactionSigner; - args: WithdrawInstructionDataArgs['args']; + /** Stake account from which to withdraw */ + stake: Address; + /** Recipient account */ + recipient: Address; + /** Clock sysvar */ + clockSysvar?: Address; + /** Stake history sysvar that carries stake warmup/cooldown history */ + stakeHistory?: Address; + /** Withdraw authority */ + withdrawAuthority: TransactionSigner; + /** Lockup authority, if before lockup expiration */ + lockupAuthority?: TransactionSigner; + args: WithdrawInstructionDataArgs['args']; }; export function getWithdrawInstruction< - TAccountStake extends string, - TAccountRecipient extends string, - TAccountClockSysvar extends string, - TAccountStakeHistory extends string, - TAccountWithdrawAuthority extends string, - TAccountLockupAuthority extends string, - TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, + TAccountStake extends string, + TAccountRecipient extends string, + TAccountClockSysvar extends string, + TAccountStakeHistory extends string, + TAccountWithdrawAuthority extends string, + TAccountLockupAuthority extends string, + TProgramAddress extends Address = typeof STAKE_PROGRAM_ADDRESS, >( - input: WithdrawInput< + input: WithdrawInput< + TAccountStake, + TAccountRecipient, + TAccountClockSysvar, + TAccountStakeHistory, + TAccountWithdrawAuthority, + TAccountLockupAuthority + >, + config?: { programAddress?: TProgramAddress }, +): WithdrawInstruction< + TProgramAddress, TAccountStake, TAccountRecipient, TAccountClockSysvar, TAccountStakeHistory, TAccountWithdrawAuthority, TAccountLockupAuthority - >, - config?: { programAddress?: TProgramAddress } -): WithdrawInstruction< - TProgramAddress, - TAccountStake, - TAccountRecipient, - TAccountClockSysvar, - TAccountStakeHistory, - TAccountWithdrawAuthority, - TAccountLockupAuthority > { - // Program address. - const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; + // Program address. + const programAddress = config?.programAddress ?? STAKE_PROGRAM_ADDRESS; - // Original accounts. - const originalAccounts = { - stake: { value: input.stake ?? null, isWritable: true }, - recipient: { value: input.recipient ?? null, isWritable: true }, - clockSysvar: { value: input.clockSysvar ?? null, isWritable: false }, - stakeHistory: { value: input.stakeHistory ?? null, isWritable: false }, - withdrawAuthority: { - value: input.withdrawAuthority ?? null, - isWritable: false, - }, - lockupAuthority: { - value: input.lockupAuthority ?? null, - isWritable: false, - }, - }; - const accounts = originalAccounts as Record< - keyof typeof originalAccounts, - ResolvedAccount - >; + // Original accounts. + const originalAccounts = { + stake: { value: input.stake ?? null, isWritable: true }, + recipient: { value: input.recipient ?? null, isWritable: true }, + clockSysvar: { value: input.clockSysvar ?? null, isWritable: false }, + stakeHistory: { value: input.stakeHistory ?? null, isWritable: false }, + withdrawAuthority: { value: input.withdrawAuthority ?? null, isWritable: false }, + lockupAuthority: { value: input.lockupAuthority ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; - // Original args. - const args = { ...input }; + // Original args. + const args = { ...input }; - // Resolve default values. - if (!accounts.clockSysvar.value) { - accounts.clockSysvar.value = - 'SysvarC1ock11111111111111111111111111111111' as Address<'SysvarC1ock11111111111111111111111111111111'>; - } - if (!accounts.stakeHistory.value) { - accounts.stakeHistory.value = - 'SysvarStakeHistory1111111111111111111111111' as Address<'SysvarStakeHistory1111111111111111111111111'>; - } + // Resolve default values. + if (!accounts.clockSysvar.value) { + accounts.clockSysvar.value = + 'SysvarC1ock11111111111111111111111111111111' as Address<'SysvarC1ock11111111111111111111111111111111'>; + } + if (!accounts.stakeHistory.value) { + accounts.stakeHistory.value = + 'SysvarStakeHistory1111111111111111111111111' as Address<'SysvarStakeHistory1111111111111111111111111'>; + } - const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); - return Object.freeze({ - accounts: [ - getAccountMeta(accounts.stake), - getAccountMeta(accounts.recipient), - getAccountMeta(accounts.clockSysvar), - getAccountMeta(accounts.stakeHistory), - getAccountMeta(accounts.withdrawAuthority), - getAccountMeta(accounts.lockupAuthority), - ].filter((x: T | undefined): x is T => x !== undefined), - data: getWithdrawInstructionDataEncoder().encode( - args as WithdrawInstructionDataArgs - ), - programAddress, - } as WithdrawInstruction< - TProgramAddress, - TAccountStake, - TAccountRecipient, - TAccountClockSysvar, - TAccountStakeHistory, - TAccountWithdrawAuthority, - TAccountLockupAuthority - >); + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); + return Object.freeze({ + accounts: [ + getAccountMeta(accounts.stake), + getAccountMeta(accounts.recipient), + getAccountMeta(accounts.clockSysvar), + getAccountMeta(accounts.stakeHistory), + getAccountMeta(accounts.withdrawAuthority), + getAccountMeta(accounts.lockupAuthority), + ].filter((x: T | undefined): x is T => x !== undefined), + data: getWithdrawInstructionDataEncoder().encode(args as WithdrawInstructionDataArgs), + programAddress, + } as WithdrawInstruction< + TProgramAddress, + TAccountStake, + TAccountRecipient, + TAccountClockSysvar, + TAccountStakeHistory, + TAccountWithdrawAuthority, + TAccountLockupAuthority + >); } export type ParsedWithdrawInstruction< - TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, - TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], + TProgram extends string = typeof STAKE_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { - programAddress: Address; - accounts: { - /** Stake account from which to withdraw */ - stake: TAccountMetas[0]; - /** Recipient account */ - recipient: TAccountMetas[1]; - /** Clock sysvar */ - clockSysvar: TAccountMetas[2]; - /** Stake history sysvar that carries stake warmup/cooldown history */ - stakeHistory: TAccountMetas[3]; - /** Withdraw authority */ - withdrawAuthority: TAccountMetas[4]; - /** Lockup authority, if before lockup expiration */ - lockupAuthority?: TAccountMetas[5] | undefined; - }; - data: WithdrawInstructionData; + programAddress: Address; + accounts: { + /** Stake account from which to withdraw */ + stake: TAccountMetas[0]; + /** Recipient account */ + recipient: TAccountMetas[1]; + /** Clock sysvar */ + clockSysvar: TAccountMetas[2]; + /** Stake history sysvar that carries stake warmup/cooldown history */ + stakeHistory: TAccountMetas[3]; + /** Withdraw authority */ + withdrawAuthority: TAccountMetas[4]; + /** Lockup authority, if before lockup expiration */ + lockupAuthority?: TAccountMetas[5] | undefined; + }; + data: WithdrawInstructionData; }; -export function parseWithdrawInstruction< - TProgram extends string, - TAccountMetas extends readonly AccountMeta[], ->( - instruction: Instruction & - InstructionWithAccounts & - InstructionWithData +export function parseWithdrawInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, ): ParsedWithdrawInstruction { - if (instruction.accounts.length < 5) { - // TODO: Coded error. - throw new Error('Not enough accounts'); - } - let accountIndex = 0; - const getNextAccount = () => { - const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; - accountIndex += 1; - return accountMeta; - }; - let optionalAccountsRemaining = instruction.accounts.length - 5; - const getNextOptionalAccount = () => { - if (optionalAccountsRemaining === 0) return undefined; - optionalAccountsRemaining -= 1; - return getNextAccount(); - }; - return { - programAddress: instruction.programAddress, - accounts: { - stake: getNextAccount(), - recipient: getNextAccount(), - clockSysvar: getNextAccount(), - stakeHistory: getNextAccount(), - withdrawAuthority: getNextAccount(), - lockupAuthority: getNextOptionalAccount(), - }, - data: getWithdrawInstructionDataDecoder().decode(instruction.data), - }; + if (instruction.accounts.length < 5) { + // TODO: Coded error. + throw new Error('Not enough accounts'); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + let optionalAccountsRemaining = instruction.accounts.length - 5; + const getNextOptionalAccount = () => { + if (optionalAccountsRemaining === 0) return undefined; + optionalAccountsRemaining -= 1; + return getNextAccount(); + }; + return { + programAddress: instruction.programAddress, + accounts: { + stake: getNextAccount(), + recipient: getNextAccount(), + clockSysvar: getNextAccount(), + stakeHistory: getNextAccount(), + withdrawAuthority: getNextAccount(), + lockupAuthority: getNextOptionalAccount(), + }, + data: getWithdrawInstructionDataDecoder().decode(instruction.data), + }; } diff --git a/clients/js/src/generated/programs/stake.ts b/clients/js/src/generated/programs/stake.ts index fbbf9681..cebb7023 100644 --- a/clients/js/src/generated/programs/stake.ts +++ b/clients/js/src/generated/programs/stake.ts @@ -7,169 +7,251 @@ */ import { - containsBytes, - getU32Encoder, - type Address, - type ReadonlyUint8Array, + assertIsInstructionWithAccounts, + containsBytes, + getU32Encoder, + type Address, + type Instruction, + type InstructionWithData, + type ReadonlyUint8Array, } from '@solana/kit'; import { - type ParsedAuthorizeCheckedInstruction, - type ParsedAuthorizeCheckedWithSeedInstruction, - type ParsedAuthorizeInstruction, - type ParsedAuthorizeWithSeedInstruction, - type ParsedDeactivateDelinquentInstruction, - type ParsedDeactivateInstruction, - type ParsedDelegateStakeInstruction, - type ParsedGetMinimumDelegationInstruction, - type ParsedInitializeCheckedInstruction, - type ParsedInitializeInstruction, - type ParsedMergeInstruction, - type ParsedMoveLamportsInstruction, - type ParsedMoveStakeInstruction, - type ParsedSetLockupCheckedInstruction, - type ParsedSetLockupInstruction, - type ParsedSplitInstruction, - type ParsedWithdrawInstruction, + parseAuthorizeCheckedInstruction, + parseAuthorizeCheckedWithSeedInstruction, + parseAuthorizeInstruction, + parseAuthorizeWithSeedInstruction, + parseDeactivateDelinquentInstruction, + parseDeactivateInstruction, + parseDelegateStakeInstruction, + parseGetMinimumDelegationInstruction, + parseInitializeCheckedInstruction, + parseInitializeInstruction, + parseMergeInstruction, + parseMoveLamportsInstruction, + parseMoveStakeInstruction, + parseSetLockupCheckedInstruction, + parseSetLockupInstruction, + parseSplitInstruction, + parseWithdrawInstruction, + type ParsedAuthorizeCheckedInstruction, + type ParsedAuthorizeCheckedWithSeedInstruction, + type ParsedAuthorizeInstruction, + type ParsedAuthorizeWithSeedInstruction, + type ParsedDeactivateDelinquentInstruction, + type ParsedDeactivateInstruction, + type ParsedDelegateStakeInstruction, + type ParsedGetMinimumDelegationInstruction, + type ParsedInitializeCheckedInstruction, + type ParsedInitializeInstruction, + type ParsedMergeInstruction, + type ParsedMoveLamportsInstruction, + type ParsedMoveStakeInstruction, + type ParsedSetLockupCheckedInstruction, + type ParsedSetLockupInstruction, + type ParsedSplitInstruction, + type ParsedWithdrawInstruction, } from '../instructions'; export const STAKE_PROGRAM_ADDRESS = - 'Stake11111111111111111111111111111111111111' as Address<'Stake11111111111111111111111111111111111111'>; + 'Stake11111111111111111111111111111111111111' as Address<'Stake11111111111111111111111111111111111111'>; export enum StakeAccount { - StakeStateAccount, + StakeStateAccount, } export enum StakeInstruction { - Initialize, - Authorize, - DelegateStake, - Split, - Withdraw, - Deactivate, - SetLockup, - Merge, - AuthorizeWithSeed, - InitializeChecked, - AuthorizeChecked, - AuthorizeCheckedWithSeed, - SetLockupChecked, - GetMinimumDelegation, - DeactivateDelinquent, - MoveStake, - MoveLamports, + Initialize, + Authorize, + DelegateStake, + Split, + Withdraw, + Deactivate, + SetLockup, + Merge, + AuthorizeWithSeed, + InitializeChecked, + AuthorizeChecked, + AuthorizeCheckedWithSeed, + SetLockupChecked, + GetMinimumDelegation, + DeactivateDelinquent, + MoveStake, + MoveLamports, } export function identifyStakeInstruction( - instruction: { data: ReadonlyUint8Array } | ReadonlyUint8Array + instruction: { data: ReadonlyUint8Array } | ReadonlyUint8Array, ): StakeInstruction { - const data = 'data' in instruction ? instruction.data : instruction; - if (containsBytes(data, getU32Encoder().encode(0), 0)) { - return StakeInstruction.Initialize; - } - if (containsBytes(data, getU32Encoder().encode(1), 0)) { - return StakeInstruction.Authorize; - } - if (containsBytes(data, getU32Encoder().encode(2), 0)) { - return StakeInstruction.DelegateStake; - } - if (containsBytes(data, getU32Encoder().encode(3), 0)) { - return StakeInstruction.Split; - } - if (containsBytes(data, getU32Encoder().encode(4), 0)) { - return StakeInstruction.Withdraw; - } - if (containsBytes(data, getU32Encoder().encode(5), 0)) { - return StakeInstruction.Deactivate; - } - if (containsBytes(data, getU32Encoder().encode(6), 0)) { - return StakeInstruction.SetLockup; - } - if (containsBytes(data, getU32Encoder().encode(7), 0)) { - return StakeInstruction.Merge; - } - if (containsBytes(data, getU32Encoder().encode(8), 0)) { - return StakeInstruction.AuthorizeWithSeed; - } - if (containsBytes(data, getU32Encoder().encode(9), 0)) { - return StakeInstruction.InitializeChecked; - } - if (containsBytes(data, getU32Encoder().encode(10), 0)) { - return StakeInstruction.AuthorizeChecked; - } - if (containsBytes(data, getU32Encoder().encode(11), 0)) { - return StakeInstruction.AuthorizeCheckedWithSeed; - } - if (containsBytes(data, getU32Encoder().encode(12), 0)) { - return StakeInstruction.SetLockupChecked; - } - if (containsBytes(data, getU32Encoder().encode(13), 0)) { - return StakeInstruction.GetMinimumDelegation; - } - if (containsBytes(data, getU32Encoder().encode(14), 0)) { - return StakeInstruction.DeactivateDelinquent; - } - if (containsBytes(data, getU32Encoder().encode(16), 0)) { - return StakeInstruction.MoveStake; - } - if (containsBytes(data, getU32Encoder().encode(17), 0)) { - return StakeInstruction.MoveLamports; - } - throw new Error( - 'The provided instruction could not be identified as a stake instruction.' - ); + const data = 'data' in instruction ? instruction.data : instruction; + if (containsBytes(data, getU32Encoder().encode(0), 0)) { + return StakeInstruction.Initialize; + } + if (containsBytes(data, getU32Encoder().encode(1), 0)) { + return StakeInstruction.Authorize; + } + if (containsBytes(data, getU32Encoder().encode(2), 0)) { + return StakeInstruction.DelegateStake; + } + if (containsBytes(data, getU32Encoder().encode(3), 0)) { + return StakeInstruction.Split; + } + if (containsBytes(data, getU32Encoder().encode(4), 0)) { + return StakeInstruction.Withdraw; + } + if (containsBytes(data, getU32Encoder().encode(5), 0)) { + return StakeInstruction.Deactivate; + } + if (containsBytes(data, getU32Encoder().encode(6), 0)) { + return StakeInstruction.SetLockup; + } + if (containsBytes(data, getU32Encoder().encode(7), 0)) { + return StakeInstruction.Merge; + } + if (containsBytes(data, getU32Encoder().encode(8), 0)) { + return StakeInstruction.AuthorizeWithSeed; + } + if (containsBytes(data, getU32Encoder().encode(9), 0)) { + return StakeInstruction.InitializeChecked; + } + if (containsBytes(data, getU32Encoder().encode(10), 0)) { + return StakeInstruction.AuthorizeChecked; + } + if (containsBytes(data, getU32Encoder().encode(11), 0)) { + return StakeInstruction.AuthorizeCheckedWithSeed; + } + if (containsBytes(data, getU32Encoder().encode(12), 0)) { + return StakeInstruction.SetLockupChecked; + } + if (containsBytes(data, getU32Encoder().encode(13), 0)) { + return StakeInstruction.GetMinimumDelegation; + } + if (containsBytes(data, getU32Encoder().encode(14), 0)) { + return StakeInstruction.DeactivateDelinquent; + } + if (containsBytes(data, getU32Encoder().encode(16), 0)) { + return StakeInstruction.MoveStake; + } + if (containsBytes(data, getU32Encoder().encode(17), 0)) { + return StakeInstruction.MoveLamports; + } + throw new Error('The provided instruction could not be identified as a stake instruction.'); } -export type ParsedStakeInstruction< - TProgram extends string = 'Stake11111111111111111111111111111111111111', -> = - | ({ - instructionType: StakeInstruction.Initialize; - } & ParsedInitializeInstruction) - | ({ - instructionType: StakeInstruction.Authorize; - } & ParsedAuthorizeInstruction) - | ({ - instructionType: StakeInstruction.DelegateStake; - } & ParsedDelegateStakeInstruction) - | ({ - instructionType: StakeInstruction.Split; - } & ParsedSplitInstruction) - | ({ - instructionType: StakeInstruction.Withdraw; - } & ParsedWithdrawInstruction) - | ({ - instructionType: StakeInstruction.Deactivate; - } & ParsedDeactivateInstruction) - | ({ - instructionType: StakeInstruction.SetLockup; - } & ParsedSetLockupInstruction) - | ({ - instructionType: StakeInstruction.Merge; - } & ParsedMergeInstruction) - | ({ - instructionType: StakeInstruction.AuthorizeWithSeed; - } & ParsedAuthorizeWithSeedInstruction) - | ({ - instructionType: StakeInstruction.InitializeChecked; - } & ParsedInitializeCheckedInstruction) - | ({ - instructionType: StakeInstruction.AuthorizeChecked; - } & ParsedAuthorizeCheckedInstruction) - | ({ - instructionType: StakeInstruction.AuthorizeCheckedWithSeed; - } & ParsedAuthorizeCheckedWithSeedInstruction) - | ({ - instructionType: StakeInstruction.SetLockupChecked; - } & ParsedSetLockupCheckedInstruction) - | ({ - instructionType: StakeInstruction.GetMinimumDelegation; - } & ParsedGetMinimumDelegationInstruction) - | ({ - instructionType: StakeInstruction.DeactivateDelinquent; - } & ParsedDeactivateDelinquentInstruction) - | ({ - instructionType: StakeInstruction.MoveStake; - } & ParsedMoveStakeInstruction) - | ({ - instructionType: StakeInstruction.MoveLamports; - } & ParsedMoveLamportsInstruction); +export type ParsedStakeInstruction = + | ({ instructionType: StakeInstruction.Initialize } & ParsedInitializeInstruction) + | ({ instructionType: StakeInstruction.Authorize } & ParsedAuthorizeInstruction) + | ({ instructionType: StakeInstruction.DelegateStake } & ParsedDelegateStakeInstruction) + | ({ instructionType: StakeInstruction.Split } & ParsedSplitInstruction) + | ({ instructionType: StakeInstruction.Withdraw } & ParsedWithdrawInstruction) + | ({ instructionType: StakeInstruction.Deactivate } & ParsedDeactivateInstruction) + | ({ instructionType: StakeInstruction.SetLockup } & ParsedSetLockupInstruction) + | ({ instructionType: StakeInstruction.Merge } & ParsedMergeInstruction) + | ({ instructionType: StakeInstruction.AuthorizeWithSeed } & ParsedAuthorizeWithSeedInstruction) + | ({ instructionType: StakeInstruction.InitializeChecked } & ParsedInitializeCheckedInstruction) + | ({ instructionType: StakeInstruction.AuthorizeChecked } & ParsedAuthorizeCheckedInstruction) + | ({ + instructionType: StakeInstruction.AuthorizeCheckedWithSeed; + } & ParsedAuthorizeCheckedWithSeedInstruction) + | ({ instructionType: StakeInstruction.SetLockupChecked } & ParsedSetLockupCheckedInstruction) + | ({ instructionType: StakeInstruction.GetMinimumDelegation } & ParsedGetMinimumDelegationInstruction) + | ({ instructionType: StakeInstruction.DeactivateDelinquent } & ParsedDeactivateDelinquentInstruction) + | ({ instructionType: StakeInstruction.MoveStake } & ParsedMoveStakeInstruction) + | ({ instructionType: StakeInstruction.MoveLamports } & ParsedMoveLamportsInstruction); + +export function parseStakeInstruction( + instruction: Instruction & InstructionWithData, +): ParsedStakeInstruction { + const instructionType = identifyStakeInstruction(instruction); + switch (instructionType) { + case StakeInstruction.Initialize: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: StakeInstruction.Initialize, ...parseInitializeInstruction(instruction) }; + } + case StakeInstruction.Authorize: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: StakeInstruction.Authorize, ...parseAuthorizeInstruction(instruction) }; + } + case StakeInstruction.DelegateStake: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: StakeInstruction.DelegateStake, ...parseDelegateStakeInstruction(instruction) }; + } + case StakeInstruction.Split: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: StakeInstruction.Split, ...parseSplitInstruction(instruction) }; + } + case StakeInstruction.Withdraw: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: StakeInstruction.Withdraw, ...parseWithdrawInstruction(instruction) }; + } + case StakeInstruction.Deactivate: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: StakeInstruction.Deactivate, ...parseDeactivateInstruction(instruction) }; + } + case StakeInstruction.SetLockup: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: StakeInstruction.SetLockup, ...parseSetLockupInstruction(instruction) }; + } + case StakeInstruction.Merge: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: StakeInstruction.Merge, ...parseMergeInstruction(instruction) }; + } + case StakeInstruction.AuthorizeWithSeed: { + assertIsInstructionWithAccounts(instruction); + return { + instructionType: StakeInstruction.AuthorizeWithSeed, + ...parseAuthorizeWithSeedInstruction(instruction), + }; + } + case StakeInstruction.InitializeChecked: { + assertIsInstructionWithAccounts(instruction); + return { + instructionType: StakeInstruction.InitializeChecked, + ...parseInitializeCheckedInstruction(instruction), + }; + } + case StakeInstruction.AuthorizeChecked: { + assertIsInstructionWithAccounts(instruction); + return { + instructionType: StakeInstruction.AuthorizeChecked, + ...parseAuthorizeCheckedInstruction(instruction), + }; + } + case StakeInstruction.AuthorizeCheckedWithSeed: { + assertIsInstructionWithAccounts(instruction); + return { + instructionType: StakeInstruction.AuthorizeCheckedWithSeed, + ...parseAuthorizeCheckedWithSeedInstruction(instruction), + }; + } + case StakeInstruction.SetLockupChecked: { + assertIsInstructionWithAccounts(instruction); + return { + instructionType: StakeInstruction.SetLockupChecked, + ...parseSetLockupCheckedInstruction(instruction), + }; + } + case StakeInstruction.GetMinimumDelegation: { + return { + instructionType: StakeInstruction.GetMinimumDelegation, + ...parseGetMinimumDelegationInstruction(instruction), + }; + } + case StakeInstruction.DeactivateDelinquent: { + assertIsInstructionWithAccounts(instruction); + return { + instructionType: StakeInstruction.DeactivateDelinquent, + ...parseDeactivateDelinquentInstruction(instruction), + }; + } + case StakeInstruction.MoveStake: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: StakeInstruction.MoveStake, ...parseMoveStakeInstruction(instruction) }; + } + case StakeInstruction.MoveLamports: { + assertIsInstructionWithAccounts(instruction); + return { instructionType: StakeInstruction.MoveLamports, ...parseMoveLamportsInstruction(instruction) }; + } + default: + throw new Error(`Unrecognized instruction type: ${instructionType as string}`); + } +} diff --git a/clients/js/src/generated/shared/index.ts b/clients/js/src/generated/shared/index.ts index 83a31834..7380d8c7 100644 --- a/clients/js/src/generated/shared/index.ts +++ b/clients/js/src/generated/shared/index.ts @@ -7,15 +7,15 @@ */ import { - AccountRole, - isProgramDerivedAddress, - isTransactionSigner as kitIsTransactionSigner, - type AccountMeta, - type AccountSignerMeta, - type Address, - type ProgramDerivedAddress, - type TransactionSigner, - upgradeRoleToSigner, + AccountRole, + isProgramDerivedAddress, + isTransactionSigner as kitIsTransactionSigner, + type AccountMeta, + type AccountSignerMeta, + type Address, + type ProgramDerivedAddress, + type TransactionSigner, + upgradeRoleToSigner, } from '@solana/kit'; /** @@ -23,10 +23,10 @@ import { * @internal */ export function expectSome(value: T | null | undefined): T { - if (value === null || value === undefined) { - throw new Error('Expected a value but received null or undefined.'); - } - return value; + if (value === null || value === undefined) { + throw new Error('Expected a value but received null or undefined.'); + } + return value; } /** @@ -34,23 +34,18 @@ export function expectSome(value: T | null | undefined): T { * @internal */ export function expectAddress( - value: - | Address - | ProgramDerivedAddress - | TransactionSigner - | null - | undefined + value: Address | ProgramDerivedAddress | TransactionSigner | null | undefined, ): Address { - if (!value) { - throw new Error('Expected a Address.'); - } - if (typeof value === 'object' && 'address' in value) { - return value.address; - } - if (Array.isArray(value)) { - return value[0] as Address; - } - return value as Address; + if (!value) { + throw new Error('Expected a Address.'); + } + if (typeof value === 'object' && 'address' in value) { + return value.address; + } + if (Array.isArray(value)) { + return value[0] as Address; + } + return value as Address; } /** @@ -58,17 +53,12 @@ export function expectAddress( * @internal */ export function expectProgramDerivedAddress( - value: - | Address - | ProgramDerivedAddress - | TransactionSigner - | null - | undefined + value: Address | ProgramDerivedAddress | TransactionSigner | null | undefined, ): ProgramDerivedAddress { - if (!value || !Array.isArray(value) || !isProgramDerivedAddress(value)) { - throw new Error('Expected a ProgramDerivedAddress.'); - } - return value; + if (!value || !Array.isArray(value) || !isProgramDerivedAddress(value)) { + throw new Error('Expected a ProgramDerivedAddress.'); + } + return value; } /** @@ -76,17 +66,12 @@ export function expectProgramDerivedAddress( * @internal */ export function expectTransactionSigner( - value: - | Address - | ProgramDerivedAddress - | TransactionSigner - | null - | undefined + value: Address | ProgramDerivedAddress | TransactionSigner | null | undefined, ): TransactionSigner { - if (!value || !isTransactionSigner(value)) { - throw new Error('Expected a TransactionSigner.'); - } - return value; + if (!value || !isTransactionSigner(value)) { + throw new Error('Expected a TransactionSigner.'); + } + return value; } /** @@ -94,19 +79,15 @@ export function expectTransactionSigner( * @internal */ export type ResolvedAccount< - T extends string = string, - U extends - | Address - | ProgramDerivedAddress - | TransactionSigner - | null = - | Address - | ProgramDerivedAddress - | TransactionSigner - | null, + T extends string = string, + U extends Address | ProgramDerivedAddress | TransactionSigner | null = + | Address + | ProgramDerivedAddress + | TransactionSigner + | null, > = { - isWritable: boolean; - value: U; + isWritable: boolean; + value: U; }; /** @@ -114,51 +95,31 @@ export type ResolvedAccount< * @internal */ export type InstructionWithByteDelta = { - byteDelta: number; + byteDelta: number; }; /** * Get account metas and signers from resolved accounts. * @internal */ -export function getAccountMetaFactory( - programAddress: Address, - optionalAccountStrategy: 'omitted' | 'programId' -) { - return ( - account: ResolvedAccount - ): AccountMeta | AccountSignerMeta | undefined => { - if (!account.value) { - if (optionalAccountStrategy === 'omitted') return; - return Object.freeze({ - address: programAddress, - role: AccountRole.READONLY, - }); - } +export function getAccountMetaFactory(programAddress: Address, optionalAccountStrategy: 'omitted' | 'programId') { + return (account: ResolvedAccount): AccountMeta | AccountSignerMeta | undefined => { + if (!account.value) { + if (optionalAccountStrategy === 'omitted') return; + return Object.freeze({ address: programAddress, role: AccountRole.READONLY }); + } - const writableRole = account.isWritable - ? AccountRole.WRITABLE - : AccountRole.READONLY; - return Object.freeze({ - address: expectAddress(account.value), - role: isTransactionSigner(account.value) - ? upgradeRoleToSigner(writableRole) - : writableRole, - ...(isTransactionSigner(account.value) ? { signer: account.value } : {}), - }); - }; + const writableRole = account.isWritable ? AccountRole.WRITABLE : AccountRole.READONLY; + return Object.freeze({ + address: expectAddress(account.value), + role: isTransactionSigner(account.value) ? upgradeRoleToSigner(writableRole) : writableRole, + ...(isTransactionSigner(account.value) ? { signer: account.value } : {}), + }); + }; } export function isTransactionSigner( - value: - | Address - | ProgramDerivedAddress - | TransactionSigner + value: Address | ProgramDerivedAddress | TransactionSigner, ): value is TransactionSigner { - return ( - !!value && - typeof value === 'object' && - 'address' in value && - kitIsTransactionSigner(value) - ); + return !!value && typeof value === 'object' && 'address' in value && kitIsTransactionSigner(value); } diff --git a/clients/js/src/generated/types/authorized.ts b/clients/js/src/generated/types/authorized.ts index 72a42807..f7ed312a 100644 --- a/clients/js/src/generated/types/authorized.ts +++ b/clients/js/src/generated/types/authorized.ts @@ -7,15 +7,15 @@ */ import { - combineCodec, - getAddressDecoder, - getAddressEncoder, - getStructDecoder, - getStructEncoder, - type Address, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, + combineCodec, + getAddressDecoder, + getAddressEncoder, + getStructDecoder, + getStructEncoder, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, } from '@solana/kit'; export type Authorized = { staker: Address; withdrawer: Address }; @@ -23,22 +23,19 @@ export type Authorized = { staker: Address; withdrawer: Address }; export type AuthorizedArgs = Authorized; export function getAuthorizedEncoder(): FixedSizeEncoder { - return getStructEncoder([ - ['staker', getAddressEncoder()], - ['withdrawer', getAddressEncoder()], - ]); + return getStructEncoder([ + ['staker', getAddressEncoder()], + ['withdrawer', getAddressEncoder()], + ]); } export function getAuthorizedDecoder(): FixedSizeDecoder { - return getStructDecoder([ - ['staker', getAddressDecoder()], - ['withdrawer', getAddressDecoder()], - ]); + return getStructDecoder([ + ['staker', getAddressDecoder()], + ['withdrawer', getAddressDecoder()], + ]); } -export function getAuthorizedCodec(): FixedSizeCodec< - AuthorizedArgs, - Authorized -> { - return combineCodec(getAuthorizedEncoder(), getAuthorizedDecoder()); +export function getAuthorizedCodec(): FixedSizeCodec { + return combineCodec(getAuthorizedEncoder(), getAuthorizedDecoder()); } diff --git a/clients/js/src/generated/types/delegation.ts b/clients/js/src/generated/types/delegation.ts index f9c7acbf..418d22a6 100644 --- a/clients/js/src/generated/types/delegation.ts +++ b/clients/js/src/generated/types/delegation.ts @@ -7,66 +7,58 @@ */ import { - combineCodec, - getAddressDecoder, - getAddressEncoder, - getF64Decoder, - getF64Encoder, - getStructDecoder, - getStructEncoder, - getU64Decoder, - getU64Encoder, - type Address, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, + combineCodec, + getAddressDecoder, + getAddressEncoder, + getF64Decoder, + getF64Encoder, + getStructDecoder, + getStructEncoder, + getU64Decoder, + getU64Encoder, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, } from '@solana/kit'; -import { - getEpochDecoder, - getEpochEncoder, - type Epoch, - type EpochArgs, -} from '.'; +import { getEpochDecoder, getEpochEncoder, type Epoch, type EpochArgs } from '.'; export type Delegation = { - voterPubkey: Address; - stake: bigint; - activationEpoch: Epoch; - deactivationEpoch: Epoch; - warmupCooldownRate: number; + voterPubkey: Address; + stake: bigint; + activationEpoch: Epoch; + deactivationEpoch: Epoch; + warmupCooldownRate: number; }; export type DelegationArgs = { - voterPubkey: Address; - stake: number | bigint; - activationEpoch: EpochArgs; - deactivationEpoch: EpochArgs; - warmupCooldownRate: number; + voterPubkey: Address; + stake: number | bigint; + activationEpoch: EpochArgs; + deactivationEpoch: EpochArgs; + warmupCooldownRate: number; }; export function getDelegationEncoder(): FixedSizeEncoder { - return getStructEncoder([ - ['voterPubkey', getAddressEncoder()], - ['stake', getU64Encoder()], - ['activationEpoch', getEpochEncoder()], - ['deactivationEpoch', getEpochEncoder()], - ['warmupCooldownRate', getF64Encoder()], - ]); + return getStructEncoder([ + ['voterPubkey', getAddressEncoder()], + ['stake', getU64Encoder()], + ['activationEpoch', getEpochEncoder()], + ['deactivationEpoch', getEpochEncoder()], + ['warmupCooldownRate', getF64Encoder()], + ]); } export function getDelegationDecoder(): FixedSizeDecoder { - return getStructDecoder([ - ['voterPubkey', getAddressDecoder()], - ['stake', getU64Decoder()], - ['activationEpoch', getEpochDecoder()], - ['deactivationEpoch', getEpochDecoder()], - ['warmupCooldownRate', getF64Decoder()], - ]); + return getStructDecoder([ + ['voterPubkey', getAddressDecoder()], + ['stake', getU64Decoder()], + ['activationEpoch', getEpochDecoder()], + ['deactivationEpoch', getEpochDecoder()], + ['warmupCooldownRate', getF64Decoder()], + ]); } -export function getDelegationCodec(): FixedSizeCodec< - DelegationArgs, - Delegation -> { - return combineCodec(getDelegationEncoder(), getDelegationDecoder()); +export function getDelegationCodec(): FixedSizeCodec { + return combineCodec(getDelegationEncoder(), getDelegationDecoder()); } diff --git a/clients/js/src/generated/types/epoch.ts b/clients/js/src/generated/types/epoch.ts index 5ab8fd61..62f86f28 100644 --- a/clients/js/src/generated/types/epoch.ts +++ b/clients/js/src/generated/types/epoch.ts @@ -7,12 +7,12 @@ */ import { - combineCodec, - getU64Decoder, - getU64Encoder, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, + combineCodec, + getU64Decoder, + getU64Encoder, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, } from '@solana/kit'; export type Epoch = bigint; @@ -20,13 +20,13 @@ export type Epoch = bigint; export type EpochArgs = number | bigint; export function getEpochEncoder(): FixedSizeEncoder { - return getU64Encoder(); + return getU64Encoder(); } export function getEpochDecoder(): FixedSizeDecoder { - return getU64Decoder(); + return getU64Decoder(); } export function getEpochCodec(): FixedSizeCodec { - return combineCodec(getEpochEncoder(), getEpochDecoder()); + return combineCodec(getEpochEncoder(), getEpochDecoder()); } diff --git a/clients/js/src/generated/types/lockup.ts b/clients/js/src/generated/types/lockup.ts index debab244..1b50bf99 100644 --- a/clients/js/src/generated/types/lockup.ts +++ b/clients/js/src/generated/types/lockup.ts @@ -7,55 +7,47 @@ */ import { - combineCodec, - getAddressDecoder, - getAddressEncoder, - getStructDecoder, - getStructEncoder, - type Address, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, + combineCodec, + getAddressDecoder, + getAddressEncoder, + getStructDecoder, + getStructEncoder, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, } from '@solana/kit'; import { - getEpochDecoder, - getEpochEncoder, - getUnixTimestampDecoder, - getUnixTimestampEncoder, - type Epoch, - type EpochArgs, - type UnixTimestamp, - type UnixTimestampArgs, + getEpochDecoder, + getEpochEncoder, + getUnixTimestampDecoder, + getUnixTimestampEncoder, + type Epoch, + type EpochArgs, + type UnixTimestamp, + type UnixTimestampArgs, } from '.'; -export type Lockup = { - unixTimestamp: UnixTimestamp; - epoch: Epoch; - custodian: Address; -}; +export type Lockup = { unixTimestamp: UnixTimestamp; epoch: Epoch; custodian: Address }; -export type LockupArgs = { - unixTimestamp: UnixTimestampArgs; - epoch: EpochArgs; - custodian: Address; -}; +export type LockupArgs = { unixTimestamp: UnixTimestampArgs; epoch: EpochArgs; custodian: Address }; export function getLockupEncoder(): FixedSizeEncoder { - return getStructEncoder([ - ['unixTimestamp', getUnixTimestampEncoder()], - ['epoch', getEpochEncoder()], - ['custodian', getAddressEncoder()], - ]); + return getStructEncoder([ + ['unixTimestamp', getUnixTimestampEncoder()], + ['epoch', getEpochEncoder()], + ['custodian', getAddressEncoder()], + ]); } export function getLockupDecoder(): FixedSizeDecoder { - return getStructDecoder([ - ['unixTimestamp', getUnixTimestampDecoder()], - ['epoch', getEpochDecoder()], - ['custodian', getAddressDecoder()], - ]); + return getStructDecoder([ + ['unixTimestamp', getUnixTimestampDecoder()], + ['epoch', getEpochDecoder()], + ['custodian', getAddressDecoder()], + ]); } export function getLockupCodec(): FixedSizeCodec { - return combineCodec(getLockupEncoder(), getLockupDecoder()); + return combineCodec(getLockupEncoder(), getLockupDecoder()); } diff --git a/clients/js/src/generated/types/meta.ts b/clients/js/src/generated/types/meta.ts index b3e0cb6f..a89cfdfc 100644 --- a/clients/js/src/generated/types/meta.ts +++ b/clients/js/src/generated/types/meta.ts @@ -7,54 +7,46 @@ */ import { - combineCodec, - getStructDecoder, - getStructEncoder, - getU64Decoder, - getU64Encoder, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, + combineCodec, + getStructDecoder, + getStructEncoder, + getU64Decoder, + getU64Encoder, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, } from '@solana/kit'; import { - getAuthorizedDecoder, - getAuthorizedEncoder, - getLockupDecoder, - getLockupEncoder, - type Authorized, - type AuthorizedArgs, - type Lockup, - type LockupArgs, + getAuthorizedDecoder, + getAuthorizedEncoder, + getLockupDecoder, + getLockupEncoder, + type Authorized, + type AuthorizedArgs, + type Lockup, + type LockupArgs, } from '.'; -export type Meta = { - rentExemptReserve: bigint; - authorized: Authorized; - lockup: Lockup; -}; +export type Meta = { rentExemptReserve: bigint; authorized: Authorized; lockup: Lockup }; -export type MetaArgs = { - rentExemptReserve: number | bigint; - authorized: AuthorizedArgs; - lockup: LockupArgs; -}; +export type MetaArgs = { rentExemptReserve: number | bigint; authorized: AuthorizedArgs; lockup: LockupArgs }; export function getMetaEncoder(): FixedSizeEncoder { - return getStructEncoder([ - ['rentExemptReserve', getU64Encoder()], - ['authorized', getAuthorizedEncoder()], - ['lockup', getLockupEncoder()], - ]); + return getStructEncoder([ + ['rentExemptReserve', getU64Encoder()], + ['authorized', getAuthorizedEncoder()], + ['lockup', getLockupEncoder()], + ]); } export function getMetaDecoder(): FixedSizeDecoder { - return getStructDecoder([ - ['rentExemptReserve', getU64Decoder()], - ['authorized', getAuthorizedDecoder()], - ['lockup', getLockupDecoder()], - ]); + return getStructDecoder([ + ['rentExemptReserve', getU64Decoder()], + ['authorized', getAuthorizedDecoder()], + ['lockup', getLockupDecoder()], + ]); } export function getMetaCodec(): FixedSizeCodec { - return combineCodec(getMetaEncoder(), getMetaDecoder()); + return combineCodec(getMetaEncoder(), getMetaDecoder()); } diff --git a/clients/js/src/generated/types/stake.ts b/clients/js/src/generated/types/stake.ts index 5633bf3b..524baeba 100644 --- a/clients/js/src/generated/types/stake.ts +++ b/clients/js/src/generated/types/stake.ts @@ -7,43 +7,35 @@ */ import { - combineCodec, - getStructDecoder, - getStructEncoder, - getU64Decoder, - getU64Encoder, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, + combineCodec, + getStructDecoder, + getStructEncoder, + getU64Decoder, + getU64Encoder, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, } from '@solana/kit'; -import { - getDelegationDecoder, - getDelegationEncoder, - type Delegation, - type DelegationArgs, -} from '.'; +import { getDelegationDecoder, getDelegationEncoder, type Delegation, type DelegationArgs } from '.'; export type Stake = { delegation: Delegation; creditsObserved: bigint }; -export type StakeArgs = { - delegation: DelegationArgs; - creditsObserved: number | bigint; -}; +export type StakeArgs = { delegation: DelegationArgs; creditsObserved: number | bigint }; export function getStakeEncoder(): FixedSizeEncoder { - return getStructEncoder([ - ['delegation', getDelegationEncoder()], - ['creditsObserved', getU64Encoder()], - ]); + return getStructEncoder([ + ['delegation', getDelegationEncoder()], + ['creditsObserved', getU64Encoder()], + ]); } export function getStakeDecoder(): FixedSizeDecoder { - return getStructDecoder([ - ['delegation', getDelegationDecoder()], - ['creditsObserved', getU64Decoder()], - ]); + return getStructDecoder([ + ['delegation', getDelegationDecoder()], + ['creditsObserved', getU64Decoder()], + ]); } export function getStakeCodec(): FixedSizeCodec { - return combineCodec(getStakeEncoder(), getStakeDecoder()); + return combineCodec(getStakeEncoder(), getStakeDecoder()); } diff --git a/clients/js/src/generated/types/stakeAuthorize.ts b/clients/js/src/generated/types/stakeAuthorize.ts index 8f96c3f3..d4663c10 100644 --- a/clients/js/src/generated/types/stakeAuthorize.ts +++ b/clients/js/src/generated/types/stakeAuthorize.ts @@ -7,32 +7,29 @@ */ import { - combineCodec, - getEnumDecoder, - getEnumEncoder, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, + combineCodec, + getEnumDecoder, + getEnumEncoder, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, } from '@solana/kit'; export enum StakeAuthorize { - Staker, - Withdrawer, + Staker, + Withdrawer, } export type StakeAuthorizeArgs = StakeAuthorize; export function getStakeAuthorizeEncoder(): FixedSizeEncoder { - return getEnumEncoder(StakeAuthorize); + return getEnumEncoder(StakeAuthorize); } export function getStakeAuthorizeDecoder(): FixedSizeDecoder { - return getEnumDecoder(StakeAuthorize); + return getEnumDecoder(StakeAuthorize); } -export function getStakeAuthorizeCodec(): FixedSizeCodec< - StakeAuthorizeArgs, - StakeAuthorize -> { - return combineCodec(getStakeAuthorizeEncoder(), getStakeAuthorizeDecoder()); +export function getStakeAuthorizeCodec(): FixedSizeCodec { + return combineCodec(getStakeAuthorizeEncoder(), getStakeAuthorizeDecoder()); } diff --git a/clients/js/src/generated/types/stakeFlags.ts b/clients/js/src/generated/types/stakeFlags.ts index 155aa961..3d9f0a6f 100644 --- a/clients/js/src/generated/types/stakeFlags.ts +++ b/clients/js/src/generated/types/stakeFlags.ts @@ -7,14 +7,14 @@ */ import { - combineCodec, - getStructDecoder, - getStructEncoder, - getU8Decoder, - getU8Encoder, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, + combineCodec, + getStructDecoder, + getStructEncoder, + getU8Decoder, + getU8Encoder, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, } from '@solana/kit'; export type StakeFlags = { bits: number }; @@ -22,16 +22,13 @@ export type StakeFlags = { bits: number }; export type StakeFlagsArgs = StakeFlags; export function getStakeFlagsEncoder(): FixedSizeEncoder { - return getStructEncoder([['bits', getU8Encoder()]]); + return getStructEncoder([['bits', getU8Encoder()]]); } export function getStakeFlagsDecoder(): FixedSizeDecoder { - return getStructDecoder([['bits', getU8Decoder()]]); + return getStructDecoder([['bits', getU8Decoder()]]); } -export function getStakeFlagsCodec(): FixedSizeCodec< - StakeFlagsArgs, - StakeFlags -> { - return combineCodec(getStakeFlagsEncoder(), getStakeFlagsDecoder()); +export function getStakeFlagsCodec(): FixedSizeCodec { + return combineCodec(getStakeFlagsEncoder(), getStakeFlagsDecoder()); } diff --git a/clients/js/src/generated/types/stakeState.ts b/clients/js/src/generated/types/stakeState.ts index 27cacc85..1e6972ab 100644 --- a/clients/js/src/generated/types/stakeState.ts +++ b/clients/js/src/generated/types/stakeState.ts @@ -7,125 +7,94 @@ */ import { - combineCodec, - getDiscriminatedUnionDecoder, - getDiscriminatedUnionEncoder, - getStructDecoder, - getStructEncoder, - getTupleDecoder, - getTupleEncoder, - getU32Decoder, - getU32Encoder, - getUnitDecoder, - getUnitEncoder, - type Codec, - type Decoder, - type Encoder, - type GetDiscriminatedUnionVariant, - type GetDiscriminatedUnionVariantContent, + combineCodec, + getDiscriminatedUnionDecoder, + getDiscriminatedUnionEncoder, + getStructDecoder, + getStructEncoder, + getTupleDecoder, + getTupleEncoder, + getU32Decoder, + getU32Encoder, + getUnitDecoder, + getUnitEncoder, + type Codec, + type Decoder, + type Encoder, + type GetDiscriminatedUnionVariant, + type GetDiscriminatedUnionVariantContent, } from '@solana/kit'; import { - getMetaDecoder, - getMetaEncoder, - getStakeDecoder, - getStakeEncoder, - type Meta, - type MetaArgs, - type Stake, - type StakeArgs, + getMetaDecoder, + getMetaEncoder, + getStakeDecoder, + getStakeEncoder, + type Meta, + type MetaArgs, + type Stake, + type StakeArgs, } from '.'; export type StakeState = - | { __kind: 'Uninitialized' } - | { __kind: 'Initialized'; fields: readonly [Meta] } - | { __kind: 'Stake'; fields: readonly [Meta, Stake] } - | { __kind: 'RewardsPool' }; + | { __kind: 'Uninitialized' } + | { __kind: 'Initialized'; fields: readonly [Meta] } + | { __kind: 'Stake'; fields: readonly [Meta, Stake] } + | { __kind: 'RewardsPool' }; export type StakeStateArgs = - | { __kind: 'Uninitialized' } - | { __kind: 'Initialized'; fields: readonly [MetaArgs] } - | { __kind: 'Stake'; fields: readonly [MetaArgs, StakeArgs] } - | { __kind: 'RewardsPool' }; + | { __kind: 'Uninitialized' } + | { __kind: 'Initialized'; fields: readonly [MetaArgs] } + | { __kind: 'Stake'; fields: readonly [MetaArgs, StakeArgs] } + | { __kind: 'RewardsPool' }; export function getStakeStateEncoder(): Encoder { - return getDiscriminatedUnionEncoder( - [ - ['Uninitialized', getUnitEncoder()], - [ - 'Initialized', - getStructEncoder([['fields', getTupleEncoder([getMetaEncoder()])]]), - ], - [ - 'Stake', - getStructEncoder([ - ['fields', getTupleEncoder([getMetaEncoder(), getStakeEncoder()])], - ]), - ], - ['RewardsPool', getUnitEncoder()], - ], - { size: getU32Encoder() } - ); + return getDiscriminatedUnionEncoder( + [ + ['Uninitialized', getUnitEncoder()], + ['Initialized', getStructEncoder([['fields', getTupleEncoder([getMetaEncoder()])]])], + ['Stake', getStructEncoder([['fields', getTupleEncoder([getMetaEncoder(), getStakeEncoder()])]])], + ['RewardsPool', getUnitEncoder()], + ], + { size: getU32Encoder() }, + ); } export function getStakeStateDecoder(): Decoder { - return getDiscriminatedUnionDecoder( - [ - ['Uninitialized', getUnitDecoder()], - [ - 'Initialized', - getStructDecoder([['fields', getTupleDecoder([getMetaDecoder()])]]), - ], - [ - 'Stake', - getStructDecoder([ - ['fields', getTupleDecoder([getMetaDecoder(), getStakeDecoder()])], - ]), - ], - ['RewardsPool', getUnitDecoder()], - ], - { size: getU32Decoder() } - ); + return getDiscriminatedUnionDecoder( + [ + ['Uninitialized', getUnitDecoder()], + ['Initialized', getStructDecoder([['fields', getTupleDecoder([getMetaDecoder()])]])], + ['Stake', getStructDecoder([['fields', getTupleDecoder([getMetaDecoder(), getStakeDecoder()])]])], + ['RewardsPool', getUnitDecoder()], + ], + { size: getU32Decoder() }, + ); } export function getStakeStateCodec(): Codec { - return combineCodec(getStakeStateEncoder(), getStakeStateDecoder()); + return combineCodec(getStakeStateEncoder(), getStakeStateDecoder()); } // Data Enum Helpers. export function stakeState( - kind: 'Uninitialized' + kind: 'Uninitialized', ): GetDiscriminatedUnionVariant; export function stakeState( - kind: 'Initialized', - data: GetDiscriminatedUnionVariantContent< - StakeStateArgs, - '__kind', - 'Initialized' - >['fields'] + kind: 'Initialized', + data: GetDiscriminatedUnionVariantContent['fields'], ): GetDiscriminatedUnionVariant; export function stakeState( - kind: 'Stake', - data: GetDiscriminatedUnionVariantContent< - StakeStateArgs, - '__kind', - 'Stake' - >['fields'] + kind: 'Stake', + data: GetDiscriminatedUnionVariantContent['fields'], ): GetDiscriminatedUnionVariant; -export function stakeState( - kind: 'RewardsPool' -): GetDiscriminatedUnionVariant; -export function stakeState( - kind: K, - data?: Data -) { - return Array.isArray(data) - ? { __kind: kind, fields: data } - : { __kind: kind, ...(data ?? {}) }; +export function stakeState(kind: 'RewardsPool'): GetDiscriminatedUnionVariant; +export function stakeState(kind: K, data?: Data) { + return Array.isArray(data) ? { __kind: kind, fields: data } : { __kind: kind, ...(data ?? {}) }; } export function isStakeState( - kind: K, - value: StakeState + kind: K, + value: StakeState, ): value is StakeState & { __kind: K } { - return value.__kind === kind; + return value.__kind === kind; } diff --git a/clients/js/src/generated/types/stakeStateV2.ts b/clients/js/src/generated/types/stakeStateV2.ts index 09aca70f..515787f9 100644 --- a/clients/js/src/generated/types/stakeStateV2.ts +++ b/clients/js/src/generated/types/stakeStateV2.ts @@ -7,143 +7,110 @@ */ import { - combineCodec, - getDiscriminatedUnionDecoder, - getDiscriminatedUnionEncoder, - getStructDecoder, - getStructEncoder, - getTupleDecoder, - getTupleEncoder, - getU32Decoder, - getU32Encoder, - getUnitDecoder, - getUnitEncoder, - type Codec, - type Decoder, - type Encoder, - type GetDiscriminatedUnionVariant, - type GetDiscriminatedUnionVariantContent, + combineCodec, + getDiscriminatedUnionDecoder, + getDiscriminatedUnionEncoder, + getStructDecoder, + getStructEncoder, + getTupleDecoder, + getTupleEncoder, + getU32Decoder, + getU32Encoder, + getUnitDecoder, + getUnitEncoder, + type Codec, + type Decoder, + type Encoder, + type GetDiscriminatedUnionVariant, + type GetDiscriminatedUnionVariantContent, } from '@solana/kit'; import { - getMetaDecoder, - getMetaEncoder, - getStakeDecoder, - getStakeEncoder, - getStakeFlagsDecoder, - getStakeFlagsEncoder, - type Meta, - type MetaArgs, - type Stake, - type StakeArgs, - type StakeFlags, - type StakeFlagsArgs, + getMetaDecoder, + getMetaEncoder, + getStakeDecoder, + getStakeEncoder, + getStakeFlagsDecoder, + getStakeFlagsEncoder, + type Meta, + type MetaArgs, + type Stake, + type StakeArgs, + type StakeFlags, + type StakeFlagsArgs, } from '.'; export type StakeStateV2 = - | { __kind: 'Uninitialized' } - | { __kind: 'Initialized'; fields: readonly [Meta] } - | { __kind: 'Stake'; fields: readonly [Meta, Stake, StakeFlags] } - | { __kind: 'RewardsPool' }; + | { __kind: 'Uninitialized' } + | { __kind: 'Initialized'; fields: readonly [Meta] } + | { __kind: 'Stake'; fields: readonly [Meta, Stake, StakeFlags] } + | { __kind: 'RewardsPool' }; export type StakeStateV2Args = - | { __kind: 'Uninitialized' } - | { __kind: 'Initialized'; fields: readonly [MetaArgs] } - | { __kind: 'Stake'; fields: readonly [MetaArgs, StakeArgs, StakeFlagsArgs] } - | { __kind: 'RewardsPool' }; + | { __kind: 'Uninitialized' } + | { __kind: 'Initialized'; fields: readonly [MetaArgs] } + | { __kind: 'Stake'; fields: readonly [MetaArgs, StakeArgs, StakeFlagsArgs] } + | { __kind: 'RewardsPool' }; export function getStakeStateV2Encoder(): Encoder { - return getDiscriminatedUnionEncoder( - [ - ['Uninitialized', getUnitEncoder()], - [ - 'Initialized', - getStructEncoder([['fields', getTupleEncoder([getMetaEncoder()])]]), - ], - [ - 'Stake', - getStructEncoder([ - [ - 'fields', - getTupleEncoder([ - getMetaEncoder(), - getStakeEncoder(), - getStakeFlagsEncoder(), - ]), - ], - ]), - ], - ['RewardsPool', getUnitEncoder()], - ], - { size: getU32Encoder() } - ); + return getDiscriminatedUnionEncoder( + [ + ['Uninitialized', getUnitEncoder()], + ['Initialized', getStructEncoder([['fields', getTupleEncoder([getMetaEncoder()])]])], + [ + 'Stake', + getStructEncoder([ + ['fields', getTupleEncoder([getMetaEncoder(), getStakeEncoder(), getStakeFlagsEncoder()])], + ]), + ], + ['RewardsPool', getUnitEncoder()], + ], + { size: getU32Encoder() }, + ); } export function getStakeStateV2Decoder(): Decoder { - return getDiscriminatedUnionDecoder( - [ - ['Uninitialized', getUnitDecoder()], - [ - 'Initialized', - getStructDecoder([['fields', getTupleDecoder([getMetaDecoder()])]]), - ], - [ - 'Stake', - getStructDecoder([ - [ - 'fields', - getTupleDecoder([ - getMetaDecoder(), - getStakeDecoder(), - getStakeFlagsDecoder(), - ]), - ], - ]), - ], - ['RewardsPool', getUnitDecoder()], - ], - { size: getU32Decoder() } - ); + return getDiscriminatedUnionDecoder( + [ + ['Uninitialized', getUnitDecoder()], + ['Initialized', getStructDecoder([['fields', getTupleDecoder([getMetaDecoder()])]])], + [ + 'Stake', + getStructDecoder([ + ['fields', getTupleDecoder([getMetaDecoder(), getStakeDecoder(), getStakeFlagsDecoder()])], + ]), + ], + ['RewardsPool', getUnitDecoder()], + ], + { size: getU32Decoder() }, + ); } export function getStakeStateV2Codec(): Codec { - return combineCodec(getStakeStateV2Encoder(), getStakeStateV2Decoder()); + return combineCodec(getStakeStateV2Encoder(), getStakeStateV2Decoder()); } // Data Enum Helpers. export function stakeStateV2( - kind: 'Uninitialized' + kind: 'Uninitialized', ): GetDiscriminatedUnionVariant; export function stakeStateV2( - kind: 'Initialized', - data: GetDiscriminatedUnionVariantContent< - StakeStateV2Args, - '__kind', - 'Initialized' - >['fields'] + kind: 'Initialized', + data: GetDiscriminatedUnionVariantContent['fields'], ): GetDiscriminatedUnionVariant; export function stakeStateV2( - kind: 'Stake', - data: GetDiscriminatedUnionVariantContent< - StakeStateV2Args, - '__kind', - 'Stake' - >['fields'] + kind: 'Stake', + data: GetDiscriminatedUnionVariantContent['fields'], ): GetDiscriminatedUnionVariant; export function stakeStateV2( - kind: 'RewardsPool' + kind: 'RewardsPool', ): GetDiscriminatedUnionVariant; -export function stakeStateV2( - kind: K, - data?: Data -) { - return Array.isArray(data) - ? { __kind: kind, fields: data } - : { __kind: kind, ...(data ?? {}) }; +export function stakeStateV2(kind: K, data?: Data) { + return Array.isArray(data) ? { __kind: kind, fields: data } : { __kind: kind, ...(data ?? {}) }; } export function isStakeStateV2( - kind: K, - value: StakeStateV2 + kind: K, + value: StakeStateV2, ): value is StakeStateV2 & { __kind: K } { - return value.__kind === kind; + return value.__kind === kind; } diff --git a/clients/js/src/generated/types/unixTimestamp.ts b/clients/js/src/generated/types/unixTimestamp.ts index 7b9daeb5..7319ac1a 100644 --- a/clients/js/src/generated/types/unixTimestamp.ts +++ b/clients/js/src/generated/types/unixTimestamp.ts @@ -7,12 +7,12 @@ */ import { - combineCodec, - getI64Decoder, - getI64Encoder, - type FixedSizeCodec, - type FixedSizeDecoder, - type FixedSizeEncoder, + combineCodec, + getI64Decoder, + getI64Encoder, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, } from '@solana/kit'; export type UnixTimestamp = bigint; @@ -20,16 +20,13 @@ export type UnixTimestamp = bigint; export type UnixTimestampArgs = number | bigint; export function getUnixTimestampEncoder(): FixedSizeEncoder { - return getI64Encoder(); + return getI64Encoder(); } export function getUnixTimestampDecoder(): FixedSizeDecoder { - return getI64Decoder(); + return getI64Decoder(); } -export function getUnixTimestampCodec(): FixedSizeCodec< - UnixTimestampArgs, - UnixTimestamp -> { - return combineCodec(getUnixTimestampEncoder(), getUnixTimestampDecoder()); +export function getUnixTimestampCodec(): FixedSizeCodec { + return combineCodec(getUnixTimestampEncoder(), getUnixTimestampDecoder()); } diff --git a/clients/js/test/_setup.ts b/clients/js/test/_setup.ts index 424508bd..5ec3abac 100644 --- a/clients/js/test/_setup.ts +++ b/clients/js/test/_setup.ts @@ -1,84 +1,72 @@ import { - Address, - Commitment, - TransactionMessageWithBlockhashLifetime, - Rpc, - RpcSubscriptions, - SolanaRpcApi, - SolanaRpcSubscriptionsApi, - TransactionSigner, - airdropFactory, - createSolanaRpc, - createSolanaRpcSubscriptions, - createTransactionMessage, - generateKeyPairSigner, - getSignatureFromTransaction, - lamports, - pipe, - sendAndConfirmTransactionFactory, - setTransactionMessageFeePayerSigner, - setTransactionMessageLifetimeUsingBlockhash, - signTransactionMessageWithSigners, - BaseTransactionMessage, - TransactionMessageWithFeePayer, - assertIsSendableTransaction, + Address, + Commitment, + TransactionMessageWithBlockhashLifetime, + Rpc, + RpcSubscriptions, + SolanaRpcApi, + SolanaRpcSubscriptionsApi, + TransactionSigner, + airdropFactory, + createSolanaRpc, + createSolanaRpcSubscriptions, + createTransactionMessage, + generateKeyPairSigner, + getSignatureFromTransaction, + lamports, + pipe, + sendAndConfirmTransactionFactory, + setTransactionMessageFeePayerSigner, + setTransactionMessageLifetimeUsingBlockhash, + signTransactionMessageWithSigners, + TransactionMessage, + TransactionMessageWithFeePayer, + assertIsSendableTransaction, + assertIsTransactionWithBlockhashLifetime, } from '@solana/kit'; type Client = { - rpc: Rpc; - rpcSubscriptions: RpcSubscriptions; + rpc: Rpc; + rpcSubscriptions: RpcSubscriptions; }; export const createDefaultSolanaClient = (): Client => { - const rpc = createSolanaRpc('http://127.0.0.1:8899'); - const rpcSubscriptions = createSolanaRpcSubscriptions('ws://127.0.0.1:8900'); - return { rpc, rpcSubscriptions }; + const rpc = createSolanaRpc('http://127.0.0.1:8899'); + const rpcSubscriptions = createSolanaRpcSubscriptions('ws://127.0.0.1:8900'); + return { rpc, rpcSubscriptions }; }; -export const generateKeyPairSignerWithSol = async ( - client: Client, - putativeLamports: bigint = 1_000_000_000n -) => { - const signer = await generateKeyPairSigner(); - await airdropFactory(client)({ - recipientAddress: signer.address, - lamports: lamports(putativeLamports), - commitment: 'confirmed', - }); - return signer; +export const generateKeyPairSignerWithSol = async (client: Client, putativeLamports: bigint = 1_000_000_000n) => { + const signer = await generateKeyPairSigner(); + await airdropFactory(client)({ + recipientAddress: signer.address, + lamports: lamports(putativeLamports), + commitment: 'confirmed', + }); + return signer; }; -export const createDefaultTransaction = async ( - client: Client, - feePayer: TransactionSigner -) => { - const { value: latestBlockhash } = await client.rpc - .getLatestBlockhash() - .send(); - return pipe( - createTransactionMessage({ version: 0 }), - (tx) => setTransactionMessageFeePayerSigner(feePayer, tx), - (tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx) - ); +export const createDefaultTransaction = async (client: Client, feePayer: TransactionSigner) => { + const { value: latestBlockhash } = await client.rpc.getLatestBlockhash().send(); + return pipe( + createTransactionMessage({ version: 0 }), + tx => setTransactionMessageFeePayerSigner(feePayer, tx), + tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx), + ); }; export const signAndSendTransaction = async ( - client: Client, - transactionMessage: BaseTransactionMessage & - TransactionMessageWithFeePayer & - TransactionMessageWithBlockhashLifetime, - commitment: Commitment = 'confirmed' + client: Client, + transactionMessage: TransactionMessage & TransactionMessageWithFeePayer & TransactionMessageWithBlockhashLifetime, + commitment: Commitment = 'confirmed', ) => { - const signedTransaction = - await signTransactionMessageWithSigners(transactionMessage); - const signature = getSignatureFromTransaction(signedTransaction); - assertIsSendableTransaction(signedTransaction); - await sendAndConfirmTransactionFactory(client)(signedTransaction, { - commitment, - }); - return signature; + const signedTransaction = await signTransactionMessageWithSigners(transactionMessage); + const signature = getSignatureFromTransaction(signedTransaction); + assertIsSendableTransaction(signedTransaction); + assertIsTransactionWithBlockhashLifetime(signedTransaction); + await sendAndConfirmTransactionFactory(client)(signedTransaction, { commitment }); + return signature; }; export const getBalance = async (client: Client, address: Address) => - (await client.rpc.getBalance(address, { commitment: 'confirmed' }).send()) - .value; + (await client.rpc.getBalance(address, { commitment: 'confirmed' }).send()).value; diff --git a/clients/js/test/create.test.ts b/clients/js/test/create.test.ts index f0285098..f8da028e 100644 --- a/clients/js/test/create.test.ts +++ b/clients/js/test/create.test.ts @@ -1,13 +1,10 @@ import test from 'ava'; -import { - createDefaultSolanaClient, - generateKeyPairSignerWithSol, -} from './_setup'; +import { createDefaultSolanaClient, generateKeyPairSignerWithSol } from './_setup'; -test('it creates a keypair', async (t) => { - // Given an authority key pair with some SOL. - const client = createDefaultSolanaClient(); - const authority = await generateKeyPairSignerWithSol(client); +test('it creates a keypair', async t => { + // Given an authority key pair with some SOL. + const client = createDefaultSolanaClient(); + const authority = await generateKeyPairSignerWithSol(client); - t.true(authority.address.length > 0); + t.true(authority.address.length > 0); }); diff --git a/clients/js/tsconfig.declarations.json b/clients/js/tsconfig.declarations.json index 15577bc6..a250806f 100644 --- a/clients/js/tsconfig.declarations.json +++ b/clients/js/tsconfig.declarations.json @@ -3,7 +3,7 @@ "declaration": true, "declarationMap": true, "emitDeclarationOnly": true, - "outDir": "./dist/types", + "outDir": "./dist/types" }, "extends": "./tsconfig.json", "include": ["src"] diff --git a/clients/js/tsconfig.json b/clients/js/tsconfig.json index 1c8e60c3..1bc202af 100644 --- a/clients/js/tsconfig.json +++ b/clients/js/tsconfig.json @@ -1,24 +1,24 @@ { - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "composite": false, - "declaration": true, - "declarationMap": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "inlineSources": false, - "isolatedModules": true, - "module": "ESNext", - "moduleResolution": "node", - "noFallthroughCasesInSwitch": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "outDir": "./dist", - "preserveWatchOutput": true, - "skipLibCheck": true, - "strict": true, - "target": "ESNext" - }, - "exclude": ["node_modules"], - "include": ["src", "test"] + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "composite": false, + "declaration": true, + "declarationMap": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "inlineSources": false, + "isolatedModules": true, + "module": "ESNext", + "moduleResolution": "node", + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "outDir": "./dist", + "preserveWatchOutput": true, + "skipLibCheck": true, + "strict": true, + "target": "ESNext" + }, + "exclude": ["node_modules"], + "include": ["src", "test", "*.ts"] } diff --git a/clients/js/tsup.config.ts b/clients/js/tsup.config.ts index fb77d21f..e5c0bb68 100644 --- a/clients/js/tsup.config.ts +++ b/clients/js/tsup.config.ts @@ -2,25 +2,25 @@ import { env } from 'node:process'; import { defineConfig, Options } from 'tsup'; const SHARED_OPTIONS: Options = { - define: { __VERSION__: `"${env.npm_package_version}"` }, - entry: ['./src/index.ts'], - outDir: './dist/src', - outExtension: ({ format }) => ({ js: format === 'cjs' ? '.js' : '.mjs' }), - sourcemap: true, - treeshake: true, + define: { __VERSION__: `"${env.npm_package_version}"` }, + entry: ['./src/index.ts'], + outDir: './dist/src', + outExtension: ({ format }) => ({ js: format === 'cjs' ? '.js' : '.mjs' }), + sourcemap: true, + treeshake: true, }; export default defineConfig(() => [ - // Source. - { ...SHARED_OPTIONS, format: 'cjs' }, - { ...SHARED_OPTIONS, format: 'esm' }, + // Source. + { ...SHARED_OPTIONS, format: 'cjs' }, + { ...SHARED_OPTIONS, format: 'esm' }, - // Tests. - { - ...SHARED_OPTIONS, - bundle: false, - entry: ['./test/**/*.ts'], - format: 'cjs', - outDir: './dist/test', - }, + // Tests. + { + ...SHARED_OPTIONS, + bundle: false, + entry: ['./test/**/*.ts'], + format: 'cjs', + outDir: './dist/test', + }, ]); diff --git a/clients/js/typedoc.json b/clients/js/typedoc.json index 93f30800..a70050e9 100644 --- a/clients/js/typedoc.json +++ b/clients/js/typedoc.json @@ -1,6 +1,6 @@ { - "entryPoints": ["src/index.ts"], - "includeVersion": true, - "readme": "none", - "out": "docs" + "entryPoints": ["src/index.ts"], + "includeVersion": true, + "readme": "none", + "out": "docs" } diff --git a/codama.json b/codama.json deleted file mode 100644 index ca9ea06e..00000000 --- a/codama.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$schema": "https://codama.gg/schemas/codama.json", - "idls": [ - { - "path": "interface/idl.json", - "format": "codama" - } - ], - "generators": [ - { - "generator": "@codama/renderers-js", - "path": "clients/js/src/generated" - }, - { - "generator": "@codama/renderers-rust", - "path": "clients/rust/src/generated" - } - ] -} - diff --git a/codama.mjs b/codama.mjs new file mode 100644 index 00000000..5e4f244d --- /dev/null +++ b/codama.mjs @@ -0,0 +1,152 @@ +import * as c from 'codama'; + +export default { + idl: 'interface/idl.json', + before: [ + { + from: 'codama#updateProgramsVisitor', + args: [{ solanaStakeInterface: { name: 'stake' } }], + }, + { + from: 'codama#updateInstructionsVisitor', + args: [{ redelegate: { delete: true } }], + }, + { + from: 'codama#updateDefinedTypesVisitor', + args: [ + { + lockupArgs: { name: 'lockupParams' }, + lockupCheckedArgs: { name: 'lockupCheckedParams' }, + authorizeWithSeedArgs: { name: 'authorizeWithSeedParams' }, + authorizeCheckedWithSeedArgs: { name: 'authorizeCheckedWithSeedParams' }, + }, + ], + }, + 'codama#unwrapInstructionArgsDefinedTypesVisitor', + 'codama#flattenInstructionDataArgumentsVisitor', + { + from: 'codama#bottomUpTransformerVisitor', + args: [ + [ + { + select: '[programNode]', + transform: node => { + c.assertIsNode(node, 'programNode'); + return { + ...node, + definedTypes: [ + // Add Epoch type alias + c.definedTypeNode({ name: 'epoch', type: c.numberTypeNode('u64') }), + // Add UnixTimestamp type alias + c.definedTypeNode({ name: 'unixTimestamp', type: c.numberTypeNode('i64') }), + ...node.definedTypes, + ], + }; + }, + }, + ], + ], + }, + { + from: 'codama#bottomUpTransformerVisitor', + args: [ + [ + { + select: '[programNode]', + transform: node => { + c.assertIsNode(node, 'programNode'); + return { + ...node, + accounts: [ + ...node.accounts, + // Stake account wrapper for client convenience + c.accountNode({ + name: 'stakeStateAccount', + data: c.structTypeNode([ + c.structFieldTypeNode({ + name: 'state', + type: c.definedTypeLinkNode('stakeStateV2'), + }), + ]), + }), + ], + }; + }, + }, + { + // enum discriminator -> u32 + select: '[definedTypeNode]stakeState.[enumTypeNode]', + transform: node => { + c.assertIsNode(node, 'enumTypeNode'); + return { ...node, size: c.numberTypeNode('u32') }; + }, + }, + { + // enum discriminator -> u32 + select: '[definedTypeNode]stakeStateV2.[enumTypeNode]', + transform: node => { + c.assertIsNode(node, 'enumTypeNode'); + return { ...node, size: c.numberTypeNode('u32') }; + }, + }, + { + // Use omitted optional account strategy for all instructions. + select: '[instructionNode]', + transform: node => { + c.assertIsNode(node, 'instructionNode'); + return { + ...node, + optionalAccountStrategy: 'omitted', + arguments: node.arguments.map(arg => + arg.name === 'discriminator' ? { ...arg, type: c.numberTypeNode('u32') } : arg, + ), + }; + }, + }, + ], + ], + }, + ], + scripts: { + js: { + from: '@codama/renderers-js', + args: [ + 'clients/js/src/generated', + { + packageFolder: 'clients/js', + syncPackageJson: true, + }, + ], + }, + rust: [ + { + from: 'codama#updateAccountsVisitor', + args: [{ stakeStateAccount: { delete: true } }], + }, + { + from: '@codama/renderers-rust', + args: [ + 'clients/rust/src/generated', + { + anchorTraits: false, + crateFolder: 'clients/rust', + formatCode: true, + toolchain: '+nightly-2025-02-16', + traitOptions: { + baseDefaults: [ + 'borsh::BorshSerialize', + 'borsh::BorshDeserialize', + 'serde::Serialize', + 'serde::Deserialize', + 'Clone', + 'Debug', + // 'Eq', <- Remove 'Eq' from the default traits. + 'PartialEq', + ], + }, + }, + ], + }, + ], + }, +}; diff --git a/package.json b/package.json index 790cc4dd..7efba569 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,15 @@ { - "private": true, - "scripts": { - "generate:clients": "tsx ./scripts/generate-clients.mts && (cd clients/js && pnpm format:fix)" - }, - "devDependencies": { - "@codama/renderers-js": "^1.4", - "@codama/renderers-rust": "^1.2.9", - "@iarna/toml": "^2.2.5", - "codama": "^1.5", - "tsx": "^4.21.0", - "typescript": "^5.9.3", - "zx": "^8.8.5" - }, - "engines": { - "node": ">=v20.0.0" - }, - "packageManager": "pnpm@9.1.0" + "private": true, + "devDependencies": { + "@codama/renderers-js": "^1.7.0", + "@codama/renderers-rust": "^1.2.9", + "@solana/prettier-config-solana": "0.0.6", + "codama": "^1.5.0", + "typescript": "^5.9.3" + }, + "engines": { + "node": ">=v20.0.0" + }, + "packageManager": "pnpm@10.15.1", + "prettier": "@solana/prettier-config-solana" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 337c9eba..f003b515 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,26 +9,20 @@ importers: .: devDependencies: '@codama/renderers-js': - specifier: ^1.4 - version: 1.4.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + specifier: ^1.7.0 + version: 1.7.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@codama/renderers-rust': specifier: ^1.2.9 version: 1.2.9(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@iarna/toml': - specifier: ^2.2.5 - version: 2.2.5 + '@solana/prettier-config-solana': + specifier: 0.0.6 + version: 0.0.6(prettier@3.8.1) codama: - specifier: ^1.5 + specifier: ^1.5.0 version: 1.5.0 - tsx: - specifier: ^4.21.0 - version: 4.21.0 typescript: specifier: ^5.9.3 version: 5.9.3 - zx: - specifier: ^8.8.5 - version: 8.8.5 packages: @@ -36,10 +30,6 @@ packages: resolution: {integrity: sha512-0uLecW/RZC2c1wx3j/eiRAYvilvNY+2DoyEYu/hV0OfM1/uIgIyuy5U+wolV+LY4wLFYdApjYdy+5D32lngCHg==} hasBin: true - '@codama/errors@1.3.7': - resolution: {integrity: sha512-96BF8agDVc2vAgL4qw1lZZfuJ7XBefdzTBk2VOUnOhdMQiLb0QhJCC4BH88OcL+rZXQdet4pk7Qwarj1I1GFKg==} - hasBin: true - '@codama/errors@1.4.4': resolution: {integrity: sha512-XC86H5X+zGTi0cSRKLc+wFkeXNsvnh+ttOgVnVHIljmXOJWbUt9wXhKding3UftipLWwlHPuoswERJ0vS0mO2A==} hasBin: true @@ -48,32 +38,23 @@ packages: resolution: {integrity: sha512-i4cS+S7JaZXhofQHFY3cwzt8rqxUVPNaeJND5VOyKUbtcOi933YXJXk52gDG4mc+CpGqHJijsJjfSpr1lJGxzg==} hasBin: true - '@codama/node-types@1.3.7': - resolution: {integrity: sha512-L9UTFfoeki5t+BYJAa4OMsqBPpbMbx8YJQar+55mYcjwGlJsKJW7mRfLYvwEFkCUYyLdNva40OVmTf88jccZCA==} - '@codama/node-types@1.4.4': resolution: {integrity: sha512-uUeIz34Id/TTAMi4k5OVl9FByM/PawnlNIIVqgpooH9AS0UlniICZ+KJ/mdHZidJs/AGo6bSRoOPS1BLtMajyw==} '@codama/node-types@1.5.0': resolution: {integrity: sha512-Ebz2vOUukmNaFXWdkni1ZihXkAIUnPYtqIMXYxKXOxjMP+TGz2q0lGtRo7sqw1pc2ksFBIkfBp5pZsl5p6gwXA==} - '@codama/nodes@1.3.7': - resolution: {integrity: sha512-3OV6SIBcqsIDARyzZVGdfnffNlnKSYcb0aGp/9Liz5/EID0oBTIyuh/Cmj5Ww6RX4WPb+GNAxABAGW94zbcfQg==} - '@codama/nodes@1.4.4': resolution: {integrity: sha512-JzlY5qLk3rhsnu0nerC/Vkc9/2HjdsLtEpBtST0dxC1j9kpfHvIc2uyIj+5hlB1YIBRJIDNo+UOHGla8hidkaA==} '@codama/nodes@1.5.0': resolution: {integrity: sha512-yg+xmorWiMNjS3n19CGIt/FZ/ZCuDIu+HEY45bq6gHu1MN3RtJZY+Q3v0ErnBPA60D8mNWkvkKoeSZXfzcAvfw==} - '@codama/renderers-core@1.2.2': - resolution: {integrity: sha512-dPyHgn5L45G+tWP17ITvOlpX3+s2FcJHMjAhFZlmUHAJpH/wl+UsUwuWg698iSb56Er2jUwqX7srw5iZf7XHjQ==} - '@codama/renderers-core@1.3.4': resolution: {integrity: sha512-+qEPsvpCjUElohgJTcVNsjy6u1LjoCcwo72NbcffLF9QU5mUjNwL8EhFouEq2K60H/QKmNaiVKLQfJcQ/xCT9A==} - '@codama/renderers-js@1.4.3': - resolution: {integrity: sha512-FC/wba6IZayKeWk710XP0OJN50kf9B6cVQGo6uXb8M8hMw9qjSJLDPwpou57Y0V7tja3kjTFPBb3I9zHheeDtQ==} + '@codama/renderers-js@1.7.0': + resolution: {integrity: sha512-WwKkSkNPdUBVWjGmkG+RNXyZ5K/4ji8UZQGzowDNTrqktUrqPsBThOkc7Zpmv+TpCapxrfjj0Txpo+0q5FjKGw==} engines: {node: '>=20.18.0'} '@codama/renderers-rust@1.2.9': @@ -83,9 +64,6 @@ packages: '@codama/validators@1.5.0': resolution: {integrity: sha512-p3ufDxnCH1jiuHGzcBv4/d+ctzUcKD2K3gX/W8169tC41o9DggjlEpNy1Z6YAAhVb3wHnmXVGA2qmp32rWSfWw==} - '@codama/visitors-core@1.3.7': - resolution: {integrity: sha512-B1JnzhRDJiLxewha/F3YzeEp8Zrtd7eKiGNJFJHSPufAnIVm2lQUDaKS+OrAOHnSRmRKIAVdzfpFpdz6EM0N6Q==} - '@codama/visitors-core@1.4.4': resolution: {integrity: sha512-vk/4tczViAUHa7c8PF7FxN+JWbuTcDB0pIdrDbbO6eBPKDPQGZCUCEp6rXIYBVxfO129jWrNf2+CuyYre/c/vA==} @@ -95,182 +73,20 @@ packages: '@codama/visitors@1.5.0': resolution: {integrity: sha512-SwtQaleXxAaFz6uHygxki621q4nPUDQlnwEhsg+QKOjHpKWXjLYdJof+R8gUiTV/n7/IeNnjvxJTTNfUsvETPQ==} - '@esbuild/aix-ppc64@0.27.0': - resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.27.0': - resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.27.0': - resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.27.0': - resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.27.0': - resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.27.0': - resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.27.0': - resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.27.0': - resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.27.0': - resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.27.0': - resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.27.0': - resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.27.0': - resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.27.0': - resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.27.0': - resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.0': - resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.27.0': - resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.27.0': - resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.27.0': - resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.27.0': - resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.27.0': - resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.27.0': - resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.27.0': - resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.27.0': - resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.27.0': - resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.27.0': - resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.27.0': - resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@iarna/toml@2.2.5': - resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} - - '@solana/codecs-core@4.0.0': - resolution: {integrity: sha512-28kNUsyIlhU3MO3/7ZLDqeJf2YAm32B4tnTjl5A9HrbBqsTZ+upT/RzxZGP1MMm7jnPuIKCMwmTpsyqyR6IUpw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/codecs-core@5.1.0': resolution: {integrity: sha512-vDwi03mxWeWCS5Il6BCdNdifYdOoHVz97YOmbWGIt45b77Ivu5NUYeSD2+ccl6fSw8eYQ6QaqqKXMjbSfsXv4g==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/codecs-numbers@4.0.0': - resolution: {integrity: sha512-z9zpjtcwzqT9rbkKVZpkWB5/0V7+6YRKs6BccHkGJlaDx8Pe/+XOvPi2rEdXPqrPd9QWb5Xp1iBfcgaDMyiOiA==} + '@solana/codecs-core@6.0.1': + resolution: {integrity: sha512-OnUQk94qfvfE0nVveZ638aNUL3tyRJoorUFiAG0ICTGUo3c6fkYb8vH23o/5O2qmuSmYND1sn+UCaldNMVkFpg==} engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true '@solana/codecs-numbers@5.1.0': resolution: {integrity: sha512-Ea5/9yjDNOrDZcI40UGzzi6Aq1JNsmzM4m5pOk6Xb3JRZ0YdKOv/MwuCqb6jRgzZ7SQjHhkfGL43kHLJA++bOw==} @@ -278,12 +94,14 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/codecs-strings@4.0.0': - resolution: {integrity: sha512-XvyD+sQ1zyA0amfxbpoFZsucLoe+yASQtDiLUGMDg5TZ82IHE3B7n82jE8d8cTAqi0HgqQiwU13snPhvg1O0Ow==} + '@solana/codecs-numbers@6.0.1': + resolution: {integrity: sha512-ZrI1NjUsf4I+Klue/2rlQbZLcGRom/G2E4VB/8x4IEHGOeFLQhXcxmnib8kdgomQRYOzF1BjVDmCYxvZr+6AWA==} engines: {node: '>=20.18.0'} peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5.3.3' + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true '@solana/codecs-strings@5.1.0': resolution: {integrity: sha512-014xwl5T/3VnGW0gceizF47DUs5EURRtgGmbWIR5+Z32yxgQ6hT9Zl0atZbL268RHbUQ03/J8Ush1StQgy7sfQ==} @@ -295,12 +113,17 @@ packages: fastestsmallesttextencoderdecoder: optional: true - '@solana/errors@4.0.0': - resolution: {integrity: sha512-3YEtvcMvtcnTl4HahqLt0VnaGVf7vVWOnt6/uPky5e0qV6BlxDSbGkbBzttNjxLXHognV0AQi3pjvrtfUnZmbg==} + '@solana/codecs-strings@6.0.1': + resolution: {integrity: sha512-OmMIfMFbbJVIxveBeATKCj9DsmZ8l4vJPnOLHUop0hLWRiYHTQ1qokMqfk/X8PCmUjXmbXnlp63BikGtdKN3/g==} engines: {node: '>=20.18.0'} - hasBin: true peerDependencies: - typescript: '>=5.3.3' + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: ^5.0.0 + peerDependenciesMeta: + fastestsmallesttextencoderdecoder: + optional: true + typescript: + optional: true '@solana/errors@5.1.0': resolution: {integrity: sha512-JlTyekErWa6Fdcwu1Hrh+jZxjM4YxyorGCFDRVZlmHZFkp5N00DWKcYnSGZrTF8E6ZZEP9pfS2XwM8y7p7HPww==} @@ -309,6 +132,21 @@ packages: peerDependencies: typescript: '>=5.3.3' + '@solana/errors@6.0.1': + resolution: {integrity: sha512-sMe5GCsXto8F1KDeq9GbZR0+m841SqEYep3NAcYlC0lqF2RG4giaaPQHgrWI5DJR/L7yc8FzUIQfTxnaN7bwOQ==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + + '@solana/prettier-config-solana@0.0.6': + resolution: {integrity: sha512-/s55hDoAyh5QyltQh/jjNK3AgACEq885+DnC6lYhrmYZiV6I0iHITWYnKd8d23KRKs/RBjlaQH54MiafeoI9hw==} + peerDependencies: + prettier: ^3.7.4 + a-sync-waterfall@1.0.1: resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==} @@ -339,14 +177,14 @@ packages: resolution: {integrity: sha512-hhfSzrOiDX3bV7QmJneEBsBk3ln4gIcMJs6P8BlEJ3EFI+P0QZaTT5W61o8Tq0/79hTZeyj0gP65HZ/LYJil+w==} hasBin: true - commander@14.0.1: - resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} - engines: {node: '>=20'} - commander@14.0.2: resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} engines: {node: '>=20'} + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} + commander@5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} engines: {node: '>= 6'} @@ -371,19 +209,9 @@ packages: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - esbuild@0.27.0: - resolution: {integrity: sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==} - engines: {node: '>=18'} - hasBin: true - fastestsmallesttextencoderdecoder@1.0.22: resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -399,9 +227,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-tsconfig@4.13.0: - resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -452,8 +277,8 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + prettier@3.8.1: + resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} engines: {node: '>=14'} hasBin: true @@ -461,8 +286,10 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} @@ -471,21 +298,11 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - tsx@4.21.0: - resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} - engines: {node: '>=18.0.0'} - hasBin: true - typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true - zx@8.8.5: - resolution: {integrity: sha512-SNgDF5L0gfN7FwVOdEFguY3orU5AkfFZm9B5YSHog/UDHv+lvmd82ZAsOenOkQixigwH2+yyH198AwNdKhj+RA==} - engines: {node: '>= 12.17.0'} - hasBin: true - snapshots: '@codama/cli@1.4.4': @@ -497,12 +314,6 @@ snapshots: picocolors: 1.1.1 prompts: 2.4.2 - '@codama/errors@1.3.7': - dependencies: - '@codama/node-types': 1.3.7 - commander: 14.0.1 - picocolors: 1.1.1 - '@codama/errors@1.4.4': dependencies: '@codama/node-types': 1.4.4 @@ -515,17 +326,10 @@ snapshots: commander: 14.0.2 picocolors: 1.1.1 - '@codama/node-types@1.3.7': {} - '@codama/node-types@1.4.4': {} '@codama/node-types@1.5.0': {} - '@codama/nodes@1.3.7': - dependencies: - '@codama/errors': 1.3.7 - '@codama/node-types': 1.3.7 - '@codama/nodes@1.4.4': dependencies: '@codama/errors': 1.4.4 @@ -536,26 +340,21 @@ snapshots: '@codama/errors': 1.5.0 '@codama/node-types': 1.5.0 - '@codama/renderers-core@1.2.2': - dependencies: - '@codama/errors': 1.3.7 - '@codama/nodes': 1.3.7 - '@codama/visitors-core': 1.3.7 - '@codama/renderers-core@1.3.4': dependencies: '@codama/errors': 1.4.4 '@codama/nodes': 1.4.4 '@codama/visitors-core': 1.4.4 - '@codama/renderers-js@1.4.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + '@codama/renderers-js@1.7.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@codama/errors': 1.3.7 - '@codama/nodes': 1.3.7 - '@codama/renderers-core': 1.2.2 - '@codama/visitors-core': 1.3.7 - '@solana/codecs-strings': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - prettier: 3.6.2 + '@codama/errors': 1.5.0 + '@codama/nodes': 1.5.0 + '@codama/renderers-core': 1.3.4 + '@codama/visitors-core': 1.5.0 + '@solana/codecs-strings': 6.0.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + prettier: 3.8.1 + semver: 7.7.4 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript @@ -579,12 +378,6 @@ snapshots: '@codama/nodes': 1.5.0 '@codama/visitors-core': 1.5.0 - '@codama/visitors-core@1.3.7': - dependencies: - '@codama/errors': 1.3.7 - '@codama/nodes': 1.3.7 - json-stable-stringify: 1.3.0 - '@codama/visitors-core@1.4.4': dependencies: '@codama/errors': 1.4.4 @@ -603,100 +396,15 @@ snapshots: '@codama/nodes': 1.5.0 '@codama/visitors-core': 1.5.0 - '@esbuild/aix-ppc64@0.27.0': - optional: true - - '@esbuild/android-arm64@0.27.0': - optional: true - - '@esbuild/android-arm@0.27.0': - optional: true - - '@esbuild/android-x64@0.27.0': - optional: true - - '@esbuild/darwin-arm64@0.27.0': - optional: true - - '@esbuild/darwin-x64@0.27.0': - optional: true - - '@esbuild/freebsd-arm64@0.27.0': - optional: true - - '@esbuild/freebsd-x64@0.27.0': - optional: true - - '@esbuild/linux-arm64@0.27.0': - optional: true - - '@esbuild/linux-arm@0.27.0': - optional: true - - '@esbuild/linux-ia32@0.27.0': - optional: true - - '@esbuild/linux-loong64@0.27.0': - optional: true - - '@esbuild/linux-mips64el@0.27.0': - optional: true - - '@esbuild/linux-ppc64@0.27.0': - optional: true - - '@esbuild/linux-riscv64@0.27.0': - optional: true - - '@esbuild/linux-s390x@0.27.0': - optional: true - - '@esbuild/linux-x64@0.27.0': - optional: true - - '@esbuild/netbsd-arm64@0.27.0': - optional: true - - '@esbuild/netbsd-x64@0.27.0': - optional: true - - '@esbuild/openbsd-arm64@0.27.0': - optional: true - - '@esbuild/openbsd-x64@0.27.0': - optional: true - - '@esbuild/openharmony-arm64@0.27.0': - optional: true - - '@esbuild/sunos-x64@0.27.0': - optional: true - - '@esbuild/win32-arm64@0.27.0': - optional: true - - '@esbuild/win32-ia32@0.27.0': - optional: true - - '@esbuild/win32-x64@0.27.0': - optional: true - - '@iarna/toml@2.2.5': {} - - '@solana/codecs-core@4.0.0(typescript@5.9.3)': - dependencies: - '@solana/errors': 4.0.0(typescript@5.9.3) - typescript: 5.9.3 - '@solana/codecs-core@5.1.0(typescript@5.9.3)': dependencies: '@solana/errors': 5.1.0(typescript@5.9.3) typescript: 5.9.3 - '@solana/codecs-numbers@4.0.0(typescript@5.9.3)': + '@solana/codecs-core@6.0.1(typescript@5.9.3)': dependencies: - '@solana/codecs-core': 4.0.0(typescript@5.9.3) - '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/errors': 6.0.1(typescript@5.9.3) + optionalDependencies: typescript: 5.9.3 '@solana/codecs-numbers@5.1.0(typescript@5.9.3)': @@ -705,12 +413,11 @@ snapshots: '@solana/errors': 5.1.0(typescript@5.9.3) typescript: 5.9.3 - '@solana/codecs-strings@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + '@solana/codecs-numbers@6.0.1(typescript@5.9.3)': dependencies: - '@solana/codecs-core': 4.0.0(typescript@5.9.3) - '@solana/codecs-numbers': 4.0.0(typescript@5.9.3) - '@solana/errors': 4.0.0(typescript@5.9.3) - fastestsmallesttextencoderdecoder: 1.0.22 + '@solana/codecs-core': 6.0.1(typescript@5.9.3) + '@solana/errors': 6.0.1(typescript@5.9.3) + optionalDependencies: typescript: 5.9.3 '@solana/codecs-strings@5.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': @@ -722,10 +429,13 @@ snapshots: optionalDependencies: fastestsmallesttextencoderdecoder: 1.0.22 - '@solana/errors@4.0.0(typescript@5.9.3)': + '@solana/codecs-strings@6.0.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - chalk: 5.6.2 - commander: 14.0.1 + '@solana/codecs-core': 6.0.1(typescript@5.9.3) + '@solana/codecs-numbers': 6.0.1(typescript@5.9.3) + '@solana/errors': 6.0.1(typescript@5.9.3) + optionalDependencies: + fastestsmallesttextencoderdecoder: 1.0.22 typescript: 5.9.3 '@solana/errors@5.1.0(typescript@5.9.3)': @@ -734,6 +444,17 @@ snapshots: commander: 14.0.2 typescript: 5.9.3 + '@solana/errors@6.0.1(typescript@5.9.3)': + dependencies: + chalk: 5.6.2 + commander: 14.0.3 + optionalDependencies: + typescript: 5.9.3 + + '@solana/prettier-config-solana@0.0.6(prettier@3.8.1)': + dependencies: + prettier: 3.8.1 + a-sync-waterfall@1.0.1: {} asap@2.0.6: {} @@ -770,10 +491,10 @@ snapshots: '@codama/validators': 1.5.0 '@codama/visitors': 1.5.0 - commander@14.0.1: {} - commander@14.0.2: {} + commander@14.0.3: {} + commander@5.1.0: {} define-data-property@1.1.4: @@ -796,38 +517,7 @@ snapshots: dependencies: es-errors: 1.3.0 - esbuild@0.27.0: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.0 - '@esbuild/android-arm': 0.27.0 - '@esbuild/android-arm64': 0.27.0 - '@esbuild/android-x64': 0.27.0 - '@esbuild/darwin-arm64': 0.27.0 - '@esbuild/darwin-x64': 0.27.0 - '@esbuild/freebsd-arm64': 0.27.0 - '@esbuild/freebsd-x64': 0.27.0 - '@esbuild/linux-arm': 0.27.0 - '@esbuild/linux-arm64': 0.27.0 - '@esbuild/linux-ia32': 0.27.0 - '@esbuild/linux-loong64': 0.27.0 - '@esbuild/linux-mips64el': 0.27.0 - '@esbuild/linux-ppc64': 0.27.0 - '@esbuild/linux-riscv64': 0.27.0 - '@esbuild/linux-s390x': 0.27.0 - '@esbuild/linux-x64': 0.27.0 - '@esbuild/netbsd-arm64': 0.27.0 - '@esbuild/netbsd-x64': 0.27.0 - '@esbuild/openbsd-arm64': 0.27.0 - '@esbuild/openbsd-x64': 0.27.0 - '@esbuild/openharmony-arm64': 0.27.0 - '@esbuild/sunos-x64': 0.27.0 - '@esbuild/win32-arm64': 0.27.0 - '@esbuild/win32-ia32': 0.27.0 - '@esbuild/win32-x64': 0.27.0 - - fastestsmallesttextencoderdecoder@1.0.22: {} - - fsevents@2.3.3: + fastestsmallesttextencoderdecoder@1.0.22: optional: true function-bind@1.1.2: {} @@ -863,10 +553,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-tsconfig@4.13.0: - dependencies: - resolve-pkg-maps: 1.0.0 - gopd@1.2.0: {} has-property-descriptors@1.0.2: @@ -905,14 +591,14 @@ snapshots: picocolors@1.1.1: {} - prettier@3.6.2: {} + prettier@3.8.1: {} prompts@2.4.2: dependencies: kleur: 3.0.3 sisteransi: 1.0.5 - resolve-pkg-maps@1.0.0: {} + semver@7.7.4: {} set-function-length@1.2.2: dependencies: @@ -925,13 +611,4 @@ snapshots: sisteransi@1.0.5: {} - tsx@4.21.0: - dependencies: - esbuild: 0.27.0 - get-tsconfig: 4.13.0 - optionalDependencies: - fsevents: 2.3.3 - typescript@5.9.3: {} - - zx@8.8.5: {} diff --git a/scripts/generate-clients.mts b/scripts/generate-clients.mts deleted file mode 100644 index 15714949..00000000 --- a/scripts/generate-clients.mts +++ /dev/null @@ -1,176 +0,0 @@ -#!/usr/bin/env zx -import 'zx/globals'; -import * as c from 'codama'; -import { renderVisitor as renderJavaScriptVisitor } from '@codama/renderers-js'; -import { renderVisitor as renderRustVisitor } from '@codama/renderers-rust'; -import { getToolchainArgument, workingDirectory } from './utils.mts'; - -// Load the auto-generated IDL from Codama macros -const idl = JSON.parse( - fs.readFileSync(path.join(workingDirectory, 'interface', 'idl.json'), 'utf-8') -); -const codama = c.createFromRoot(idl); - -// Rename the program. -codama.update( - c.updateProgramsVisitor({ - solanaStakeInterface: { name: 'stake' }, - }) -); - -codama.update( - c.updateInstructionsVisitor({ - // Deprecated instruction. - redelegate: { delete: true }, - }) -); - -// Rename instruction argument types to avoid collisions with encoder arg types -codama.update( - c.updateDefinedTypesVisitor({ - lockupArgs: { name: 'lockupParams' }, - lockupCheckedArgs: { name: 'lockupCheckedParams' }, - authorizeWithSeedArgs: { name: 'authorizeWithSeedParams' }, - authorizeCheckedWithSeedArgs: { name: 'authorizeCheckedWithSeedParams' }, - }) -); - -// Unwrap defined type links used only as instruction args, then flatten them -codama.update(c.unwrapInstructionArgsDefinedTypesVisitor()); -codama.update(c.flattenInstructionDataArgumentsVisitor()); - -// Add type aliases for semantic external types -codama.update( - c.bottomUpTransformerVisitor([ - { - select: '[programNode]', - transform: (node) => { - c.assertIsNode(node, 'programNode'); - return { - ...node, - definedTypes: [ - // Add Epoch type alias - c.definedTypeNode({ - name: 'epoch', - type: c.numberTypeNode('u64'), - }), - // Add UnixTimestamp type alias - c.definedTypeNode({ - name: 'unixTimestamp', - type: c.numberTypeNode('i64'), - }), - ...node.definedTypes, - ], - }; - }, - }, - ]) -); - -// Apply transformations to the IDL -codama.update( - c.bottomUpTransformerVisitor([ - { - select: '[programNode]', - transform: (node) => { - c.assertIsNode(node, 'programNode'); - return { - ...node, - accounts: [ - ...node.accounts, - // Stake account wrapper for client convenience - c.accountNode({ - name: 'stakeStateAccount', - data: c.structTypeNode([ - c.structFieldTypeNode({ - name: 'state', - type: c.definedTypeLinkNode('stakeStateV2'), - }), - ]), - }), - ], - }; - }, - }, - { - // enum discriminator -> u32 - select: '[definedTypeNode]stakeState.[enumTypeNode]', - transform: (node) => { - c.assertIsNode(node, 'enumTypeNode'); - return { - ...node, - size: c.numberTypeNode('u32'), - }; - }, - }, - { - // enum discriminator -> u32 - select: '[definedTypeNode]stakeStateV2.[enumTypeNode]', - transform: (node) => { - c.assertIsNode(node, 'enumTypeNode'); - return { - ...node, - size: c.numberTypeNode('u32'), - }; - }, - }, - { - // Use omitted optional account strategy for all instructions. - select: '[instructionNode]', - transform: (node) => { - c.assertIsNode(node, 'instructionNode'); - return { - ...node, - optionalAccountStrategy: 'omitted', - arguments: node.arguments.map((arg) => - arg.name === 'discriminator' - ? { ...arg, type: c.numberTypeNode('u32') } - : arg - ), - }; - }, - }, - ]) -); - -// Render JavaScript. -const jsClient = path.join(workingDirectory, 'clients', 'js'); -codama.accept( - renderJavaScriptVisitor(path.join(jsClient, 'src', 'generated'), { - prettierOptions: JSON.parse( - fs.readFileSync(path.join(jsClient, '.prettierrc.json'), 'utf-8') - ), - }) -); - -// Remove the stake account from the accounts since the Rust client -// provides its own implementation. -codama.update( - c.updateAccountsVisitor({ - stakeStateAccount: { delete: true }, - }) -); - -// Render Rust. -const rustClient = path.join(workingDirectory, 'clients', 'rust'); -codama.accept( - renderRustVisitor(path.join(rustClient, 'src', 'generated'), { - formatCode: true, - crateFolder: rustClient, - anchorTraits: false, - toolchain: getToolchainArgument('format'), - traitOptions: { - baseDefaults: [ - 'borsh::BorshSerialize', - 'borsh::BorshDeserialize', - 'serde::Serialize', - 'serde::Deserialize', - 'Clone', - 'Debug', - // 'Eq', <- Remove 'Eq' from the default traits. - 'PartialEq', - ], - }, - }) -); - diff --git a/scripts/utils.mts b/scripts/utils.mts deleted file mode 100644 index b0c6996c..00000000 --- a/scripts/utils.mts +++ /dev/null @@ -1,168 +0,0 @@ -import 'zx/globals'; -import { JsonMap, parse as parseToml } from '@iarna/toml'; - -process.env.FORCE_COLOR = '3'; -process.env.CARGO_TERM_COLOR = 'always'; - -export const workingDirectory = (await $`pwd`.quiet()).toString().trim(); - -export function getAllProgramIdls(): string[] { - return getAllProgramFolders().map((folder) => - path.join(workingDirectory, folder, 'idl.json') - ); -} - -export function getExternalProgramOutputDir(): string { - const config = getCargoMetadata()?.solana?.['external-programs-output']; - return path.join(workingDirectory, config ?? 'target/deploy'); -} - -export function getExternalProgramAddresses(): string[] { - const addresses = getProgramFolders().flatMap( - (folder) => getCargoMetadata(folder)?.solana?.['program-dependencies'] ?? [] - ); - return Array.from(new Set(addresses)); -} - -export function getExternalAccountAddresses(): string[] { - const addresses = getProgramFolders().flatMap( - (folder) => getCargoMetadata(folder)?.solana?.['account-dependencies'] ?? [] - ); - return Array.from(new Set(addresses)); -} - -let didWarnAboutMissingPrograms = false; -export function getProgramFolders(): string[] { - let programs; - - if (process.env.PROGRAMS) { - try { - programs = JSON.parse(process.env.PROGRAMS); - } catch (error) { - programs = process.env.PROGRAMS.split(/\s+/); - } - } else { - programs = getAllProgramFolders(); - } - - const filteredPrograms = programs.filter((program) => - fs.existsSync(path.join(workingDirectory, program)) - ); - - if ( - filteredPrograms.length !== programs.length && - !didWarnAboutMissingPrograms - ) { - didWarnAboutMissingPrograms = true; - programs - .filter((program) => !filteredPrograms.includes(program)) - .forEach((program) => { - echo(chalk.yellow(`Program not found: ${workingDirectory}/${program}`)); - }); - } - - return filteredPrograms; -} - -export function getAllProgramFolders(): string[] { - return getCargo().workspace['members'].filter((member) => { - const cargo = getCargo(member); - return ( - cargo.package['metadata']?.['solana']?.['program-id'] && - cargo.lib['crate-type']?.includes('cdylib') - ); - }); -} - -export function getCargo(folder?: string): JsonMap { - return parseToml( - fs.readFileSync( - path.resolve(workingDirectory, path.join(folder ? folder : '.', 'Cargo.toml')), - 'utf8' - ) - ); -} - -export function getCargoMetadata(folder?: string) { - const cargo = getCargo(folder); - return folder ? cargo?.package?.['metadata'] : cargo?.workspace?.['metadata']; -} - -export function getSolanaVersion(): string { - return getCargoMetadata()?.cli?.solana; -} - -export function getToolchain(operation): string { - return getCargoMetadata()?.toolchains?.[operation]; -} - -export function getToolchainArgument(operation): string { - const channel = getToolchain(operation); - return channel ? `+${channel}` : ''; -} - -export function cliArguments(): string[] { - return process.argv.slice(2); -} - -export function popArgument(args: string[], arg: string) { - const index = args.indexOf(arg); - if (index >= 0) { - args.splice(index, 1); - } - return index >= 0; -} - -export function partitionArguments( - args: string[], - delimiter: string, - defaultArgs?: string[] -): [string[], string[]] { - const index = args.indexOf(delimiter); - const [providedCargoArgs, providedCommandArgs] = - index >= 0 ? [args.slice(0, index), args.slice(index + 1)] : [args, []]; - - if (defaultArgs) { - const [defaultCargoArgs, defaultCommandArgs] = partitionArguments( - defaultArgs, - delimiter - ); - return [ - [...defaultCargoArgs, ...providedCargoArgs], - [...defaultCommandArgs, ...providedCommandArgs], - ]; - } - return [providedCargoArgs, providedCommandArgs]; -} - -export async function getInstalledSolanaVersion(): Promise { - try { - const { stdout } = await $`solana --version`.quiet(); - return stdout.match(/(\d+\.\d+\.\d+)/)?.[1]; - } catch (error) { - return ''; - } -} - -export function parseCliArguments(): { - command: string; - libraryPath: string; - args: string[]; -} { - const command = process.argv[2]; - const args = process.argv.slice(3); - - // Extract the relative crate directory from the command-line arguments. This - // is the only required argument. - const relativePath = args.shift(); - - if (!relativePath) { - throw new Error('Missing relative manifest path'); - } - - return { - command, - libraryPath: path.join(workingDirectory, relativePath), - args, - }; -}