@smithii_io/mixoor 0.0.12 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/generated/accounts/nullifierAccount.ts","../../src/generated/types/assetType.ts","../../src/generated/types/commitmentInserted.ts","../../src/generated/types/rootEntry.ts","../../src/generated/accounts/pool.ts","../../src/generated/accounts/vault.ts","../../src/generated/programs/mixoor.ts","../../src/generated/errors/mixoor.ts","../../src/generated/shared/index.ts","../../src/generated/instructions/deposit.ts","../../src/generated/instructions/initializePool.ts","../../src/generated/instructions/transfer.ts","../../src/utils/circuit.ts","../../src/utils/crypto.ts","../../src/utils/merkle.ts","../../src/utils/pda.ts"],"names":["AssetType","combineCodec","getStructEncoder","fixEncoderSize","getBytesEncoder","getStructDecoder","fixDecoderSize","getBytesDecoder","getI64Encoder","getI64Decoder","transformEncoder","getAddressEncoder","getU32Encoder","getAddressDecoder","getU32Decoder","decodeAccount","assertAccountExists","fetchEncodedAccount","assertAccountsExist","fetchEncodedAccounts","MixoorAccount","MixoorInstruction","kitIsTransactionSigner","getU64Encoder","getU64Decoder","getProgramDerivedAddress","getArrayEncoder","getArrayDecoder","nodeRandomBytes","buildPoseidon","SNARK_FIELD_SIZE"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n assertAccountExists,\n assertAccountsExist,\n combineCodec,\n decodeAccount,\n fetchEncodedAccount,\n fetchEncodedAccounts,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getI64Decoder,\n getI64Encoder,\n getStructDecoder,\n getStructEncoder,\n transformEncoder,\n type Account,\n type Address,\n type EncodedAccount,\n type FetchAccountConfig,\n type FetchAccountsConfig,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type MaybeAccount,\n type MaybeEncodedAccount,\n type ReadonlyUint8Array,\n} from '@solana/kit';\n\nexport const NULLIFIER_ACCOUNT_DISCRIMINATOR = new Uint8Array([\n 250, 31, 238, 177, 213, 98, 48, 172,\n]);\n\nexport function getNullifierAccountDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n NULLIFIER_ACCOUNT_DISCRIMINATOR\n );\n}\n\nexport type NullifierAccount = {\n discriminator: ReadonlyUint8Array;\n nullifierHash: ReadonlyUint8Array;\n spentAt: bigint;\n};\n\nexport type NullifierAccountArgs = {\n nullifierHash: ReadonlyUint8Array;\n spentAt: number | bigint;\n};\n\n/** Gets the encoder for {@link NullifierAccountArgs} account data. */\nexport function getNullifierAccountEncoder(): FixedSizeEncoder<NullifierAccountArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['nullifierHash', fixEncoderSize(getBytesEncoder(), 32)],\n ['spentAt', getI64Encoder()],\n ]),\n (value) => ({ ...value, discriminator: NULLIFIER_ACCOUNT_DISCRIMINATOR })\n );\n}\n\n/** Gets the decoder for {@link NullifierAccount} account data. */\nexport function getNullifierAccountDecoder(): FixedSizeDecoder<NullifierAccount> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['nullifierHash', fixDecoderSize(getBytesDecoder(), 32)],\n ['spentAt', getI64Decoder()],\n ]);\n}\n\n/** Gets the codec for {@link NullifierAccount} account data. */\nexport function getNullifierAccountCodec(): FixedSizeCodec<\n NullifierAccountArgs,\n NullifierAccount\n> {\n return combineCodec(\n getNullifierAccountEncoder(),\n getNullifierAccountDecoder()\n );\n}\n\nexport function decodeNullifierAccount<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress>\n): Account<NullifierAccount, TAddress>;\nexport function decodeNullifierAccount<TAddress extends string = string>(\n encodedAccount: MaybeEncodedAccount<TAddress>\n): MaybeAccount<NullifierAccount, TAddress>;\nexport function decodeNullifierAccount<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress> | MaybeEncodedAccount<TAddress>\n):\n | Account<NullifierAccount, TAddress>\n | MaybeAccount<NullifierAccount, TAddress> {\n return decodeAccount(\n encodedAccount as MaybeEncodedAccount<TAddress>,\n getNullifierAccountDecoder()\n );\n}\n\nexport async function fetchNullifierAccount<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<Account<NullifierAccount, TAddress>> {\n const maybeAccount = await fetchMaybeNullifierAccount(rpc, address, config);\n assertAccountExists(maybeAccount);\n return maybeAccount;\n}\n\nexport async function fetchMaybeNullifierAccount<\n TAddress extends string = string,\n>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<MaybeAccount<NullifierAccount, TAddress>> {\n const maybeAccount = await fetchEncodedAccount(rpc, address, config);\n return decodeNullifierAccount(maybeAccount);\n}\n\nexport async function fetchAllNullifierAccount(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<Account<NullifierAccount>[]> {\n const maybeAccounts = await fetchAllMaybeNullifierAccount(\n rpc,\n addresses,\n config\n );\n assertAccountsExist(maybeAccounts);\n return maybeAccounts;\n}\n\nexport async function fetchAllMaybeNullifierAccount(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<MaybeAccount<NullifierAccount>[]> {\n const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);\n return maybeAccounts.map((maybeAccount) =>\n decodeNullifierAccount(maybeAccount)\n );\n}\n\nexport function getNullifierAccountSize(): number {\n return 48;\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n getEnumDecoder,\n getEnumEncoder,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n} from '@solana/kit';\n\nexport enum AssetType {\n Sol,\n SplToken,\n}\n\nexport type AssetTypeArgs = AssetType;\n\nexport function getAssetTypeEncoder(): FixedSizeEncoder<AssetTypeArgs> {\n return getEnumEncoder(AssetType);\n}\n\nexport function getAssetTypeDecoder(): FixedSizeDecoder<AssetType> {\n return getEnumDecoder(AssetType);\n}\n\nexport function getAssetTypeCodec(): FixedSizeCodec<AssetTypeArgs, AssetType> {\n return combineCodec(getAssetTypeEncoder(), getAssetTypeDecoder());\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type ReadonlyUint8Array,\n} from '@solana/kit';\n\nexport type CommitmentInserted = {\n commitment: ReadonlyUint8Array;\n leafIndex: number;\n pool: Address;\n};\n\nexport type CommitmentInsertedArgs = CommitmentInserted;\n\nexport function getCommitmentInsertedEncoder(): FixedSizeEncoder<CommitmentInsertedArgs> {\n return getStructEncoder([\n ['commitment', fixEncoderSize(getBytesEncoder(), 32)],\n ['leafIndex', getU32Encoder()],\n ['pool', getAddressEncoder()],\n ]);\n}\n\nexport function getCommitmentInsertedDecoder(): FixedSizeDecoder<CommitmentInserted> {\n return getStructDecoder([\n ['commitment', fixDecoderSize(getBytesDecoder(), 32)],\n ['leafIndex', getU32Decoder()],\n ['pool', getAddressDecoder()],\n ]);\n}\n\nexport function getCommitmentInsertedCodec(): FixedSizeCodec<\n CommitmentInsertedArgs,\n CommitmentInserted\n> {\n return combineCodec(\n getCommitmentInsertedEncoder(),\n getCommitmentInsertedDecoder()\n );\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getI64Decoder,\n getI64Encoder,\n getStructDecoder,\n getStructEncoder,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type ReadonlyUint8Array,\n} from '@solana/kit';\n\nexport type RootEntry = { root: ReadonlyUint8Array; timestamp: bigint };\n\nexport type RootEntryArgs = {\n root: ReadonlyUint8Array;\n timestamp: number | bigint;\n};\n\nexport function getRootEntryEncoder(): FixedSizeEncoder<RootEntryArgs> {\n return getStructEncoder([\n ['root', fixEncoderSize(getBytesEncoder(), 32)],\n ['timestamp', getI64Encoder()],\n ]);\n}\n\nexport function getRootEntryDecoder(): FixedSizeDecoder<RootEntry> {\n return getStructDecoder([\n ['root', fixDecoderSize(getBytesDecoder(), 32)],\n ['timestamp', getI64Decoder()],\n ]);\n}\n\nexport function getRootEntryCodec(): FixedSizeCodec<RootEntryArgs, RootEntry> {\n return combineCodec(getRootEntryEncoder(), getRootEntryDecoder());\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n assertAccountExists,\n assertAccountsExist,\n combineCodec,\n decodeAccount,\n fetchEncodedAccount,\n fetchEncodedAccounts,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getArrayDecoder,\n getArrayEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getU64Decoder,\n getU64Encoder,\n getU8Decoder,\n getU8Encoder,\n transformEncoder,\n type Account,\n type Address,\n type EncodedAccount,\n type FetchAccountConfig,\n type FetchAccountsConfig,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type MaybeAccount,\n type MaybeEncodedAccount,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport {\n getRootEntryDecoder,\n getRootEntryEncoder,\n type RootEntry,\n type RootEntryArgs,\n} from '../types';\n\nexport const POOL_DISCRIMINATOR = new Uint8Array([\n 241, 154, 109, 4, 17, 177, 109, 188,\n]);\n\nexport function getPoolDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(POOL_DISCRIMINATOR);\n}\n\nexport type Pool = {\n discriminator: ReadonlyUint8Array;\n authority: Address;\n mint: Address;\n vault: Address;\n feeCollector: Address;\n rootHistory: Array<RootEntry>;\n totalDeposited: bigint;\n totalWithdrawn: bigint;\n nextLeafIndex: number;\n assetType: number;\n rootHistoryIndex: number;\n bump: number;\n padding: ReadonlyUint8Array;\n};\n\nexport type PoolArgs = {\n authority: Address;\n mint: Address;\n vault: Address;\n feeCollector: Address;\n rootHistory: Array<RootEntryArgs>;\n totalDeposited: number | bigint;\n totalWithdrawn: number | bigint;\n nextLeafIndex: number;\n assetType: number;\n rootHistoryIndex: number;\n bump: number;\n padding: ReadonlyUint8Array;\n};\n\n/** Gets the encoder for {@link PoolArgs} account data. */\nexport function getPoolEncoder(): FixedSizeEncoder<PoolArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['authority', getAddressEncoder()],\n ['mint', getAddressEncoder()],\n ['vault', getAddressEncoder()],\n ['feeCollector', getAddressEncoder()],\n ['rootHistory', getArrayEncoder(getRootEntryEncoder(), { size: 50 })],\n ['totalDeposited', getU64Encoder()],\n ['totalWithdrawn', getU64Encoder()],\n ['nextLeafIndex', getU32Encoder()],\n ['assetType', getU8Encoder()],\n ['rootHistoryIndex', getU8Encoder()],\n ['bump', getU8Encoder()],\n ['padding', fixEncoderSize(getBytesEncoder(), 1)],\n ]),\n (value) => ({ ...value, discriminator: POOL_DISCRIMINATOR })\n );\n}\n\n/** Gets the decoder for {@link Pool} account data. */\nexport function getPoolDecoder(): FixedSizeDecoder<Pool> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['authority', getAddressDecoder()],\n ['mint', getAddressDecoder()],\n ['vault', getAddressDecoder()],\n ['feeCollector', getAddressDecoder()],\n ['rootHistory', getArrayDecoder(getRootEntryDecoder(), { size: 50 })],\n ['totalDeposited', getU64Decoder()],\n ['totalWithdrawn', getU64Decoder()],\n ['nextLeafIndex', getU32Decoder()],\n ['assetType', getU8Decoder()],\n ['rootHistoryIndex', getU8Decoder()],\n ['bump', getU8Decoder()],\n ['padding', fixDecoderSize(getBytesDecoder(), 1)],\n ]);\n}\n\n/** Gets the codec for {@link Pool} account data. */\nexport function getPoolCodec(): FixedSizeCodec<PoolArgs, Pool> {\n return combineCodec(getPoolEncoder(), getPoolDecoder());\n}\n\nexport function decodePool<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress>\n): Account<Pool, TAddress>;\nexport function decodePool<TAddress extends string = string>(\n encodedAccount: MaybeEncodedAccount<TAddress>\n): MaybeAccount<Pool, TAddress>;\nexport function decodePool<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress> | MaybeEncodedAccount<TAddress>\n): Account<Pool, TAddress> | MaybeAccount<Pool, TAddress> {\n return decodeAccount(\n encodedAccount as MaybeEncodedAccount<TAddress>,\n getPoolDecoder()\n );\n}\n\nexport async function fetchPool<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<Account<Pool, TAddress>> {\n const maybeAccount = await fetchMaybePool(rpc, address, config);\n assertAccountExists(maybeAccount);\n return maybeAccount;\n}\n\nexport async function fetchMaybePool<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<MaybeAccount<Pool, TAddress>> {\n const maybeAccount = await fetchEncodedAccount(rpc, address, config);\n return decodePool(maybeAccount);\n}\n\nexport async function fetchAllPool(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<Account<Pool>[]> {\n const maybeAccounts = await fetchAllMaybePool(rpc, addresses, config);\n assertAccountsExist(maybeAccounts);\n return maybeAccounts;\n}\n\nexport async function fetchAllMaybePool(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<MaybeAccount<Pool>[]> {\n const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);\n return maybeAccounts.map((maybeAccount) => decodePool(maybeAccount));\n}\n\nexport function getPoolSize(): number {\n return 2160;\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n assertAccountExists,\n assertAccountsExist,\n combineCodec,\n decodeAccount,\n fetchEncodedAccount,\n fetchEncodedAccounts,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n transformEncoder,\n type Account,\n type Address,\n type EncodedAccount,\n type FetchAccountConfig,\n type FetchAccountsConfig,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type MaybeAccount,\n type MaybeEncodedAccount,\n type ReadonlyUint8Array,\n} from '@solana/kit';\n\nexport const VAULT_DISCRIMINATOR = new Uint8Array([\n 211, 8, 232, 43, 2, 152, 117, 119,\n]);\n\nexport function getVaultDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(VAULT_DISCRIMINATOR);\n}\n\nexport type Vault = { discriminator: ReadonlyUint8Array };\n\nexport type VaultArgs = {};\n\n/** Gets the encoder for {@link VaultArgs} account data. */\nexport function getVaultEncoder(): FixedSizeEncoder<VaultArgs> {\n return transformEncoder(\n getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]),\n (value) => ({ ...value, discriminator: VAULT_DISCRIMINATOR })\n );\n}\n\n/** Gets the decoder for {@link Vault} account data. */\nexport function getVaultDecoder(): FixedSizeDecoder<Vault> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ]);\n}\n\n/** Gets the codec for {@link Vault} account data. */\nexport function getVaultCodec(): FixedSizeCodec<VaultArgs, Vault> {\n return combineCodec(getVaultEncoder(), getVaultDecoder());\n}\n\nexport function decodeVault<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress>\n): Account<Vault, TAddress>;\nexport function decodeVault<TAddress extends string = string>(\n encodedAccount: MaybeEncodedAccount<TAddress>\n): MaybeAccount<Vault, TAddress>;\nexport function decodeVault<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress> | MaybeEncodedAccount<TAddress>\n): Account<Vault, TAddress> | MaybeAccount<Vault, TAddress> {\n return decodeAccount(\n encodedAccount as MaybeEncodedAccount<TAddress>,\n getVaultDecoder()\n );\n}\n\nexport async function fetchVault<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<Account<Vault, TAddress>> {\n const maybeAccount = await fetchMaybeVault(rpc, address, config);\n assertAccountExists(maybeAccount);\n return maybeAccount;\n}\n\nexport async function fetchMaybeVault<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<MaybeAccount<Vault, TAddress>> {\n const maybeAccount = await fetchEncodedAccount(rpc, address, config);\n return decodeVault(maybeAccount);\n}\n\nexport async function fetchAllVault(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<Account<Vault>[]> {\n const maybeAccounts = await fetchAllMaybeVault(rpc, addresses, config);\n assertAccountsExist(maybeAccounts);\n return maybeAccounts;\n}\n\nexport async function fetchAllMaybeVault(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<MaybeAccount<Vault>[]> {\n const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);\n return maybeAccounts.map((maybeAccount) => decodeVault(maybeAccount));\n}\n\nexport function getVaultSize(): number {\n return 8;\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n containsBytes,\n fixEncoderSize,\n getBytesEncoder,\n type Address,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport {\n type ParsedDepositInstruction,\n type ParsedInitializePoolInstruction,\n type ParsedTransferInstruction,\n} from '../instructions';\n\nexport const MIXOOR_PROGRAM_ADDRESS =\n 'mixEcfx7w47hvRwb9Nj7UeSQkCz6vZMbRHixMyYMLMb' as Address<'mixEcfx7w47hvRwb9Nj7UeSQkCz6vZMbRHixMyYMLMb'>;\n\nexport enum MixoorAccount {\n NullifierAccount,\n Pool,\n Vault,\n}\n\nexport function identifyMixoorAccount(\n account: { data: ReadonlyUint8Array } | ReadonlyUint8Array\n): MixoorAccount {\n const data = 'data' in account ? account.data : account;\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([250, 31, 238, 177, 213, 98, 48, 172])\n ),\n 0\n )\n ) {\n return MixoorAccount.NullifierAccount;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([241, 154, 109, 4, 17, 177, 109, 188])\n ),\n 0\n )\n ) {\n return MixoorAccount.Pool;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([211, 8, 232, 43, 2, 152, 117, 119])\n ),\n 0\n )\n ) {\n return MixoorAccount.Vault;\n }\n throw new Error(\n 'The provided account could not be identified as a mixoor account.'\n );\n}\n\nexport enum MixoorInstruction {\n Deposit,\n InitializePool,\n Transfer,\n}\n\nexport function identifyMixoorInstruction(\n instruction: { data: ReadonlyUint8Array } | ReadonlyUint8Array\n): MixoorInstruction {\n const data = 'data' in instruction ? instruction.data : instruction;\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([242, 35, 198, 137, 82, 225, 242, 182])\n ),\n 0\n )\n ) {\n return MixoorInstruction.Deposit;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([95, 180, 10, 172, 84, 174, 232, 40])\n ),\n 0\n )\n ) {\n return MixoorInstruction.InitializePool;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([163, 52, 200, 231, 140, 3, 69, 186])\n ),\n 0\n )\n ) {\n return MixoorInstruction.Transfer;\n }\n throw new Error(\n 'The provided instruction could not be identified as a mixoor instruction.'\n );\n}\n\nexport type ParsedMixoorInstruction<\n TProgram extends string = 'mixEcfx7w47hvRwb9Nj7UeSQkCz6vZMbRHixMyYMLMb',\n> =\n | ({\n instructionType: MixoorInstruction.Deposit;\n } & ParsedDepositInstruction<TProgram>)\n | ({\n instructionType: MixoorInstruction.InitializePool;\n } & ParsedInitializePoolInstruction<TProgram>)\n | ({\n instructionType: MixoorInstruction.Transfer;\n } & ParsedTransferInstruction<TProgram>);\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n isProgramError,\n type Address,\n type SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM,\n type SolanaError,\n} from '@solana/kit';\nimport { MIXOOR_PROGRAM_ADDRESS } from '../programs';\n\n/** InvalidProof: Invalid proof */\nexport const MIXOOR_ERROR__INVALID_PROOF = 0x1770; // 6000\n/** UnknownRoot: Unknown merkle root */\nexport const MIXOOR_ERROR__UNKNOWN_ROOT = 0x1771; // 6001\n/** InvalidAmount: Invalid amount */\nexport const MIXOOR_ERROR__INVALID_AMOUNT = 0x1772; // 6002\n/** InsufficientFunds: Insufficient funds */\nexport const MIXOOR_ERROR__INSUFFICIENT_FUNDS = 0x1773; // 6003\n/** MissingTokenAccount: Missing token account */\nexport const MIXOOR_ERROR__MISSING_TOKEN_ACCOUNT = 0x1774; // 6004\n/** Overflow: Overflow */\nexport const MIXOOR_ERROR__OVERFLOW = 0x1775; // 6005\n/** InvalidPublicInputs: Invalid number of public inputs */\nexport const MIXOOR_ERROR__INVALID_PUBLIC_INPUTS = 0x1776; // 6006\n/** InvalidAssetType: Invalid asset type deserialized */\nexport const MIXOOR_ERROR__INVALID_ASSET_TYPE = 0x1777; // 6007\n/** InvalidMerkleTreeAddress: Invalid merkle tree address */\nexport const MIXOOR_ERROR__INVALID_MERKLE_TREE_ADDRESS = 0x1778; // 6008\n/** InvalidMerkleTree: Invalid merkle tree structure or out of bounds access */\nexport const MIXOOR_ERROR__INVALID_MERKLE_TREE = 0x1779; // 6009\n/** PoseidonHashError: Poseidon hash error */\nexport const MIXOOR_ERROR__POSEIDON_HASH_ERROR = 0x177a; // 6010\n/** MerkleTreeFull: Merkle tree is full */\nexport const MIXOOR_ERROR__MERKLE_TREE_FULL = 0x177b; // 6011\n/** InvalidMerkleProof: Invalid merkle proof */\nexport const MIXOOR_ERROR__INVALID_MERKLE_PROOF = 0x177c; // 6012\n/** PublicInputMismatch: Public input does not match instruction parameter */\nexport const MIXOOR_ERROR__PUBLIC_INPUT_MISMATCH = 0x177d; // 6013\n\nexport type MixoorError =\n | typeof MIXOOR_ERROR__INSUFFICIENT_FUNDS\n | typeof MIXOOR_ERROR__INVALID_AMOUNT\n | typeof MIXOOR_ERROR__INVALID_ASSET_TYPE\n | typeof MIXOOR_ERROR__INVALID_MERKLE_PROOF\n | typeof MIXOOR_ERROR__INVALID_MERKLE_TREE\n | typeof MIXOOR_ERROR__INVALID_MERKLE_TREE_ADDRESS\n | typeof MIXOOR_ERROR__INVALID_PROOF\n | typeof MIXOOR_ERROR__INVALID_PUBLIC_INPUTS\n | typeof MIXOOR_ERROR__MERKLE_TREE_FULL\n | typeof MIXOOR_ERROR__MISSING_TOKEN_ACCOUNT\n | typeof MIXOOR_ERROR__OVERFLOW\n | typeof MIXOOR_ERROR__POSEIDON_HASH_ERROR\n | typeof MIXOOR_ERROR__PUBLIC_INPUT_MISMATCH\n | typeof MIXOOR_ERROR__UNKNOWN_ROOT;\n\nlet mixoorErrorMessages: Record<MixoorError, string> | undefined;\nif (process.env.NODE_ENV !== 'production') {\n mixoorErrorMessages = {\n [MIXOOR_ERROR__INSUFFICIENT_FUNDS]: `Insufficient funds`,\n [MIXOOR_ERROR__INVALID_AMOUNT]: `Invalid amount`,\n [MIXOOR_ERROR__INVALID_ASSET_TYPE]: `Invalid asset type deserialized`,\n [MIXOOR_ERROR__INVALID_MERKLE_PROOF]: `Invalid merkle proof`,\n [MIXOOR_ERROR__INVALID_MERKLE_TREE]: `Invalid merkle tree structure or out of bounds access`,\n [MIXOOR_ERROR__INVALID_MERKLE_TREE_ADDRESS]: `Invalid merkle tree address`,\n [MIXOOR_ERROR__INVALID_PROOF]: `Invalid proof`,\n [MIXOOR_ERROR__INVALID_PUBLIC_INPUTS]: `Invalid number of public inputs`,\n [MIXOOR_ERROR__MERKLE_TREE_FULL]: `Merkle tree is full`,\n [MIXOOR_ERROR__MISSING_TOKEN_ACCOUNT]: `Missing token account`,\n [MIXOOR_ERROR__OVERFLOW]: `Overflow`,\n [MIXOOR_ERROR__POSEIDON_HASH_ERROR]: `Poseidon hash error`,\n [MIXOOR_ERROR__PUBLIC_INPUT_MISMATCH]: `Public input does not match instruction parameter`,\n [MIXOOR_ERROR__UNKNOWN_ROOT]: `Unknown merkle root`,\n };\n}\n\nexport function getMixoorErrorMessage(code: MixoorError): string {\n if (process.env.NODE_ENV !== 'production') {\n return (mixoorErrorMessages as Record<MixoorError, string>)[code];\n }\n\n return 'Error message not available in production bundles.';\n}\n\nexport function isMixoorError<TProgramErrorCode extends MixoorError>(\n error: unknown,\n transactionMessage: {\n instructions: Record<number, { programAddress: Address }>;\n },\n code?: TProgramErrorCode\n): error is SolanaError<typeof SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM> &\n Readonly<{ context: Readonly<{ code: TProgramErrorCode }> }> {\n return isProgramError<TProgramErrorCode>(\n error,\n transactionMessage,\n MIXOOR_PROGRAM_ADDRESS,\n code\n );\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n AccountRole,\n isProgramDerivedAddress,\n isTransactionSigner as kitIsTransactionSigner,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type ProgramDerivedAddress,\n type TransactionSigner,\n upgradeRoleToSigner,\n} from '@solana/kit';\n\n/**\n * Asserts that the given value is not null or undefined.\n * @internal\n */\nexport function expectSome<T>(value: T | null | undefined): T {\n if (value === null || value === undefined) {\n throw new Error('Expected a value but received null or undefined.');\n }\n return value;\n}\n\n/**\n * Asserts that the given value is a PublicKey.\n * @internal\n */\nexport function expectAddress<T extends string = string>(\n value:\n | Address<T>\n | ProgramDerivedAddress<T>\n | TransactionSigner<T>\n | null\n | undefined\n): Address<T> {\n if (!value) {\n throw new Error('Expected a Address.');\n }\n if (typeof value === 'object' && 'address' in value) {\n return value.address;\n }\n if (Array.isArray(value)) {\n return value[0] as Address<T>;\n }\n return value as Address<T>;\n}\n\n/**\n * Asserts that the given value is a PDA.\n * @internal\n */\nexport function expectProgramDerivedAddress<T extends string = string>(\n value:\n | Address<T>\n | ProgramDerivedAddress<T>\n | TransactionSigner<T>\n | null\n | undefined\n): ProgramDerivedAddress<T> {\n if (!value || !Array.isArray(value) || !isProgramDerivedAddress(value)) {\n throw new Error('Expected a ProgramDerivedAddress.');\n }\n return value;\n}\n\n/**\n * Asserts that the given value is a TransactionSigner.\n * @internal\n */\nexport function expectTransactionSigner<T extends string = string>(\n value:\n | Address<T>\n | ProgramDerivedAddress<T>\n | TransactionSigner<T>\n | null\n | undefined\n): TransactionSigner<T> {\n if (!value || !isTransactionSigner(value)) {\n throw new Error('Expected a TransactionSigner.');\n }\n return value;\n}\n\n/**\n * Defines an instruction account to resolve.\n * @internal\n */\nexport type ResolvedAccount<\n T extends string = string,\n U extends\n | Address<T>\n | ProgramDerivedAddress<T>\n | TransactionSigner<T>\n | null =\n | Address<T>\n | ProgramDerivedAddress<T>\n | TransactionSigner<T>\n | null,\n> = {\n isWritable: boolean;\n value: U;\n};\n\n/**\n * Defines an instruction that stores additional bytes on-chain.\n * @internal\n */\nexport type InstructionWithByteDelta = {\n byteDelta: number;\n};\n\n/**\n * Get account metas and signers from resolved accounts.\n * @internal\n */\nexport function getAccountMetaFactory(\n programAddress: Address,\n optionalAccountStrategy: 'omitted' | 'programId'\n) {\n return (\n account: ResolvedAccount\n ): AccountMeta | AccountSignerMeta | undefined => {\n if (!account.value) {\n if (optionalAccountStrategy === 'omitted') return;\n return Object.freeze({\n address: programAddress,\n role: AccountRole.READONLY,\n });\n }\n\n const writableRole = account.isWritable\n ? AccountRole.WRITABLE\n : AccountRole.READONLY;\n return Object.freeze({\n address: expectAddress(account.value),\n role: isTransactionSigner(account.value)\n ? upgradeRoleToSigner(writableRole)\n : writableRole,\n ...(isTransactionSigner(account.value) ? { signer: account.value } : {}),\n });\n };\n}\n\nexport function isTransactionSigner<TAddress extends string = string>(\n value:\n | Address<TAddress>\n | ProgramDerivedAddress<TAddress>\n | TransactionSigner<TAddress>\n): value is TransactionSigner<TAddress> {\n return (\n !!value &&\n typeof value === 'object' &&\n 'address' in value &&\n kitIsTransactionSigner(value)\n );\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU64Decoder,\n getU64Encoder,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/kit';\nimport { MIXOOR_PROGRAM_ADDRESS } from '../programs';\nimport {\n expectAddress,\n getAccountMetaFactory,\n type ResolvedAccount,\n} from '../shared';\n\nexport const DEPOSIT_DISCRIMINATOR = new Uint8Array([\n 242, 35, 198, 137, 82, 225, 242, 182,\n]);\n\nexport function getDepositDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(DEPOSIT_DISCRIMINATOR);\n}\n\nexport type DepositInstruction<\n TProgram extends string = typeof MIXOOR_PROGRAM_ADDRESS,\n TAccountDepositor extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountMint extends string | AccountMeta<string> = string,\n TAccountVault extends string | AccountMeta<string> = string,\n TAccountDepositorTokenAccount extends string | AccountMeta<string> = string,\n TAccountVaultTokenAccount extends string | AccountMeta<string> = string,\n TAccountSystemProgram extends string | AccountMeta<string> =\n '11111111111111111111111111111111',\n TAccountTokenProgram extends string | AccountMeta<string> =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',\n TAccountAssociatedTokenProgram extends string | AccountMeta<string> =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL',\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountDepositor extends string\n ? WritableSignerAccount<TAccountDepositor> &\n AccountSignerMeta<TAccountDepositor>\n : TAccountDepositor,\n TAccountPool extends string\n ? WritableAccount<TAccountPool>\n : TAccountPool,\n TAccountMint extends string\n ? WritableAccount<TAccountMint>\n : TAccountMint,\n TAccountVault extends string\n ? WritableAccount<TAccountVault>\n : TAccountVault,\n TAccountDepositorTokenAccount extends string\n ? WritableAccount<TAccountDepositorTokenAccount>\n : TAccountDepositorTokenAccount,\n TAccountVaultTokenAccount extends string\n ? WritableAccount<TAccountVaultTokenAccount>\n : TAccountVaultTokenAccount,\n TAccountSystemProgram extends string\n ? ReadonlyAccount<TAccountSystemProgram>\n : TAccountSystemProgram,\n TAccountTokenProgram extends string\n ? ReadonlyAccount<TAccountTokenProgram>\n : TAccountTokenProgram,\n TAccountAssociatedTokenProgram extends string\n ? ReadonlyAccount<TAccountAssociatedTokenProgram>\n : TAccountAssociatedTokenProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type DepositInstructionData = {\n discriminator: ReadonlyUint8Array;\n amount: bigint;\n commitment: ReadonlyUint8Array;\n newRoot: ReadonlyUint8Array;\n};\n\nexport type DepositInstructionDataArgs = {\n amount: number | bigint;\n commitment: ReadonlyUint8Array;\n newRoot: ReadonlyUint8Array;\n};\n\nexport function getDepositInstructionDataEncoder(): FixedSizeEncoder<DepositInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['amount', getU64Encoder()],\n ['commitment', fixEncoderSize(getBytesEncoder(), 32)],\n ['newRoot', fixEncoderSize(getBytesEncoder(), 32)],\n ]),\n (value) => ({ ...value, discriminator: DEPOSIT_DISCRIMINATOR })\n );\n}\n\nexport function getDepositInstructionDataDecoder(): FixedSizeDecoder<DepositInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['amount', getU64Decoder()],\n ['commitment', fixDecoderSize(getBytesDecoder(), 32)],\n ['newRoot', fixDecoderSize(getBytesDecoder(), 32)],\n ]);\n}\n\nexport function getDepositInstructionDataCodec(): FixedSizeCodec<\n DepositInstructionDataArgs,\n DepositInstructionData\n> {\n return combineCodec(\n getDepositInstructionDataEncoder(),\n getDepositInstructionDataDecoder()\n );\n}\n\nexport type DepositAsyncInput<\n TAccountDepositor extends string = string,\n TAccountPool extends string = string,\n TAccountMint extends string = string,\n TAccountVault extends string = string,\n TAccountDepositorTokenAccount extends string = string,\n TAccountVaultTokenAccount extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountTokenProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n> = {\n depositor: TransactionSigner<TAccountDepositor>;\n pool: Address<TAccountPool>;\n mint: Address<TAccountMint>;\n vault?: Address<TAccountVault>;\n depositorTokenAccount?: Address<TAccountDepositorTokenAccount>;\n vaultTokenAccount?: Address<TAccountVaultTokenAccount>;\n systemProgram?: Address<TAccountSystemProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n amount: DepositInstructionDataArgs['amount'];\n commitment: DepositInstructionDataArgs['commitment'];\n newRoot: DepositInstructionDataArgs['newRoot'];\n};\n\nexport async function getDepositInstructionAsync<\n TAccountDepositor extends string,\n TAccountPool extends string,\n TAccountMint extends string,\n TAccountVault extends string,\n TAccountDepositorTokenAccount extends string,\n TAccountVaultTokenAccount extends string,\n TAccountSystemProgram extends string,\n TAccountTokenProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TProgramAddress extends Address = typeof MIXOOR_PROGRAM_ADDRESS,\n>(\n input: DepositAsyncInput<\n TAccountDepositor,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountDepositorTokenAccount,\n TAccountVaultTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): Promise<\n DepositInstruction<\n TProgramAddress,\n TAccountDepositor,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountDepositorTokenAccount,\n TAccountVaultTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? MIXOOR_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n depositor: { value: input.depositor ?? null, isWritable: true },\n pool: { value: input.pool ?? null, isWritable: true },\n mint: { value: input.mint ?? null, isWritable: true },\n vault: { value: input.vault ?? null, isWritable: true },\n depositorTokenAccount: {\n value: input.depositorTokenAccount ?? null,\n isWritable: true,\n },\n vaultTokenAccount: {\n value: input.vaultTokenAccount ?? null,\n isWritable: true,\n },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n associatedTokenProgram: {\n value: input.associatedTokenProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.vault.value) {\n accounts.vault.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(new Uint8Array([118, 97, 117, 108, 116])),\n getAddressEncoder().encode(expectAddress(accounts.pool.value)),\n ],\n });\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta(accounts.depositor),\n getAccountMeta(accounts.pool),\n getAccountMeta(accounts.mint),\n getAccountMeta(accounts.vault),\n getAccountMeta(accounts.depositorTokenAccount),\n getAccountMeta(accounts.vaultTokenAccount),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.tokenProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n ],\n data: getDepositInstructionDataEncoder().encode(\n args as DepositInstructionDataArgs\n ),\n programAddress,\n } as DepositInstruction<\n TProgramAddress,\n TAccountDepositor,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountDepositorTokenAccount,\n TAccountVaultTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >);\n}\n\nexport type DepositInput<\n TAccountDepositor extends string = string,\n TAccountPool extends string = string,\n TAccountMint extends string = string,\n TAccountVault extends string = string,\n TAccountDepositorTokenAccount extends string = string,\n TAccountVaultTokenAccount extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountTokenProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n> = {\n depositor: TransactionSigner<TAccountDepositor>;\n pool: Address<TAccountPool>;\n mint: Address<TAccountMint>;\n vault: Address<TAccountVault>;\n depositorTokenAccount?: Address<TAccountDepositorTokenAccount>;\n vaultTokenAccount?: Address<TAccountVaultTokenAccount>;\n systemProgram?: Address<TAccountSystemProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n amount: DepositInstructionDataArgs['amount'];\n commitment: DepositInstructionDataArgs['commitment'];\n newRoot: DepositInstructionDataArgs['newRoot'];\n};\n\nexport function getDepositInstruction<\n TAccountDepositor extends string,\n TAccountPool extends string,\n TAccountMint extends string,\n TAccountVault extends string,\n TAccountDepositorTokenAccount extends string,\n TAccountVaultTokenAccount extends string,\n TAccountSystemProgram extends string,\n TAccountTokenProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TProgramAddress extends Address = typeof MIXOOR_PROGRAM_ADDRESS,\n>(\n input: DepositInput<\n TAccountDepositor,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountDepositorTokenAccount,\n TAccountVaultTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): DepositInstruction<\n TProgramAddress,\n TAccountDepositor,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountDepositorTokenAccount,\n TAccountVaultTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? MIXOOR_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n depositor: { value: input.depositor ?? null, isWritable: true },\n pool: { value: input.pool ?? null, isWritable: true },\n mint: { value: input.mint ?? null, isWritable: true },\n vault: { value: input.vault ?? null, isWritable: true },\n depositorTokenAccount: {\n value: input.depositorTokenAccount ?? null,\n isWritable: true,\n },\n vaultTokenAccount: {\n value: input.vaultTokenAccount ?? null,\n isWritable: true,\n },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n associatedTokenProgram: {\n value: input.associatedTokenProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta(accounts.depositor),\n getAccountMeta(accounts.pool),\n getAccountMeta(accounts.mint),\n getAccountMeta(accounts.vault),\n getAccountMeta(accounts.depositorTokenAccount),\n getAccountMeta(accounts.vaultTokenAccount),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.tokenProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n ],\n data: getDepositInstructionDataEncoder().encode(\n args as DepositInstructionDataArgs\n ),\n programAddress,\n } as DepositInstruction<\n TProgramAddress,\n TAccountDepositor,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountDepositorTokenAccount,\n TAccountVaultTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >);\n}\n\nexport type ParsedDepositInstruction<\n TProgram extends string = typeof MIXOOR_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n depositor: TAccountMetas[0];\n pool: TAccountMetas[1];\n mint: TAccountMetas[2];\n vault: TAccountMetas[3];\n depositorTokenAccount?: TAccountMetas[4] | undefined;\n vaultTokenAccount?: TAccountMetas[5] | undefined;\n systemProgram: TAccountMetas[6];\n tokenProgram: TAccountMetas[7];\n associatedTokenProgram: TAccountMetas[8];\n };\n data: DepositInstructionData;\n};\n\nexport function parseDepositInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedDepositInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 9) {\n // TODO: Coded error.\n throw new Error('Not enough accounts');\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n const getNextOptionalAccount = () => {\n const accountMeta = getNextAccount();\n return accountMeta.address === MIXOOR_PROGRAM_ADDRESS\n ? undefined\n : accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n depositor: getNextAccount(),\n pool: getNextAccount(),\n mint: getNextAccount(),\n vault: getNextAccount(),\n depositorTokenAccount: getNextOptionalAccount(),\n vaultTokenAccount: getNextOptionalAccount(),\n systemProgram: getNextAccount(),\n tokenProgram: getNextAccount(),\n associatedTokenProgram: getNextAccount(),\n },\n data: getDepositInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/kit';\nimport { MIXOOR_PROGRAM_ADDRESS } from '../programs';\nimport {\n expectAddress,\n expectSome,\n getAccountMetaFactory,\n type ResolvedAccount,\n} from '../shared';\nimport {\n getAssetTypeDecoder,\n getAssetTypeEncoder,\n type AssetType,\n type AssetTypeArgs,\n} from '../types';\n\nexport const INITIALIZE_POOL_DISCRIMINATOR = new Uint8Array([\n 95, 180, 10, 172, 84, 174, 232, 40,\n]);\n\nexport function getInitializePoolDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n INITIALIZE_POOL_DISCRIMINATOR\n );\n}\n\nexport type InitializePoolInstruction<\n TProgram extends string = typeof MIXOOR_PROGRAM_ADDRESS,\n TAccountAuthority extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountVault extends string | AccountMeta<string> = string,\n TAccountVaultAta extends string | AccountMeta<string> = string,\n TAccountMint extends string | AccountMeta<string> = string,\n TAccountFeeCollector extends string | AccountMeta<string> =\n '9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d',\n TAccountSystemProgram extends string | AccountMeta<string> =\n '11111111111111111111111111111111',\n TAccountTokenProgram extends string | AccountMeta<string> =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',\n TAccountAssociatedTokenProgram extends string | AccountMeta<string> =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL',\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountAuthority extends string\n ? WritableSignerAccount<TAccountAuthority> &\n AccountSignerMeta<TAccountAuthority>\n : TAccountAuthority,\n TAccountPool extends string\n ? WritableAccount<TAccountPool>\n : TAccountPool,\n TAccountVault extends string\n ? WritableAccount<TAccountVault>\n : TAccountVault,\n TAccountVaultAta extends string\n ? WritableAccount<TAccountVaultAta>\n : TAccountVaultAta,\n TAccountMint extends string\n ? WritableAccount<TAccountMint>\n : TAccountMint,\n TAccountFeeCollector extends string\n ? ReadonlyAccount<TAccountFeeCollector>\n : TAccountFeeCollector,\n TAccountSystemProgram extends string\n ? ReadonlyAccount<TAccountSystemProgram>\n : TAccountSystemProgram,\n TAccountTokenProgram extends string\n ? ReadonlyAccount<TAccountTokenProgram>\n : TAccountTokenProgram,\n TAccountAssociatedTokenProgram extends string\n ? ReadonlyAccount<TAccountAssociatedTokenProgram>\n : TAccountAssociatedTokenProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type InitializePoolInstructionData = {\n discriminator: ReadonlyUint8Array;\n assetType: AssetType;\n};\n\nexport type InitializePoolInstructionDataArgs = { assetType: AssetTypeArgs };\n\nexport function getInitializePoolInstructionDataEncoder(): FixedSizeEncoder<InitializePoolInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['assetType', getAssetTypeEncoder()],\n ]),\n (value) => ({ ...value, discriminator: INITIALIZE_POOL_DISCRIMINATOR })\n );\n}\n\nexport function getInitializePoolInstructionDataDecoder(): FixedSizeDecoder<InitializePoolInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['assetType', getAssetTypeDecoder()],\n ]);\n}\n\nexport function getInitializePoolInstructionDataCodec(): FixedSizeCodec<\n InitializePoolInstructionDataArgs,\n InitializePoolInstructionData\n> {\n return combineCodec(\n getInitializePoolInstructionDataEncoder(),\n getInitializePoolInstructionDataDecoder()\n );\n}\n\nexport type InitializePoolAsyncInput<\n TAccountAuthority extends string = string,\n TAccountPool extends string = string,\n TAccountVault extends string = string,\n TAccountVaultAta extends string = string,\n TAccountMint extends string = string,\n TAccountFeeCollector extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountTokenProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n> = {\n authority: TransactionSigner<TAccountAuthority>;\n pool?: Address<TAccountPool>;\n vault?: Address<TAccountVault>;\n vaultAta?: Address<TAccountVaultAta>;\n mint: Address<TAccountMint>;\n feeCollector?: Address<TAccountFeeCollector>;\n systemProgram?: Address<TAccountSystemProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n assetType: InitializePoolInstructionDataArgs['assetType'];\n};\n\nexport async function getInitializePoolInstructionAsync<\n TAccountAuthority extends string,\n TAccountPool extends string,\n TAccountVault extends string,\n TAccountVaultAta extends string,\n TAccountMint extends string,\n TAccountFeeCollector extends string,\n TAccountSystemProgram extends string,\n TAccountTokenProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TProgramAddress extends Address = typeof MIXOOR_PROGRAM_ADDRESS,\n>(\n input: InitializePoolAsyncInput<\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountMint,\n TAccountFeeCollector,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): Promise<\n InitializePoolInstruction<\n TProgramAddress,\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountMint,\n TAccountFeeCollector,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? MIXOOR_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n authority: { value: input.authority ?? null, isWritable: true },\n pool: { value: input.pool ?? null, isWritable: true },\n vault: { value: input.vault ?? null, isWritable: true },\n vaultAta: { value: input.vaultAta ?? null, isWritable: true },\n mint: { value: input.mint ?? null, isWritable: true },\n feeCollector: { value: input.feeCollector ?? null, isWritable: false },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n associatedTokenProgram: {\n value: input.associatedTokenProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.pool.value) {\n accounts.pool.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(new Uint8Array([112, 111, 111, 108])),\n getAddressEncoder().encode(expectAddress(accounts.mint.value)),\n getAssetTypeEncoder().encode(expectSome(args.assetType)),\n ],\n });\n }\n if (!accounts.vault.value) {\n accounts.vault.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(new Uint8Array([118, 97, 117, 108, 116])),\n getAddressEncoder().encode(expectAddress(accounts.pool.value)),\n ],\n });\n }\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n if (!accounts.vaultAta.value) {\n accounts.vaultAta.value = await getProgramDerivedAddress({\n programAddress:\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>,\n seeds: [\n getAddressEncoder().encode(expectAddress(accounts.vault.value)),\n getAddressEncoder().encode(expectAddress(accounts.tokenProgram.value)),\n getAddressEncoder().encode(expectAddress(accounts.mint.value)),\n ],\n });\n }\n if (!accounts.feeCollector.value) {\n accounts.feeCollector.value =\n '9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d' as Address<'9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d'>;\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta(accounts.authority),\n getAccountMeta(accounts.pool),\n getAccountMeta(accounts.vault),\n getAccountMeta(accounts.vaultAta),\n getAccountMeta(accounts.mint),\n getAccountMeta(accounts.feeCollector),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.tokenProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n ],\n data: getInitializePoolInstructionDataEncoder().encode(\n args as InitializePoolInstructionDataArgs\n ),\n programAddress,\n } as InitializePoolInstruction<\n TProgramAddress,\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountMint,\n TAccountFeeCollector,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >);\n}\n\nexport type InitializePoolInput<\n TAccountAuthority extends string = string,\n TAccountPool extends string = string,\n TAccountVault extends string = string,\n TAccountVaultAta extends string = string,\n TAccountMint extends string = string,\n TAccountFeeCollector extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountTokenProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n> = {\n authority: TransactionSigner<TAccountAuthority>;\n pool: Address<TAccountPool>;\n vault: Address<TAccountVault>;\n vaultAta: Address<TAccountVaultAta>;\n mint: Address<TAccountMint>;\n feeCollector?: Address<TAccountFeeCollector>;\n systemProgram?: Address<TAccountSystemProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n assetType: InitializePoolInstructionDataArgs['assetType'];\n};\n\nexport function getInitializePoolInstruction<\n TAccountAuthority extends string,\n TAccountPool extends string,\n TAccountVault extends string,\n TAccountVaultAta extends string,\n TAccountMint extends string,\n TAccountFeeCollector extends string,\n TAccountSystemProgram extends string,\n TAccountTokenProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TProgramAddress extends Address = typeof MIXOOR_PROGRAM_ADDRESS,\n>(\n input: InitializePoolInput<\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountMint,\n TAccountFeeCollector,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): InitializePoolInstruction<\n TProgramAddress,\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountMint,\n TAccountFeeCollector,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? MIXOOR_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n authority: { value: input.authority ?? null, isWritable: true },\n pool: { value: input.pool ?? null, isWritable: true },\n vault: { value: input.vault ?? null, isWritable: true },\n vaultAta: { value: input.vaultAta ?? null, isWritable: true },\n mint: { value: input.mint ?? null, isWritable: true },\n feeCollector: { value: input.feeCollector ?? null, isWritable: false },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n associatedTokenProgram: {\n value: input.associatedTokenProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n if (!accounts.feeCollector.value) {\n accounts.feeCollector.value =\n '9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d' as Address<'9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d'>;\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta(accounts.authority),\n getAccountMeta(accounts.pool),\n getAccountMeta(accounts.vault),\n getAccountMeta(accounts.vaultAta),\n getAccountMeta(accounts.mint),\n getAccountMeta(accounts.feeCollector),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.tokenProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n ],\n data: getInitializePoolInstructionDataEncoder().encode(\n args as InitializePoolInstructionDataArgs\n ),\n programAddress,\n } as InitializePoolInstruction<\n TProgramAddress,\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountMint,\n TAccountFeeCollector,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >);\n}\n\nexport type ParsedInitializePoolInstruction<\n TProgram extends string = typeof MIXOOR_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n authority: TAccountMetas[0];\n pool: TAccountMetas[1];\n vault: TAccountMetas[2];\n vaultAta: TAccountMetas[3];\n mint: TAccountMetas[4];\n feeCollector: TAccountMetas[5];\n systemProgram: TAccountMetas[6];\n tokenProgram: TAccountMetas[7];\n associatedTokenProgram: TAccountMetas[8];\n };\n data: InitializePoolInstructionData;\n};\n\nexport function parseInitializePoolInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedInitializePoolInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 9) {\n // TODO: Coded error.\n throw new Error('Not enough accounts');\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n authority: getNextAccount(),\n pool: getNextAccount(),\n vault: getNextAccount(),\n vaultAta: getNextAccount(),\n mint: getNextAccount(),\n feeCollector: getNextAccount(),\n systemProgram: getNextAccount(),\n tokenProgram: getNextAccount(),\n associatedTokenProgram: getNextAccount(),\n },\n data: getInitializePoolInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getArrayDecoder,\n getArrayEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU64Decoder,\n getU64Encoder,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/kit';\nimport { MIXOOR_PROGRAM_ADDRESS } from '../programs';\nimport {\n expectAddress,\n expectSome,\n getAccountMetaFactory,\n type ResolvedAccount,\n} from '../shared';\n\nexport const TRANSFER_DISCRIMINATOR = new Uint8Array([\n 163, 52, 200, 231, 140, 3, 69, 186,\n]);\n\nexport function getTransferDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(TRANSFER_DISCRIMINATOR);\n}\n\nexport type TransferInstruction<\n TProgram extends string = typeof MIXOOR_PROGRAM_ADDRESS,\n TAccountRelayer extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountMint extends string | AccountMeta<string> = string,\n TAccountVault extends string | AccountMeta<string> = string,\n TAccountNullifier extends string | AccountMeta<string> = string,\n TAccountRecipient extends string | AccountMeta<string> = string,\n TAccountVaultTokenAccount extends string | AccountMeta<string> = string,\n TAccountRecipientTokenAccount extends string | AccountMeta<string> = string,\n TAccountFeeCollector extends string | AccountMeta<string> =\n '9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d',\n TAccountFeeCollectorTokenAccount extends string | AccountMeta<string> =\n string,\n TAccountSystemProgram extends string | AccountMeta<string> =\n '11111111111111111111111111111111',\n TAccountTokenProgram extends string | AccountMeta<string> =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',\n TAccountAssociatedTokenProgram extends string | AccountMeta<string> =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL',\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountRelayer extends string\n ? WritableSignerAccount<TAccountRelayer> &\n AccountSignerMeta<TAccountRelayer>\n : TAccountRelayer,\n TAccountPool extends string\n ? WritableAccount<TAccountPool>\n : TAccountPool,\n TAccountMint extends string\n ? WritableAccount<TAccountMint>\n : TAccountMint,\n TAccountVault extends string\n ? WritableAccount<TAccountVault>\n : TAccountVault,\n TAccountNullifier extends string\n ? WritableAccount<TAccountNullifier>\n : TAccountNullifier,\n TAccountRecipient extends string\n ? WritableAccount<TAccountRecipient>\n : TAccountRecipient,\n TAccountVaultTokenAccount extends string\n ? WritableAccount<TAccountVaultTokenAccount>\n : TAccountVaultTokenAccount,\n TAccountRecipientTokenAccount extends string\n ? WritableAccount<TAccountRecipientTokenAccount>\n : TAccountRecipientTokenAccount,\n TAccountFeeCollector extends string\n ? WritableAccount<TAccountFeeCollector>\n : TAccountFeeCollector,\n TAccountFeeCollectorTokenAccount extends string\n ? WritableAccount<TAccountFeeCollectorTokenAccount>\n : TAccountFeeCollectorTokenAccount,\n TAccountSystemProgram extends string\n ? ReadonlyAccount<TAccountSystemProgram>\n : TAccountSystemProgram,\n TAccountTokenProgram extends string\n ? ReadonlyAccount<TAccountTokenProgram>\n : TAccountTokenProgram,\n TAccountAssociatedTokenProgram extends string\n ? ReadonlyAccount<TAccountAssociatedTokenProgram>\n : TAccountAssociatedTokenProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type TransferInstructionData = {\n discriminator: ReadonlyUint8Array;\n proofA: ReadonlyUint8Array;\n proofB: ReadonlyUint8Array;\n proofC: ReadonlyUint8Array;\n publicInputs: Array<ReadonlyUint8Array>;\n nullifierHash: ReadonlyUint8Array;\n relayerFee: bigint;\n recipientAmount: bigint;\n};\n\nexport type TransferInstructionDataArgs = {\n proofA: ReadonlyUint8Array;\n proofB: ReadonlyUint8Array;\n proofC: ReadonlyUint8Array;\n publicInputs: Array<ReadonlyUint8Array>;\n nullifierHash: ReadonlyUint8Array;\n relayerFee: number | bigint;\n recipientAmount: number | bigint;\n};\n\nexport function getTransferInstructionDataEncoder(): FixedSizeEncoder<TransferInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['proofA', fixEncoderSize(getBytesEncoder(), 64)],\n ['proofB', fixEncoderSize(getBytesEncoder(), 128)],\n ['proofC', fixEncoderSize(getBytesEncoder(), 64)],\n [\n 'publicInputs',\n getArrayEncoder(fixEncoderSize(getBytesEncoder(), 32), { size: 7 }),\n ],\n ['nullifierHash', fixEncoderSize(getBytesEncoder(), 32)],\n ['relayerFee', getU64Encoder()],\n ['recipientAmount', getU64Encoder()],\n ]),\n (value) => ({ ...value, discriminator: TRANSFER_DISCRIMINATOR })\n );\n}\n\nexport function getTransferInstructionDataDecoder(): FixedSizeDecoder<TransferInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['proofA', fixDecoderSize(getBytesDecoder(), 64)],\n ['proofB', fixDecoderSize(getBytesDecoder(), 128)],\n ['proofC', fixDecoderSize(getBytesDecoder(), 64)],\n [\n 'publicInputs',\n getArrayDecoder(fixDecoderSize(getBytesDecoder(), 32), { size: 7 }),\n ],\n ['nullifierHash', fixDecoderSize(getBytesDecoder(), 32)],\n ['relayerFee', getU64Decoder()],\n ['recipientAmount', getU64Decoder()],\n ]);\n}\n\nexport function getTransferInstructionDataCodec(): FixedSizeCodec<\n TransferInstructionDataArgs,\n TransferInstructionData\n> {\n return combineCodec(\n getTransferInstructionDataEncoder(),\n getTransferInstructionDataDecoder()\n );\n}\n\nexport type TransferAsyncInput<\n TAccountRelayer extends string = string,\n TAccountPool extends string = string,\n TAccountMint extends string = string,\n TAccountVault extends string = string,\n TAccountNullifier extends string = string,\n TAccountRecipient extends string = string,\n TAccountVaultTokenAccount extends string = string,\n TAccountRecipientTokenAccount extends string = string,\n TAccountFeeCollector extends string = string,\n TAccountFeeCollectorTokenAccount extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountTokenProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n> = {\n relayer: TransactionSigner<TAccountRelayer>;\n pool: Address<TAccountPool>;\n mint: Address<TAccountMint>;\n vault?: Address<TAccountVault>;\n nullifier?: Address<TAccountNullifier>;\n recipient: Address<TAccountRecipient>;\n vaultTokenAccount?: Address<TAccountVaultTokenAccount>;\n recipientTokenAccount?: Address<TAccountRecipientTokenAccount>;\n feeCollector?: Address<TAccountFeeCollector>;\n feeCollectorTokenAccount?: Address<TAccountFeeCollectorTokenAccount>;\n systemProgram?: Address<TAccountSystemProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n proofA: TransferInstructionDataArgs['proofA'];\n proofB: TransferInstructionDataArgs['proofB'];\n proofC: TransferInstructionDataArgs['proofC'];\n publicInputs: TransferInstructionDataArgs['publicInputs'];\n nullifierHash: TransferInstructionDataArgs['nullifierHash'];\n relayerFee: TransferInstructionDataArgs['relayerFee'];\n recipientAmount: TransferInstructionDataArgs['recipientAmount'];\n};\n\nexport async function getTransferInstructionAsync<\n TAccountRelayer extends string,\n TAccountPool extends string,\n TAccountMint extends string,\n TAccountVault extends string,\n TAccountNullifier extends string,\n TAccountRecipient extends string,\n TAccountVaultTokenAccount extends string,\n TAccountRecipientTokenAccount extends string,\n TAccountFeeCollector extends string,\n TAccountFeeCollectorTokenAccount extends string,\n TAccountSystemProgram extends string,\n TAccountTokenProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TProgramAddress extends Address = typeof MIXOOR_PROGRAM_ADDRESS,\n>(\n input: TransferAsyncInput<\n TAccountRelayer,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountNullifier,\n TAccountRecipient,\n TAccountVaultTokenAccount,\n TAccountRecipientTokenAccount,\n TAccountFeeCollector,\n TAccountFeeCollectorTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): Promise<\n TransferInstruction<\n TProgramAddress,\n TAccountRelayer,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountNullifier,\n TAccountRecipient,\n TAccountVaultTokenAccount,\n TAccountRecipientTokenAccount,\n TAccountFeeCollector,\n TAccountFeeCollectorTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? MIXOOR_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n relayer: { value: input.relayer ?? null, isWritable: true },\n pool: { value: input.pool ?? null, isWritable: true },\n mint: { value: input.mint ?? null, isWritable: true },\n vault: { value: input.vault ?? null, isWritable: true },\n nullifier: { value: input.nullifier ?? null, isWritable: true },\n recipient: { value: input.recipient ?? null, isWritable: true },\n vaultTokenAccount: {\n value: input.vaultTokenAccount ?? null,\n isWritable: true,\n },\n recipientTokenAccount: {\n value: input.recipientTokenAccount ?? null,\n isWritable: true,\n },\n feeCollector: { value: input.feeCollector ?? null, isWritable: true },\n feeCollectorTokenAccount: {\n value: input.feeCollectorTokenAccount ?? null,\n isWritable: true,\n },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n associatedTokenProgram: {\n value: input.associatedTokenProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.vault.value) {\n accounts.vault.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(new Uint8Array([118, 97, 117, 108, 116])),\n getAddressEncoder().encode(expectAddress(accounts.pool.value)),\n ],\n });\n }\n if (!accounts.nullifier.value) {\n accounts.nullifier.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([110, 117, 108, 108, 105, 102, 105, 101, 114])\n ),\n getAddressEncoder().encode(expectAddress(accounts.pool.value)),\n fixEncoderSize(getBytesEncoder(), 32).encode(\n expectSome(args.nullifierHash)\n ),\n ],\n });\n }\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n if (!accounts.recipientTokenAccount.value) {\n accounts.recipientTokenAccount.value = await getProgramDerivedAddress({\n programAddress:\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>,\n seeds: [\n getAddressEncoder().encode(expectAddress(accounts.recipient.value)),\n getAddressEncoder().encode(expectAddress(accounts.tokenProgram.value)),\n getAddressEncoder().encode(expectAddress(accounts.mint.value)),\n ],\n });\n }\n if (!accounts.feeCollector.value) {\n accounts.feeCollector.value =\n '9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d' as Address<'9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d'>;\n }\n if (!accounts.feeCollectorTokenAccount.value) {\n accounts.feeCollectorTokenAccount.value = await getProgramDerivedAddress({\n programAddress:\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>,\n seeds: [\n getAddressEncoder().encode(expectAddress(accounts.feeCollector.value)),\n getAddressEncoder().encode(expectAddress(accounts.tokenProgram.value)),\n getAddressEncoder().encode(expectAddress(accounts.mint.value)),\n ],\n });\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta(accounts.relayer),\n getAccountMeta(accounts.pool),\n getAccountMeta(accounts.mint),\n getAccountMeta(accounts.vault),\n getAccountMeta(accounts.nullifier),\n getAccountMeta(accounts.recipient),\n getAccountMeta(accounts.vaultTokenAccount),\n getAccountMeta(accounts.recipientTokenAccount),\n getAccountMeta(accounts.feeCollector),\n getAccountMeta(accounts.feeCollectorTokenAccount),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.tokenProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n ],\n data: getTransferInstructionDataEncoder().encode(\n args as TransferInstructionDataArgs\n ),\n programAddress,\n } as TransferInstruction<\n TProgramAddress,\n TAccountRelayer,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountNullifier,\n TAccountRecipient,\n TAccountVaultTokenAccount,\n TAccountRecipientTokenAccount,\n TAccountFeeCollector,\n TAccountFeeCollectorTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >);\n}\n\nexport type TransferInput<\n TAccountRelayer extends string = string,\n TAccountPool extends string = string,\n TAccountMint extends string = string,\n TAccountVault extends string = string,\n TAccountNullifier extends string = string,\n TAccountRecipient extends string = string,\n TAccountVaultTokenAccount extends string = string,\n TAccountRecipientTokenAccount extends string = string,\n TAccountFeeCollector extends string = string,\n TAccountFeeCollectorTokenAccount extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountTokenProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n> = {\n relayer: TransactionSigner<TAccountRelayer>;\n pool: Address<TAccountPool>;\n mint: Address<TAccountMint>;\n vault: Address<TAccountVault>;\n nullifier: Address<TAccountNullifier>;\n recipient: Address<TAccountRecipient>;\n vaultTokenAccount?: Address<TAccountVaultTokenAccount>;\n recipientTokenAccount?: Address<TAccountRecipientTokenAccount>;\n feeCollector?: Address<TAccountFeeCollector>;\n feeCollectorTokenAccount?: Address<TAccountFeeCollectorTokenAccount>;\n systemProgram?: Address<TAccountSystemProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n proofA: TransferInstructionDataArgs['proofA'];\n proofB: TransferInstructionDataArgs['proofB'];\n proofC: TransferInstructionDataArgs['proofC'];\n publicInputs: TransferInstructionDataArgs['publicInputs'];\n nullifierHash: TransferInstructionDataArgs['nullifierHash'];\n relayerFee: TransferInstructionDataArgs['relayerFee'];\n recipientAmount: TransferInstructionDataArgs['recipientAmount'];\n};\n\nexport function getTransferInstruction<\n TAccountRelayer extends string,\n TAccountPool extends string,\n TAccountMint extends string,\n TAccountVault extends string,\n TAccountNullifier extends string,\n TAccountRecipient extends string,\n TAccountVaultTokenAccount extends string,\n TAccountRecipientTokenAccount extends string,\n TAccountFeeCollector extends string,\n TAccountFeeCollectorTokenAccount extends string,\n TAccountSystemProgram extends string,\n TAccountTokenProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TProgramAddress extends Address = typeof MIXOOR_PROGRAM_ADDRESS,\n>(\n input: TransferInput<\n TAccountRelayer,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountNullifier,\n TAccountRecipient,\n TAccountVaultTokenAccount,\n TAccountRecipientTokenAccount,\n TAccountFeeCollector,\n TAccountFeeCollectorTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): TransferInstruction<\n TProgramAddress,\n TAccountRelayer,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountNullifier,\n TAccountRecipient,\n TAccountVaultTokenAccount,\n TAccountRecipientTokenAccount,\n TAccountFeeCollector,\n TAccountFeeCollectorTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? MIXOOR_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n relayer: { value: input.relayer ?? null, isWritable: true },\n pool: { value: input.pool ?? null, isWritable: true },\n mint: { value: input.mint ?? null, isWritable: true },\n vault: { value: input.vault ?? null, isWritable: true },\n nullifier: { value: input.nullifier ?? null, isWritable: true },\n recipient: { value: input.recipient ?? null, isWritable: true },\n vaultTokenAccount: {\n value: input.vaultTokenAccount ?? null,\n isWritable: true,\n },\n recipientTokenAccount: {\n value: input.recipientTokenAccount ?? null,\n isWritable: true,\n },\n feeCollector: { value: input.feeCollector ?? null, isWritable: true },\n feeCollectorTokenAccount: {\n value: input.feeCollectorTokenAccount ?? null,\n isWritable: true,\n },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n associatedTokenProgram: {\n value: input.associatedTokenProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n if (!accounts.feeCollector.value) {\n accounts.feeCollector.value =\n '9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d' as Address<'9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d'>;\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta(accounts.relayer),\n getAccountMeta(accounts.pool),\n getAccountMeta(accounts.mint),\n getAccountMeta(accounts.vault),\n getAccountMeta(accounts.nullifier),\n getAccountMeta(accounts.recipient),\n getAccountMeta(accounts.vaultTokenAccount),\n getAccountMeta(accounts.recipientTokenAccount),\n getAccountMeta(accounts.feeCollector),\n getAccountMeta(accounts.feeCollectorTokenAccount),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.tokenProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n ],\n data: getTransferInstructionDataEncoder().encode(\n args as TransferInstructionDataArgs\n ),\n programAddress,\n } as TransferInstruction<\n TProgramAddress,\n TAccountRelayer,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountNullifier,\n TAccountRecipient,\n TAccountVaultTokenAccount,\n TAccountRecipientTokenAccount,\n TAccountFeeCollector,\n TAccountFeeCollectorTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >);\n}\n\nexport type ParsedTransferInstruction<\n TProgram extends string = typeof MIXOOR_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n relayer: TAccountMetas[0];\n pool: TAccountMetas[1];\n mint: TAccountMetas[2];\n vault: TAccountMetas[3];\n nullifier: TAccountMetas[4];\n recipient: TAccountMetas[5];\n vaultTokenAccount?: TAccountMetas[6] | undefined;\n recipientTokenAccount?: TAccountMetas[7] | undefined;\n feeCollector: TAccountMetas[8];\n feeCollectorTokenAccount?: TAccountMetas[9] | undefined;\n systemProgram: TAccountMetas[10];\n tokenProgram: TAccountMetas[11];\n associatedTokenProgram: TAccountMetas[12];\n };\n data: TransferInstructionData;\n};\n\nexport function parseTransferInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedTransferInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 13) {\n // TODO: Coded error.\n throw new Error('Not enough accounts');\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n const getNextOptionalAccount = () => {\n const accountMeta = getNextAccount();\n return accountMeta.address === MIXOOR_PROGRAM_ADDRESS\n ? undefined\n : accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n relayer: getNextAccount(),\n pool: getNextAccount(),\n mint: getNextAccount(),\n vault: getNextAccount(),\n nullifier: getNextAccount(),\n recipient: getNextAccount(),\n vaultTokenAccount: getNextOptionalAccount(),\n recipientTokenAccount: getNextOptionalAccount(),\n feeCollector: getNextAccount(),\n feeCollectorTokenAccount: getNextOptionalAccount(),\n systemProgram: getNextAccount(),\n tokenProgram: getNextAccount(),\n associatedTokenProgram: getNextAccount(),\n },\n data: getTransferInstructionDataDecoder().decode(instruction.data),\n };\n}\n","import { Address, getAddressEncoder } from '@solana/kit';\nimport { buildPoseidon } from 'circomlibjs';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { groth16 } from 'snarkjs';\nimport { fileURLToPath } from 'url';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet poseidon: any;\n\nasync function initPoseidon() {\n if (!poseidon) {\n poseidon = await buildPoseidon();\n }\n return poseidon;\n}\n\n// Snark scalar field size\nconst SNARK_FIELD_SIZE = BigInt(\n '21888242871839275222246405745257275088548364400416034343698204186575808495617'\n);\n\n// Helper function to convert Uint8Array to field element (BigInt string)\n// consistently using Big-Endian interpretation AND modulo reduction\nfunction toFieldElement(bytes: ArrayLike<number>): string {\n let bigInt = 0n;\n for (let i = 0; i < bytes.length; i++) {\n bigInt = (bigInt << 8n) | BigInt(bytes[i]);\n }\n return (bigInt % SNARK_FIELD_SIZE).toString();\n}\n\nexport async function poseidonHash(inputs: Uint8Array[]): Promise<Uint8Array> {\n await initPoseidon();\n // Ensure inputs are converted to BigInts (standard form) using Big-Endian interpretation\n // Do NOT use poseidon.F.e() as it might convert to Montgomery form which poseidon() expects to handle itself\n const hash = poseidon(inputs.map((x) => BigInt(toFieldElement(x))));\n const hashBigInt = poseidon.F.toObject(hash);\n\n // Convert BigInt to 32-byte array (BIG-ENDIAN to match MerkleTree class)\n const bytes = new Uint8Array(32);\n let temp = BigInt(hashBigInt);\n for (let i = 31; i >= 0; i--) {\n bytes[i] = Number(temp & BigInt(0xff));\n temp = temp >> BigInt(8);\n }\n\n return bytes;\n}\n\nexport async function generateCommitment(\n secret: Uint8Array,\n nullifier: Uint8Array,\n amount: bigint,\n poolId: Address\n): Promise<Uint8Array> {\n await initPoseidon();\n\n const poolIdBytes = getAddressEncoder().encode(poolId);\n\n const secretField = BigInt(toFieldElement(secret));\n const nullifierField = BigInt(toFieldElement(nullifier));\n const amountField = BigInt(amount);\n const poolIdField = BigInt(toFieldElement(Uint8Array.from(poolIdBytes)));\n\n const hash = poseidon([\n secretField,\n nullifierField,\n amountField,\n poolIdField,\n ]);\n const hashBigInt = poseidon.F.toObject(hash);\n\n // Convert result to bytes (BIG-ENDIAN to match MerkleTree class)\n const bytes = new Uint8Array(32);\n let temp = BigInt(hashBigInt);\n for (let i = 31; i >= 0; i--) {\n bytes[i] = Number(temp & BigInt(0xff));\n temp = temp >> BigInt(8);\n }\n\n return bytes;\n}\n\nexport async function generateNullifier(\n nullifier: Uint8Array,\n poolId: Address\n): Promise<Uint8Array> {\n const poolIdBytes = getAddressEncoder().encode(poolId);\n return await poseidonHash([nullifier, Uint8Array.from(poolIdBytes)]);\n}\n\nexport interface ProofInput {\n secret: Uint8Array;\n nullifier: Uint8Array;\n amount: bigint;\n pathElements: Uint8Array[];\n pathIndices: number[];\n recipient: Uint8Array;\n relayer: Uint8Array;\n fee: number;\n refund: bigint;\n root: Uint8Array;\n poolAddress: Address; // pool address\n}\n\nexport interface ProofOutput {\n proof_a: Uint8Array;\n proof_b: Uint8Array;\n proof_c: Uint8Array;\n}\nfunction fieldElementToBytes(element: string): Uint8Array {\n // Convert field element string to BigInt, then to 32-byte array (BIG-ENDIAN to match snarkjs output)\n const bigInt = BigInt(element);\n const bytes = new Uint8Array(32);\n\n for (let i = 0; i < 32; i++) {\n bytes[31 - i] = Number((bigInt >> BigInt(i * 8)) & BigInt(0xff));\n }\n\n return bytes;\n}\n\nfunction publicSignalToBytes(signal: string): Uint8Array {\n const bigInt = BigInt(signal);\n const bytes = new Uint8Array(32);\n\n for (let i = 0; i < 32; i++) {\n bytes[31 - i] = Number((bigInt >> BigInt(i * 8)) & BigInt(0xff));\n }\n\n return bytes;\n}\n\nfunction g1PointToBytes(point: [string, string]): Uint8Array {\n const x = fieldElementToBytes(point[0]);\n const y = fieldElementToBytes(point[1]);\n\n const result = new Uint8Array(64);\n result.set(x, 0);\n result.set(y, 32);\n\n return result;\n}\n\nfunction g2PointToBytes(\n point: [[string, string], [string, string]]\n): Uint8Array {\n // G2 point has two coordinates, each is a pair of field elements\n // Solana/EIP-197 BN254 G2 expectation: c1 then c0 (Big Endian logic)\n // snarkjs output: [c0, c1]\n const x1 = fieldElementToBytes(point[0][1]); // c1\n const x0 = fieldElementToBytes(point[0][0]); // c0\n const y1 = fieldElementToBytes(point[1][1]); // c1\n const y0 = fieldElementToBytes(point[1][0]); // c0\n\n const result = new Uint8Array(128);\n result.set(x1, 0);\n result.set(x0, 32);\n result.set(y1, 64);\n result.set(y0, 96);\n\n return result;\n}\n\nexport type ProofData = {\n proofA: Uint8Array;\n proofB: Uint8Array;\n proofC: Uint8Array;\n};\n\nexport async function generateProof(input: ProofInput): Promise<{\n proofData: ProofData;\n publicInputs: Uint8Array[];\n}> {\n await initPoseidon();\n\n const poolIdBytes = getAddressEncoder().encode(input.poolAddress);\n\n const circuitInputs = {\n root: toFieldElement(input.root),\n nullifierHash: toFieldElement(\n await generateNullifier(input.nullifier, input.poolAddress)\n ),\n recipient: toFieldElement(input.recipient),\n relayer: toFieldElement(input.relayer),\n fee: input.fee,\n refund: input.refund,\n poolId: toFieldElement(Uint8Array.from(poolIdBytes)),\n secret: toFieldElement(input.secret),\n nullifier: toFieldElement(input.nullifier),\n pathElements: input.pathElements.map((x) => toFieldElement(x)),\n pathIndices: input.pathIndices,\n amount: BigInt(input.amount).toString(),\n };\n\n // Resolve paths relative to the package root\n // Get the directory of the current file\n // Handle both ESM and CommonJS environments\n let __dirname: string;\n if (typeof __filename !== 'undefined') {\n // CommonJS environment\n __dirname = path.dirname(__filename);\n } else {\n // ESM environment\n const __filename_esm = fileURLToPath(import.meta.url);\n __dirname = path.dirname(__filename_esm);\n }\n\n const packageRoot = path.join(__dirname, '../..');\n const wasmPath = path.join(\n packageRoot,\n 'circuits/build/transaction_js/transaction.wasm'\n );\n const zkeyPath = path.join(packageRoot, 'circuits/transaction_0001.zkey');\n\n const { proof, publicSignals } = await groth16.fullProve(\n circuitInputs,\n wasmPath,\n zkeyPath\n );\n\n // Verify proof locally first\n const vKeyPath = path.join(packageRoot, 'circuits/verification_key.json');\n const isValid = await groth16.verify(\n JSON.parse(fs.readFileSync(vKeyPath, 'utf8')),\n publicSignals,\n proof\n );\n console.log('Local proof verification:', isValid ? 'VALID ✓' : 'INVALID ✗');\n if (!isValid) {\n throw new Error('Generated proof is invalid - check circuit inputs');\n }\n\n const publicInputs = publicSignals.map((signal) =>\n publicSignalToBytes(signal)\n );\n\n // snarkjs returns proof with pi_a, pi_b, pi_c as string arrays\n const proof_a = g1PointToBytes([proof.pi_a[0], proof.pi_a[1]]);\n const proof_b = g2PointToBytes([\n [proof.pi_b[0][0], proof.pi_b[0][1]],\n [proof.pi_b[1][0], proof.pi_b[1][1]],\n ]);\n const proof_c = g1PointToBytes([proof.pi_c[0], proof.pi_c[1]]);\n\n return {\n proofData: {\n proofA: proof_a,\n proofB: proof_b,\n proofC: proof_c,\n },\n publicInputs,\n };\n}\n","import { randomBytes as nodeRandomBytes } from 'crypto';\n\nexport function randomBytes(size: number): Uint8Array {\n return new Uint8Array(nodeRandomBytes(size));\n}\n\nexport function toHex(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString('hex');\n}\n\nexport function fromHex(hex: string): Uint8Array {\n return new Uint8Array(Buffer.from(hex, 'hex'));\n}\n","import { Address } from '@solana/kit';\nimport { buildPoseidon } from 'circomlibjs';\nimport { Client } from '../../test/_setup';\n\nexport class MerkleTree {\n private levels: number;\n private _leaves: Uint8Array[];\n private _zeros: Uint8Array[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private poseidon: any;\n private initialized: boolean = false;\n\n constructor(levels: number) {\n this.levels = levels;\n this._leaves = [];\n this._zeros = [];\n }\n\n async initialize() {\n if (this.initialized) return;\n\n this.poseidon = await buildPoseidon();\n\n // First zero is all zeros\n this._zeros[0] = new Uint8Array(32);\n\n // Mark as initialized BEFORE building zero tree\n this.initialized = true;\n\n // Build zero tree\n for (let i = 1; i <= this.levels; i++) {\n this._zeros[i] = this.hash(this._zeros[i - 1], this._zeros[i - 1]);\n }\n }\n\n private hash(left: Uint8Array, right: Uint8Array): Uint8Array {\n if (!this.poseidon) {\n throw new Error('MerkleTree not initialized. Call initialize() first');\n }\n\n // Convert Uint8Array to field elements with modulo reduction to match circuit\n // This ensures consistency if inputs (e.g. from randomBytes) technically exceed field size\n const SNARK_FIELD_SIZE = BigInt(\n '21888242871839275222246405745257275088548364400416034343698204186575808495617'\n );\n const leftBigInt = this.uint8ArrayToBigInt(left) % SNARK_FIELD_SIZE;\n const rightBigInt = this.uint8ArrayToBigInt(right) % SNARK_FIELD_SIZE;\n\n const result = this.poseidon([leftBigInt, rightBigInt]);\n const resultBytes = this.poseidon.F.toObject(result);\n\n // Convert back to Uint8Array (32 bytes)\n return this.bigIntToUint8Array(BigInt(resultBytes));\n }\n\n private uint8ArrayToBigInt(arr: Uint8Array): bigint {\n let hex = '0x';\n for (let i = 0; i < arr.length; i++) {\n hex += arr[i].toString(16).padStart(2, '0');\n }\n return BigInt(hex);\n }\n\n private bigIntToUint8Array(value: bigint): Uint8Array {\n const bytes = new Uint8Array(32);\n let temp = value;\n for (let i = 31; i >= 0; i--) {\n bytes[i] = Number(temp & BigInt(0xff));\n temp = temp >> BigInt(8);\n }\n return bytes;\n }\n\n insert(leaf: Uint8Array) {\n if (!this.initialized) {\n throw new Error('MerkleTree not initialized. Call initialize() first');\n }\n this._leaves.push(leaf);\n }\n\n root(): Uint8Array {\n if (!this.initialized) {\n throw new Error('MerkleTree not initialized. Call initialize() first');\n }\n\n if (this._leaves.length === 0) {\n return this._zeros[this.levels];\n }\n\n let currentLevel = [...this._leaves];\n\n for (let level = 0; level < this.levels; level++) {\n const nextLevel: Uint8Array[] = [];\n\n for (let i = 0; i < currentLevel.length; i += 2) {\n const left = currentLevel[i];\n const right =\n i + 1 < currentLevel.length\n ? currentLevel[i + 1]\n : this._zeros[level];\n nextLevel.push(this.hash(left, right));\n }\n\n currentLevel = nextLevel;\n\n // Note: Removed early break checking for length === 1\n // We must continue hashing up to the root level.\n }\n\n return currentLevel[0];\n }\n\n getProof(index: number): {\n pathElements: Uint8Array[];\n pathIndices: number[];\n } {\n if (!this.initialized) {\n throw new Error('MerkleTree not initialized. Call initialize() first');\n }\n\n if (index >= this._leaves.length) {\n throw new Error('Leaf index out of bounds');\n }\n\n const pathElements: Uint8Array[] = [];\n const pathIndices: number[] = [];\n\n let currentLevel = [...this._leaves];\n let currentIndex = index;\n\n for (let level = 0; level < this.levels; level++) {\n const isLeft = currentIndex % 2 === 0;\n const siblingIndex = isLeft ? currentIndex + 1 : currentIndex - 1;\n\n const sibling =\n siblingIndex < currentLevel.length\n ? currentLevel[siblingIndex]\n : this._zeros[level];\n\n pathElements.push(sibling);\n pathIndices.push(isLeft ? 0 : 1);\n\n // Move up to next level\n const nextLevel: Uint8Array[] = [];\n for (let i = 0; i < currentLevel.length; i += 2) {\n const left = currentLevel[i];\n const right =\n i + 1 < currentLevel.length\n ? currentLevel[i + 1]\n : this._zeros[level];\n nextLevel.push(this.hash(left, right));\n }\n\n currentLevel = nextLevel;\n currentIndex = Math.floor(currentIndex / 2);\n }\n\n return { pathElements, pathIndices };\n }\n}\n\n/**\n * The Merkle tree is now OFF-CHAIN (event-based, like Tornado Cash)\n *\n * In production:\n * 1. Listen to CommitmentInserted events from deposits\n * 2. Build local Merkle tree from events\n * 3. Use local tree's root in ZK proofs\n * 4. The root should match one in Pool's root_history\n *\n * For testing: Just use your local MerkleTree.root()\n */\nexport function extractMerkleRootFromAccount(\n _client: Client,\n _poolAddress: Address\n): Uint8Array {\n throw new Error(\n 'Merkle tree is off-chain now. Build it locally from CommitmentInserted events. ' +\n 'For tests, use your MerkleTree instance: merkleTree.root()'\n );\n}\n","import {\n Address,\n getAddressEncoder,\n getEnumCodec,\n getProgramDerivedAddress,\n ProgramDerivedAddress,\n} from '@solana/kit';\nimport { AssetType, MIXOOR_PROGRAM_ADDRESS } from '../generated';\n\nexport type PoolSeeds = {\n /** The prefix string SEED. */\n seed?: string;\n /** The mint address */\n mint: Address;\n /** The asset type */\n assetType: AssetType;\n};\n\nexport async function findPoolAddress(\n seeds: PoolSeeds,\n config: { programAddress?: Address | undefined } = {}\n): Promise<ProgramDerivedAddress> {\n const { programAddress = MIXOOR_PROGRAM_ADDRESS } = config;\n\n return await getProgramDerivedAddress({\n programAddress,\n seeds: [\n 'pool',\n getAddressEncoder().encode(seeds.mint),\n getEnumCodec(AssetType).encode(seeds.assetType),\n ],\n });\n}\n\nexport type MerkleTreeSeeds = {\n /** The prefix string SEED. */\n seed?: string;\n /** The pool address */\n pool: Address;\n};\n\nexport async function findMerkleTreeAddress(\n seeds: MerkleTreeSeeds,\n config: { programAddress?: Address | undefined } = {}\n): Promise<ProgramDerivedAddress> {\n const { programAddress = MIXOOR_PROGRAM_ADDRESS } = config;\n\n return await getProgramDerivedAddress({\n programAddress,\n seeds: ['merkle', getAddressEncoder().encode(seeds.pool)],\n });\n}\n\nexport type VaultSeeds = {\n /** The prefix string SEED. */\n seed?: string;\n /** The pool address */\n pool: Address;\n};\n\nexport async function findVaultAddress(\n seeds: MerkleTreeSeeds,\n config: { programAddress?: Address | undefined } = {}\n): Promise<ProgramDerivedAddress> {\n const { programAddress = MIXOOR_PROGRAM_ADDRESS } = config;\n\n return await getProgramDerivedAddress({\n programAddress,\n seeds: ['vault', getAddressEncoder().encode(seeds.pool)],\n });\n}\n\nexport type NullifierSeeds = {\n /** The prefix string SEED. */\n seed?: string;\n /** The pool address */\n pool: Address;\n /** The nullifier hash */\n nullifierHash: Uint8Array;\n};\n\nexport async function findNullifierAddress(\n seeds: NullifierSeeds,\n config: { programAddress?: Address | undefined } = {}\n): Promise<ProgramDerivedAddress> {\n const { programAddress = MIXOOR_PROGRAM_ADDRESS } = config;\n\n return await getProgramDerivedAddress({\n programAddress,\n seeds: [\n 'nullifier',\n getAddressEncoder().encode(seeds.pool),\n seeds.nullifierHash,\n ],\n });\n}\n"]}
1
+ {"version":3,"sources":["../../src/generated/accounts/nullifierAccount.ts","../../src/generated/types/assetType.ts","../../src/generated/types/commitmentInserted.ts","../../src/generated/types/rootEntry.ts","../../src/generated/accounts/pool.ts","../../src/generated/accounts/vault.ts","../../src/generated/programs/mixoor.ts","../../src/generated/errors/mixoor.ts","../../src/generated/shared/index.ts","../../src/generated/instructions/deposit.ts","../../src/generated/instructions/initializePool.ts","../../src/generated/instructions/transfer.ts","../../src/generated/instructions/withdraw.ts","../../src/utils/circuit.ts","../../src/utils/crypto.ts","../../src/utils/merkle.ts","../../src/utils/pda.ts"],"names":["AssetType","combineCodec","getStructEncoder","fixEncoderSize","getBytesEncoder","getStructDecoder","fixDecoderSize","getBytesDecoder","getI64Encoder","getI64Decoder","transformEncoder","getAddressEncoder","getU32Encoder","getAddressDecoder","getU32Decoder","decodeAccount","assertAccountExists","fetchEncodedAccount","assertAccountsExist","fetchEncodedAccounts","MixoorAccount","MixoorInstruction","kitIsTransactionSigner","getU64Encoder","getU64Decoder","getProgramDerivedAddress","getArrayEncoder","getArrayDecoder","nodeRandomBytes","buildPoseidon","SNARK_FIELD_SIZE"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n assertAccountExists,\n assertAccountsExist,\n combineCodec,\n decodeAccount,\n fetchEncodedAccount,\n fetchEncodedAccounts,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getI64Decoder,\n getI64Encoder,\n getStructDecoder,\n getStructEncoder,\n transformEncoder,\n type Account,\n type Address,\n type EncodedAccount,\n type FetchAccountConfig,\n type FetchAccountsConfig,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type MaybeAccount,\n type MaybeEncodedAccount,\n type ReadonlyUint8Array,\n} from '@solana/kit';\n\nexport const NULLIFIER_ACCOUNT_DISCRIMINATOR = new Uint8Array([\n 250, 31, 238, 177, 213, 98, 48, 172,\n]);\n\nexport function getNullifierAccountDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n NULLIFIER_ACCOUNT_DISCRIMINATOR\n );\n}\n\nexport type NullifierAccount = {\n discriminator: ReadonlyUint8Array;\n nullifierHash: ReadonlyUint8Array;\n spentAt: bigint;\n};\n\nexport type NullifierAccountArgs = {\n nullifierHash: ReadonlyUint8Array;\n spentAt: number | bigint;\n};\n\n/** Gets the encoder for {@link NullifierAccountArgs} account data. */\nexport function getNullifierAccountEncoder(): FixedSizeEncoder<NullifierAccountArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['nullifierHash', fixEncoderSize(getBytesEncoder(), 32)],\n ['spentAt', getI64Encoder()],\n ]),\n (value) => ({ ...value, discriminator: NULLIFIER_ACCOUNT_DISCRIMINATOR })\n );\n}\n\n/** Gets the decoder for {@link NullifierAccount} account data. */\nexport function getNullifierAccountDecoder(): FixedSizeDecoder<NullifierAccount> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['nullifierHash', fixDecoderSize(getBytesDecoder(), 32)],\n ['spentAt', getI64Decoder()],\n ]);\n}\n\n/** Gets the codec for {@link NullifierAccount} account data. */\nexport function getNullifierAccountCodec(): FixedSizeCodec<\n NullifierAccountArgs,\n NullifierAccount\n> {\n return combineCodec(\n getNullifierAccountEncoder(),\n getNullifierAccountDecoder()\n );\n}\n\nexport function decodeNullifierAccount<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress>\n): Account<NullifierAccount, TAddress>;\nexport function decodeNullifierAccount<TAddress extends string = string>(\n encodedAccount: MaybeEncodedAccount<TAddress>\n): MaybeAccount<NullifierAccount, TAddress>;\nexport function decodeNullifierAccount<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress> | MaybeEncodedAccount<TAddress>\n):\n | Account<NullifierAccount, TAddress>\n | MaybeAccount<NullifierAccount, TAddress> {\n return decodeAccount(\n encodedAccount as MaybeEncodedAccount<TAddress>,\n getNullifierAccountDecoder()\n );\n}\n\nexport async function fetchNullifierAccount<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<Account<NullifierAccount, TAddress>> {\n const maybeAccount = await fetchMaybeNullifierAccount(rpc, address, config);\n assertAccountExists(maybeAccount);\n return maybeAccount;\n}\n\nexport async function fetchMaybeNullifierAccount<\n TAddress extends string = string,\n>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<MaybeAccount<NullifierAccount, TAddress>> {\n const maybeAccount = await fetchEncodedAccount(rpc, address, config);\n return decodeNullifierAccount(maybeAccount);\n}\n\nexport async function fetchAllNullifierAccount(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<Account<NullifierAccount>[]> {\n const maybeAccounts = await fetchAllMaybeNullifierAccount(\n rpc,\n addresses,\n config\n );\n assertAccountsExist(maybeAccounts);\n return maybeAccounts;\n}\n\nexport async function fetchAllMaybeNullifierAccount(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<MaybeAccount<NullifierAccount>[]> {\n const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);\n return maybeAccounts.map((maybeAccount) =>\n decodeNullifierAccount(maybeAccount)\n );\n}\n\nexport function getNullifierAccountSize(): number {\n return 48;\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n getEnumDecoder,\n getEnumEncoder,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n} from '@solana/kit';\n\nexport enum AssetType {\n Sol,\n SplToken,\n}\n\nexport type AssetTypeArgs = AssetType;\n\nexport function getAssetTypeEncoder(): FixedSizeEncoder<AssetTypeArgs> {\n return getEnumEncoder(AssetType);\n}\n\nexport function getAssetTypeDecoder(): FixedSizeDecoder<AssetType> {\n return getEnumDecoder(AssetType);\n}\n\nexport function getAssetTypeCodec(): FixedSizeCodec<AssetTypeArgs, AssetType> {\n return combineCodec(getAssetTypeEncoder(), getAssetTypeDecoder());\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type ReadonlyUint8Array,\n} from '@solana/kit';\n\nexport type CommitmentInserted = {\n commitment: ReadonlyUint8Array;\n leafIndex: number;\n pool: Address;\n};\n\nexport type CommitmentInsertedArgs = CommitmentInserted;\n\nexport function getCommitmentInsertedEncoder(): FixedSizeEncoder<CommitmentInsertedArgs> {\n return getStructEncoder([\n ['commitment', fixEncoderSize(getBytesEncoder(), 32)],\n ['leafIndex', getU32Encoder()],\n ['pool', getAddressEncoder()],\n ]);\n}\n\nexport function getCommitmentInsertedDecoder(): FixedSizeDecoder<CommitmentInserted> {\n return getStructDecoder([\n ['commitment', fixDecoderSize(getBytesDecoder(), 32)],\n ['leafIndex', getU32Decoder()],\n ['pool', getAddressDecoder()],\n ]);\n}\n\nexport function getCommitmentInsertedCodec(): FixedSizeCodec<\n CommitmentInsertedArgs,\n CommitmentInserted\n> {\n return combineCodec(\n getCommitmentInsertedEncoder(),\n getCommitmentInsertedDecoder()\n );\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getI64Decoder,\n getI64Encoder,\n getStructDecoder,\n getStructEncoder,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type ReadonlyUint8Array,\n} from '@solana/kit';\n\nexport type RootEntry = { root: ReadonlyUint8Array; timestamp: bigint };\n\nexport type RootEntryArgs = {\n root: ReadonlyUint8Array;\n timestamp: number | bigint;\n};\n\nexport function getRootEntryEncoder(): FixedSizeEncoder<RootEntryArgs> {\n return getStructEncoder([\n ['root', fixEncoderSize(getBytesEncoder(), 32)],\n ['timestamp', getI64Encoder()],\n ]);\n}\n\nexport function getRootEntryDecoder(): FixedSizeDecoder<RootEntry> {\n return getStructDecoder([\n ['root', fixDecoderSize(getBytesDecoder(), 32)],\n ['timestamp', getI64Decoder()],\n ]);\n}\n\nexport function getRootEntryCodec(): FixedSizeCodec<RootEntryArgs, RootEntry> {\n return combineCodec(getRootEntryEncoder(), getRootEntryDecoder());\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n assertAccountExists,\n assertAccountsExist,\n combineCodec,\n decodeAccount,\n fetchEncodedAccount,\n fetchEncodedAccounts,\n fixDecoderSize,\n fixEncoderSize,\n getAddressDecoder,\n getAddressEncoder,\n getArrayDecoder,\n getArrayEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getU64Decoder,\n getU64Encoder,\n getU8Decoder,\n getU8Encoder,\n transformEncoder,\n type Account,\n type Address,\n type EncodedAccount,\n type FetchAccountConfig,\n type FetchAccountsConfig,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type MaybeAccount,\n type MaybeEncodedAccount,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport {\n getRootEntryDecoder,\n getRootEntryEncoder,\n type RootEntry,\n type RootEntryArgs,\n} from '../types';\n\nexport const POOL_DISCRIMINATOR = new Uint8Array([\n 241, 154, 109, 4, 17, 177, 109, 188,\n]);\n\nexport function getPoolDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(POOL_DISCRIMINATOR);\n}\n\nexport type Pool = {\n discriminator: ReadonlyUint8Array;\n authority: Address;\n mint: Address;\n vault: Address;\n feeCollector: Address;\n rootHistory: Array<RootEntry>;\n totalDeposited: bigint;\n totalWithdrawn: bigint;\n nextLeafIndex: number;\n assetType: number;\n rootHistoryIndex: number;\n bump: number;\n padding: ReadonlyUint8Array;\n};\n\nexport type PoolArgs = {\n authority: Address;\n mint: Address;\n vault: Address;\n feeCollector: Address;\n rootHistory: Array<RootEntryArgs>;\n totalDeposited: number | bigint;\n totalWithdrawn: number | bigint;\n nextLeafIndex: number;\n assetType: number;\n rootHistoryIndex: number;\n bump: number;\n padding: ReadonlyUint8Array;\n};\n\n/** Gets the encoder for {@link PoolArgs} account data. */\nexport function getPoolEncoder(): FixedSizeEncoder<PoolArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['authority', getAddressEncoder()],\n ['mint', getAddressEncoder()],\n ['vault', getAddressEncoder()],\n ['feeCollector', getAddressEncoder()],\n ['rootHistory', getArrayEncoder(getRootEntryEncoder(), { size: 50 })],\n ['totalDeposited', getU64Encoder()],\n ['totalWithdrawn', getU64Encoder()],\n ['nextLeafIndex', getU32Encoder()],\n ['assetType', getU8Encoder()],\n ['rootHistoryIndex', getU8Encoder()],\n ['bump', getU8Encoder()],\n ['padding', fixEncoderSize(getBytesEncoder(), 1)],\n ]),\n (value) => ({ ...value, discriminator: POOL_DISCRIMINATOR })\n );\n}\n\n/** Gets the decoder for {@link Pool} account data. */\nexport function getPoolDecoder(): FixedSizeDecoder<Pool> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['authority', getAddressDecoder()],\n ['mint', getAddressDecoder()],\n ['vault', getAddressDecoder()],\n ['feeCollector', getAddressDecoder()],\n ['rootHistory', getArrayDecoder(getRootEntryDecoder(), { size: 50 })],\n ['totalDeposited', getU64Decoder()],\n ['totalWithdrawn', getU64Decoder()],\n ['nextLeafIndex', getU32Decoder()],\n ['assetType', getU8Decoder()],\n ['rootHistoryIndex', getU8Decoder()],\n ['bump', getU8Decoder()],\n ['padding', fixDecoderSize(getBytesDecoder(), 1)],\n ]);\n}\n\n/** Gets the codec for {@link Pool} account data. */\nexport function getPoolCodec(): FixedSizeCodec<PoolArgs, Pool> {\n return combineCodec(getPoolEncoder(), getPoolDecoder());\n}\n\nexport function decodePool<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress>\n): Account<Pool, TAddress>;\nexport function decodePool<TAddress extends string = string>(\n encodedAccount: MaybeEncodedAccount<TAddress>\n): MaybeAccount<Pool, TAddress>;\nexport function decodePool<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress> | MaybeEncodedAccount<TAddress>\n): Account<Pool, TAddress> | MaybeAccount<Pool, TAddress> {\n return decodeAccount(\n encodedAccount as MaybeEncodedAccount<TAddress>,\n getPoolDecoder()\n );\n}\n\nexport async function fetchPool<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<Account<Pool, TAddress>> {\n const maybeAccount = await fetchMaybePool(rpc, address, config);\n assertAccountExists(maybeAccount);\n return maybeAccount;\n}\n\nexport async function fetchMaybePool<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<MaybeAccount<Pool, TAddress>> {\n const maybeAccount = await fetchEncodedAccount(rpc, address, config);\n return decodePool(maybeAccount);\n}\n\nexport async function fetchAllPool(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<Account<Pool>[]> {\n const maybeAccounts = await fetchAllMaybePool(rpc, addresses, config);\n assertAccountsExist(maybeAccounts);\n return maybeAccounts;\n}\n\nexport async function fetchAllMaybePool(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<MaybeAccount<Pool>[]> {\n const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);\n return maybeAccounts.map((maybeAccount) => decodePool(maybeAccount));\n}\n\nexport function getPoolSize(): number {\n return 2160;\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n assertAccountExists,\n assertAccountsExist,\n combineCodec,\n decodeAccount,\n fetchEncodedAccount,\n fetchEncodedAccounts,\n fixDecoderSize,\n fixEncoderSize,\n getBytesDecoder,\n getBytesEncoder,\n getStructDecoder,\n getStructEncoder,\n transformEncoder,\n type Account,\n type Address,\n type EncodedAccount,\n type FetchAccountConfig,\n type FetchAccountsConfig,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type MaybeAccount,\n type MaybeEncodedAccount,\n type ReadonlyUint8Array,\n} from '@solana/kit';\n\nexport const VAULT_DISCRIMINATOR = new Uint8Array([\n 211, 8, 232, 43, 2, 152, 117, 119,\n]);\n\nexport function getVaultDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(VAULT_DISCRIMINATOR);\n}\n\nexport type Vault = { discriminator: ReadonlyUint8Array };\n\nexport type VaultArgs = {};\n\n/** Gets the encoder for {@link VaultArgs} account data. */\nexport function getVaultEncoder(): FixedSizeEncoder<VaultArgs> {\n return transformEncoder(\n getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]),\n (value) => ({ ...value, discriminator: VAULT_DISCRIMINATOR })\n );\n}\n\n/** Gets the decoder for {@link Vault} account data. */\nexport function getVaultDecoder(): FixedSizeDecoder<Vault> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ]);\n}\n\n/** Gets the codec for {@link Vault} account data. */\nexport function getVaultCodec(): FixedSizeCodec<VaultArgs, Vault> {\n return combineCodec(getVaultEncoder(), getVaultDecoder());\n}\n\nexport function decodeVault<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress>\n): Account<Vault, TAddress>;\nexport function decodeVault<TAddress extends string = string>(\n encodedAccount: MaybeEncodedAccount<TAddress>\n): MaybeAccount<Vault, TAddress>;\nexport function decodeVault<TAddress extends string = string>(\n encodedAccount: EncodedAccount<TAddress> | MaybeEncodedAccount<TAddress>\n): Account<Vault, TAddress> | MaybeAccount<Vault, TAddress> {\n return decodeAccount(\n encodedAccount as MaybeEncodedAccount<TAddress>,\n getVaultDecoder()\n );\n}\n\nexport async function fetchVault<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<Account<Vault, TAddress>> {\n const maybeAccount = await fetchMaybeVault(rpc, address, config);\n assertAccountExists(maybeAccount);\n return maybeAccount;\n}\n\nexport async function fetchMaybeVault<TAddress extends string = string>(\n rpc: Parameters<typeof fetchEncodedAccount>[0],\n address: Address<TAddress>,\n config?: FetchAccountConfig\n): Promise<MaybeAccount<Vault, TAddress>> {\n const maybeAccount = await fetchEncodedAccount(rpc, address, config);\n return decodeVault(maybeAccount);\n}\n\nexport async function fetchAllVault(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<Account<Vault>[]> {\n const maybeAccounts = await fetchAllMaybeVault(rpc, addresses, config);\n assertAccountsExist(maybeAccounts);\n return maybeAccounts;\n}\n\nexport async function fetchAllMaybeVault(\n rpc: Parameters<typeof fetchEncodedAccounts>[0],\n addresses: Array<Address>,\n config?: FetchAccountsConfig\n): Promise<MaybeAccount<Vault>[]> {\n const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);\n return maybeAccounts.map((maybeAccount) => decodeVault(maybeAccount));\n}\n\nexport function getVaultSize(): number {\n return 8;\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n containsBytes,\n fixEncoderSize,\n getBytesEncoder,\n type Address,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport {\n type ParsedDepositInstruction,\n type ParsedInitializePoolInstruction,\n type ParsedTransferInstruction,\n type ParsedWithdrawInstruction,\n} from '../instructions';\n\nexport const MIXOOR_PROGRAM_ADDRESS =\n 'mixEcfx7w47hvRwb9Nj7UeSQkCz6vZMbRHixMyYMLMb' as Address<'mixEcfx7w47hvRwb9Nj7UeSQkCz6vZMbRHixMyYMLMb'>;\n\nexport enum MixoorAccount {\n NullifierAccount,\n Pool,\n Vault,\n}\n\nexport function identifyMixoorAccount(\n account: { data: ReadonlyUint8Array } | ReadonlyUint8Array\n): MixoorAccount {\n const data = 'data' in account ? account.data : account;\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([250, 31, 238, 177, 213, 98, 48, 172])\n ),\n 0\n )\n ) {\n return MixoorAccount.NullifierAccount;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([241, 154, 109, 4, 17, 177, 109, 188])\n ),\n 0\n )\n ) {\n return MixoorAccount.Pool;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([211, 8, 232, 43, 2, 152, 117, 119])\n ),\n 0\n )\n ) {\n return MixoorAccount.Vault;\n }\n throw new Error(\n 'The provided account could not be identified as a mixoor account.'\n );\n}\n\nexport enum MixoorInstruction {\n Deposit,\n InitializePool,\n Transfer,\n Withdraw,\n}\n\nexport function identifyMixoorInstruction(\n instruction: { data: ReadonlyUint8Array } | ReadonlyUint8Array\n): MixoorInstruction {\n const data = 'data' in instruction ? instruction.data : instruction;\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([242, 35, 198, 137, 82, 225, 242, 182])\n ),\n 0\n )\n ) {\n return MixoorInstruction.Deposit;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([95, 180, 10, 172, 84, 174, 232, 40])\n ),\n 0\n )\n ) {\n return MixoorInstruction.InitializePool;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([163, 52, 200, 231, 140, 3, 69, 186])\n ),\n 0\n )\n ) {\n return MixoorInstruction.Transfer;\n }\n if (\n containsBytes(\n data,\n fixEncoderSize(getBytesEncoder(), 8).encode(\n new Uint8Array([183, 18, 70, 156, 148, 109, 161, 34])\n ),\n 0\n )\n ) {\n return MixoorInstruction.Withdraw;\n }\n throw new Error(\n 'The provided instruction could not be identified as a mixoor instruction.'\n );\n}\n\nexport type ParsedMixoorInstruction<\n TProgram extends string = 'mixEcfx7w47hvRwb9Nj7UeSQkCz6vZMbRHixMyYMLMb',\n> =\n | ({\n instructionType: MixoorInstruction.Deposit;\n } & ParsedDepositInstruction<TProgram>)\n | ({\n instructionType: MixoorInstruction.InitializePool;\n } & ParsedInitializePoolInstruction<TProgram>)\n | ({\n instructionType: MixoorInstruction.Transfer;\n } & ParsedTransferInstruction<TProgram>)\n | ({\n instructionType: MixoorInstruction.Withdraw;\n } & ParsedWithdrawInstruction<TProgram>);\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n isProgramError,\n type Address,\n type SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM,\n type SolanaError,\n} from '@solana/kit';\nimport { MIXOOR_PROGRAM_ADDRESS } from '../programs';\n\n/** InvalidProof: Invalid proof */\nexport const MIXOOR_ERROR__INVALID_PROOF = 0x1770; // 6000\n/** UnknownRoot: Unknown merkle root */\nexport const MIXOOR_ERROR__UNKNOWN_ROOT = 0x1771; // 6001\n/** InvalidAmount: Invalid amount */\nexport const MIXOOR_ERROR__INVALID_AMOUNT = 0x1772; // 6002\n/** InsufficientFunds: Insufficient funds */\nexport const MIXOOR_ERROR__INSUFFICIENT_FUNDS = 0x1773; // 6003\n/** MissingTokenAccount: Missing token account */\nexport const MIXOOR_ERROR__MISSING_TOKEN_ACCOUNT = 0x1774; // 6004\n/** Overflow: Overflow */\nexport const MIXOOR_ERROR__OVERFLOW = 0x1775; // 6005\n/** InvalidPublicInputs: Invalid number of public inputs */\nexport const MIXOOR_ERROR__INVALID_PUBLIC_INPUTS = 0x1776; // 6006\n/** InvalidAssetType: Invalid asset type deserialized */\nexport const MIXOOR_ERROR__INVALID_ASSET_TYPE = 0x1777; // 6007\n/** InvalidMerkleTreeAddress: Invalid merkle tree address */\nexport const MIXOOR_ERROR__INVALID_MERKLE_TREE_ADDRESS = 0x1778; // 6008\n/** InvalidMerkleTree: Invalid merkle tree structure or out of bounds access */\nexport const MIXOOR_ERROR__INVALID_MERKLE_TREE = 0x1779; // 6009\n/** PoseidonHashError: Poseidon hash error */\nexport const MIXOOR_ERROR__POSEIDON_HASH_ERROR = 0x177a; // 6010\n/** MerkleTreeFull: Merkle tree is full */\nexport const MIXOOR_ERROR__MERKLE_TREE_FULL = 0x177b; // 6011\n/** InvalidMerkleProof: Invalid merkle proof */\nexport const MIXOOR_ERROR__INVALID_MERKLE_PROOF = 0x177c; // 6012\n/** PublicInputMismatch: Public input does not match instruction parameter */\nexport const MIXOOR_ERROR__PUBLIC_INPUT_MISMATCH = 0x177d; // 6013\n\nexport type MixoorError =\n | typeof MIXOOR_ERROR__INSUFFICIENT_FUNDS\n | typeof MIXOOR_ERROR__INVALID_AMOUNT\n | typeof MIXOOR_ERROR__INVALID_ASSET_TYPE\n | typeof MIXOOR_ERROR__INVALID_MERKLE_PROOF\n | typeof MIXOOR_ERROR__INVALID_MERKLE_TREE\n | typeof MIXOOR_ERROR__INVALID_MERKLE_TREE_ADDRESS\n | typeof MIXOOR_ERROR__INVALID_PROOF\n | typeof MIXOOR_ERROR__INVALID_PUBLIC_INPUTS\n | typeof MIXOOR_ERROR__MERKLE_TREE_FULL\n | typeof MIXOOR_ERROR__MISSING_TOKEN_ACCOUNT\n | typeof MIXOOR_ERROR__OVERFLOW\n | typeof MIXOOR_ERROR__POSEIDON_HASH_ERROR\n | typeof MIXOOR_ERROR__PUBLIC_INPUT_MISMATCH\n | typeof MIXOOR_ERROR__UNKNOWN_ROOT;\n\nlet mixoorErrorMessages: Record<MixoorError, string> | undefined;\nif (process.env.NODE_ENV !== 'production') {\n mixoorErrorMessages = {\n [MIXOOR_ERROR__INSUFFICIENT_FUNDS]: `Insufficient funds`,\n [MIXOOR_ERROR__INVALID_AMOUNT]: `Invalid amount`,\n [MIXOOR_ERROR__INVALID_ASSET_TYPE]: `Invalid asset type deserialized`,\n [MIXOOR_ERROR__INVALID_MERKLE_PROOF]: `Invalid merkle proof`,\n [MIXOOR_ERROR__INVALID_MERKLE_TREE]: `Invalid merkle tree structure or out of bounds access`,\n [MIXOOR_ERROR__INVALID_MERKLE_TREE_ADDRESS]: `Invalid merkle tree address`,\n [MIXOOR_ERROR__INVALID_PROOF]: `Invalid proof`,\n [MIXOOR_ERROR__INVALID_PUBLIC_INPUTS]: `Invalid number of public inputs`,\n [MIXOOR_ERROR__MERKLE_TREE_FULL]: `Merkle tree is full`,\n [MIXOOR_ERROR__MISSING_TOKEN_ACCOUNT]: `Missing token account`,\n [MIXOOR_ERROR__OVERFLOW]: `Overflow`,\n [MIXOOR_ERROR__POSEIDON_HASH_ERROR]: `Poseidon hash error`,\n [MIXOOR_ERROR__PUBLIC_INPUT_MISMATCH]: `Public input does not match instruction parameter`,\n [MIXOOR_ERROR__UNKNOWN_ROOT]: `Unknown merkle root`,\n };\n}\n\nexport function getMixoorErrorMessage(code: MixoorError): string {\n if (process.env.NODE_ENV !== 'production') {\n return (mixoorErrorMessages as Record<MixoorError, string>)[code];\n }\n\n return 'Error message not available in production bundles.';\n}\n\nexport function isMixoorError<TProgramErrorCode extends MixoorError>(\n error: unknown,\n transactionMessage: {\n instructions: Record<number, { programAddress: Address }>;\n },\n code?: TProgramErrorCode\n): error is SolanaError<typeof SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM> &\n Readonly<{ context: Readonly<{ code: TProgramErrorCode }> }> {\n return isProgramError<TProgramErrorCode>(\n error,\n transactionMessage,\n MIXOOR_PROGRAM_ADDRESS,\n code\n );\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n AccountRole,\n isProgramDerivedAddress,\n isTransactionSigner as kitIsTransactionSigner,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type ProgramDerivedAddress,\n type TransactionSigner,\n upgradeRoleToSigner,\n} from '@solana/kit';\n\n/**\n * Asserts that the given value is not null or undefined.\n * @internal\n */\nexport function expectSome<T>(value: T | null | undefined): T {\n if (value === null || value === undefined) {\n throw new Error('Expected a value but received null or undefined.');\n }\n return value;\n}\n\n/**\n * Asserts that the given value is a PublicKey.\n * @internal\n */\nexport function expectAddress<T extends string = string>(\n value:\n | Address<T>\n | ProgramDerivedAddress<T>\n | TransactionSigner<T>\n | null\n | undefined\n): Address<T> {\n if (!value) {\n throw new Error('Expected a Address.');\n }\n if (typeof value === 'object' && 'address' in value) {\n return value.address;\n }\n if (Array.isArray(value)) {\n return value[0] as Address<T>;\n }\n return value as Address<T>;\n}\n\n/**\n * Asserts that the given value is a PDA.\n * @internal\n */\nexport function expectProgramDerivedAddress<T extends string = string>(\n value:\n | Address<T>\n | ProgramDerivedAddress<T>\n | TransactionSigner<T>\n | null\n | undefined\n): ProgramDerivedAddress<T> {\n if (!value || !Array.isArray(value) || !isProgramDerivedAddress(value)) {\n throw new Error('Expected a ProgramDerivedAddress.');\n }\n return value;\n}\n\n/**\n * Asserts that the given value is a TransactionSigner.\n * @internal\n */\nexport function expectTransactionSigner<T extends string = string>(\n value:\n | Address<T>\n | ProgramDerivedAddress<T>\n | TransactionSigner<T>\n | null\n | undefined\n): TransactionSigner<T> {\n if (!value || !isTransactionSigner(value)) {\n throw new Error('Expected a TransactionSigner.');\n }\n return value;\n}\n\n/**\n * Defines an instruction account to resolve.\n * @internal\n */\nexport type ResolvedAccount<\n T extends string = string,\n U extends\n | Address<T>\n | ProgramDerivedAddress<T>\n | TransactionSigner<T>\n | null =\n | Address<T>\n | ProgramDerivedAddress<T>\n | TransactionSigner<T>\n | null,\n> = {\n isWritable: boolean;\n value: U;\n};\n\n/**\n * Defines an instruction that stores additional bytes on-chain.\n * @internal\n */\nexport type InstructionWithByteDelta = {\n byteDelta: number;\n};\n\n/**\n * Get account metas and signers from resolved accounts.\n * @internal\n */\nexport function getAccountMetaFactory(\n programAddress: Address,\n optionalAccountStrategy: 'omitted' | 'programId'\n) {\n return (\n account: ResolvedAccount\n ): AccountMeta | AccountSignerMeta | undefined => {\n if (!account.value) {\n if (optionalAccountStrategy === 'omitted') return;\n return Object.freeze({\n address: programAddress,\n role: AccountRole.READONLY,\n });\n }\n\n const writableRole = account.isWritable\n ? AccountRole.WRITABLE\n : AccountRole.READONLY;\n return Object.freeze({\n address: expectAddress(account.value),\n role: isTransactionSigner(account.value)\n ? upgradeRoleToSigner(writableRole)\n : writableRole,\n ...(isTransactionSigner(account.value) ? { signer: account.value } : {}),\n });\n };\n}\n\nexport function isTransactionSigner<TAddress extends string = string>(\n value:\n | Address<TAddress>\n | ProgramDerivedAddress<TAddress>\n | TransactionSigner<TAddress>\n): value is TransactionSigner<TAddress> {\n return (\n !!value &&\n typeof value === 'object' &&\n 'address' in value &&\n kitIsTransactionSigner(value)\n );\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU64Decoder,\n getU64Encoder,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/kit';\nimport { MIXOOR_PROGRAM_ADDRESS } from '../programs';\nimport {\n expectAddress,\n getAccountMetaFactory,\n type ResolvedAccount,\n} from '../shared';\n\nexport const DEPOSIT_DISCRIMINATOR = new Uint8Array([\n 242, 35, 198, 137, 82, 225, 242, 182,\n]);\n\nexport function getDepositDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(DEPOSIT_DISCRIMINATOR);\n}\n\nexport type DepositInstruction<\n TProgram extends string = typeof MIXOOR_PROGRAM_ADDRESS,\n TAccountDepositor extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountMint extends string | AccountMeta<string> = string,\n TAccountVault extends string | AccountMeta<string> = string,\n TAccountDepositorTokenAccount extends string | AccountMeta<string> = string,\n TAccountVaultTokenAccount extends string | AccountMeta<string> = string,\n TAccountSystemProgram extends string | AccountMeta<string> =\n '11111111111111111111111111111111',\n TAccountTokenProgram extends string | AccountMeta<string> =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',\n TAccountAssociatedTokenProgram extends string | AccountMeta<string> =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL',\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountDepositor extends string\n ? WritableSignerAccount<TAccountDepositor> &\n AccountSignerMeta<TAccountDepositor>\n : TAccountDepositor,\n TAccountPool extends string\n ? WritableAccount<TAccountPool>\n : TAccountPool,\n TAccountMint extends string\n ? WritableAccount<TAccountMint>\n : TAccountMint,\n TAccountVault extends string\n ? WritableAccount<TAccountVault>\n : TAccountVault,\n TAccountDepositorTokenAccount extends string\n ? WritableAccount<TAccountDepositorTokenAccount>\n : TAccountDepositorTokenAccount,\n TAccountVaultTokenAccount extends string\n ? WritableAccount<TAccountVaultTokenAccount>\n : TAccountVaultTokenAccount,\n TAccountSystemProgram extends string\n ? ReadonlyAccount<TAccountSystemProgram>\n : TAccountSystemProgram,\n TAccountTokenProgram extends string\n ? ReadonlyAccount<TAccountTokenProgram>\n : TAccountTokenProgram,\n TAccountAssociatedTokenProgram extends string\n ? ReadonlyAccount<TAccountAssociatedTokenProgram>\n : TAccountAssociatedTokenProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type DepositInstructionData = {\n discriminator: ReadonlyUint8Array;\n amount: bigint;\n commitment: ReadonlyUint8Array;\n newRoot: ReadonlyUint8Array;\n};\n\nexport type DepositInstructionDataArgs = {\n amount: number | bigint;\n commitment: ReadonlyUint8Array;\n newRoot: ReadonlyUint8Array;\n};\n\nexport function getDepositInstructionDataEncoder(): FixedSizeEncoder<DepositInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['amount', getU64Encoder()],\n ['commitment', fixEncoderSize(getBytesEncoder(), 32)],\n ['newRoot', fixEncoderSize(getBytesEncoder(), 32)],\n ]),\n (value) => ({ ...value, discriminator: DEPOSIT_DISCRIMINATOR })\n );\n}\n\nexport function getDepositInstructionDataDecoder(): FixedSizeDecoder<DepositInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['amount', getU64Decoder()],\n ['commitment', fixDecoderSize(getBytesDecoder(), 32)],\n ['newRoot', fixDecoderSize(getBytesDecoder(), 32)],\n ]);\n}\n\nexport function getDepositInstructionDataCodec(): FixedSizeCodec<\n DepositInstructionDataArgs,\n DepositInstructionData\n> {\n return combineCodec(\n getDepositInstructionDataEncoder(),\n getDepositInstructionDataDecoder()\n );\n}\n\nexport type DepositAsyncInput<\n TAccountDepositor extends string = string,\n TAccountPool extends string = string,\n TAccountMint extends string = string,\n TAccountVault extends string = string,\n TAccountDepositorTokenAccount extends string = string,\n TAccountVaultTokenAccount extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountTokenProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n> = {\n depositor: TransactionSigner<TAccountDepositor>;\n pool: Address<TAccountPool>;\n mint: Address<TAccountMint>;\n vault?: Address<TAccountVault>;\n depositorTokenAccount?: Address<TAccountDepositorTokenAccount>;\n vaultTokenAccount?: Address<TAccountVaultTokenAccount>;\n systemProgram?: Address<TAccountSystemProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n amount: DepositInstructionDataArgs['amount'];\n commitment: DepositInstructionDataArgs['commitment'];\n newRoot: DepositInstructionDataArgs['newRoot'];\n};\n\nexport async function getDepositInstructionAsync<\n TAccountDepositor extends string,\n TAccountPool extends string,\n TAccountMint extends string,\n TAccountVault extends string,\n TAccountDepositorTokenAccount extends string,\n TAccountVaultTokenAccount extends string,\n TAccountSystemProgram extends string,\n TAccountTokenProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TProgramAddress extends Address = typeof MIXOOR_PROGRAM_ADDRESS,\n>(\n input: DepositAsyncInput<\n TAccountDepositor,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountDepositorTokenAccount,\n TAccountVaultTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): Promise<\n DepositInstruction<\n TProgramAddress,\n TAccountDepositor,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountDepositorTokenAccount,\n TAccountVaultTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? MIXOOR_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n depositor: { value: input.depositor ?? null, isWritable: true },\n pool: { value: input.pool ?? null, isWritable: true },\n mint: { value: input.mint ?? null, isWritable: true },\n vault: { value: input.vault ?? null, isWritable: true },\n depositorTokenAccount: {\n value: input.depositorTokenAccount ?? null,\n isWritable: true,\n },\n vaultTokenAccount: {\n value: input.vaultTokenAccount ?? null,\n isWritable: true,\n },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n associatedTokenProgram: {\n value: input.associatedTokenProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.vault.value) {\n accounts.vault.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(new Uint8Array([118, 97, 117, 108, 116])),\n getAddressEncoder().encode(expectAddress(accounts.pool.value)),\n ],\n });\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta(accounts.depositor),\n getAccountMeta(accounts.pool),\n getAccountMeta(accounts.mint),\n getAccountMeta(accounts.vault),\n getAccountMeta(accounts.depositorTokenAccount),\n getAccountMeta(accounts.vaultTokenAccount),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.tokenProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n ],\n data: getDepositInstructionDataEncoder().encode(\n args as DepositInstructionDataArgs\n ),\n programAddress,\n } as DepositInstruction<\n TProgramAddress,\n TAccountDepositor,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountDepositorTokenAccount,\n TAccountVaultTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >);\n}\n\nexport type DepositInput<\n TAccountDepositor extends string = string,\n TAccountPool extends string = string,\n TAccountMint extends string = string,\n TAccountVault extends string = string,\n TAccountDepositorTokenAccount extends string = string,\n TAccountVaultTokenAccount extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountTokenProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n> = {\n depositor: TransactionSigner<TAccountDepositor>;\n pool: Address<TAccountPool>;\n mint: Address<TAccountMint>;\n vault: Address<TAccountVault>;\n depositorTokenAccount?: Address<TAccountDepositorTokenAccount>;\n vaultTokenAccount?: Address<TAccountVaultTokenAccount>;\n systemProgram?: Address<TAccountSystemProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n amount: DepositInstructionDataArgs['amount'];\n commitment: DepositInstructionDataArgs['commitment'];\n newRoot: DepositInstructionDataArgs['newRoot'];\n};\n\nexport function getDepositInstruction<\n TAccountDepositor extends string,\n TAccountPool extends string,\n TAccountMint extends string,\n TAccountVault extends string,\n TAccountDepositorTokenAccount extends string,\n TAccountVaultTokenAccount extends string,\n TAccountSystemProgram extends string,\n TAccountTokenProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TProgramAddress extends Address = typeof MIXOOR_PROGRAM_ADDRESS,\n>(\n input: DepositInput<\n TAccountDepositor,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountDepositorTokenAccount,\n TAccountVaultTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): DepositInstruction<\n TProgramAddress,\n TAccountDepositor,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountDepositorTokenAccount,\n TAccountVaultTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? MIXOOR_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n depositor: { value: input.depositor ?? null, isWritable: true },\n pool: { value: input.pool ?? null, isWritable: true },\n mint: { value: input.mint ?? null, isWritable: true },\n vault: { value: input.vault ?? null, isWritable: true },\n depositorTokenAccount: {\n value: input.depositorTokenAccount ?? null,\n isWritable: true,\n },\n vaultTokenAccount: {\n value: input.vaultTokenAccount ?? null,\n isWritable: true,\n },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n associatedTokenProgram: {\n value: input.associatedTokenProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta(accounts.depositor),\n getAccountMeta(accounts.pool),\n getAccountMeta(accounts.mint),\n getAccountMeta(accounts.vault),\n getAccountMeta(accounts.depositorTokenAccount),\n getAccountMeta(accounts.vaultTokenAccount),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.tokenProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n ],\n data: getDepositInstructionDataEncoder().encode(\n args as DepositInstructionDataArgs\n ),\n programAddress,\n } as DepositInstruction<\n TProgramAddress,\n TAccountDepositor,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountDepositorTokenAccount,\n TAccountVaultTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >);\n}\n\nexport type ParsedDepositInstruction<\n TProgram extends string = typeof MIXOOR_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n depositor: TAccountMetas[0];\n pool: TAccountMetas[1];\n mint: TAccountMetas[2];\n vault: TAccountMetas[3];\n depositorTokenAccount?: TAccountMetas[4] | undefined;\n vaultTokenAccount?: TAccountMetas[5] | undefined;\n systemProgram: TAccountMetas[6];\n tokenProgram: TAccountMetas[7];\n associatedTokenProgram: TAccountMetas[8];\n };\n data: DepositInstructionData;\n};\n\nexport function parseDepositInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedDepositInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 9) {\n // TODO: Coded error.\n throw new Error('Not enough accounts');\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n const getNextOptionalAccount = () => {\n const accountMeta = getNextAccount();\n return accountMeta.address === MIXOOR_PROGRAM_ADDRESS\n ? undefined\n : accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n depositor: getNextAccount(),\n pool: getNextAccount(),\n mint: getNextAccount(),\n vault: getNextAccount(),\n depositorTokenAccount: getNextOptionalAccount(),\n vaultTokenAccount: getNextOptionalAccount(),\n systemProgram: getNextAccount(),\n tokenProgram: getNextAccount(),\n associatedTokenProgram: getNextAccount(),\n },\n data: getDepositInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/kit';\nimport { MIXOOR_PROGRAM_ADDRESS } from '../programs';\nimport {\n expectAddress,\n expectSome,\n getAccountMetaFactory,\n type ResolvedAccount,\n} from '../shared';\nimport {\n getAssetTypeDecoder,\n getAssetTypeEncoder,\n type AssetType,\n type AssetTypeArgs,\n} from '../types';\n\nexport const INITIALIZE_POOL_DISCRIMINATOR = new Uint8Array([\n 95, 180, 10, 172, 84, 174, 232, 40,\n]);\n\nexport function getInitializePoolDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(\n INITIALIZE_POOL_DISCRIMINATOR\n );\n}\n\nexport type InitializePoolInstruction<\n TProgram extends string = typeof MIXOOR_PROGRAM_ADDRESS,\n TAccountAuthority extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountVault extends string | AccountMeta<string> = string,\n TAccountVaultAta extends string | AccountMeta<string> = string,\n TAccountMint extends string | AccountMeta<string> = string,\n TAccountFeeCollector extends string | AccountMeta<string> =\n '9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d',\n TAccountSystemProgram extends string | AccountMeta<string> =\n '11111111111111111111111111111111',\n TAccountTokenProgram extends string | AccountMeta<string> =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',\n TAccountAssociatedTokenProgram extends string | AccountMeta<string> =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL',\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountAuthority extends string\n ? WritableSignerAccount<TAccountAuthority> &\n AccountSignerMeta<TAccountAuthority>\n : TAccountAuthority,\n TAccountPool extends string\n ? WritableAccount<TAccountPool>\n : TAccountPool,\n TAccountVault extends string\n ? WritableAccount<TAccountVault>\n : TAccountVault,\n TAccountVaultAta extends string\n ? WritableAccount<TAccountVaultAta>\n : TAccountVaultAta,\n TAccountMint extends string\n ? WritableAccount<TAccountMint>\n : TAccountMint,\n TAccountFeeCollector extends string\n ? ReadonlyAccount<TAccountFeeCollector>\n : TAccountFeeCollector,\n TAccountSystemProgram extends string\n ? ReadonlyAccount<TAccountSystemProgram>\n : TAccountSystemProgram,\n TAccountTokenProgram extends string\n ? ReadonlyAccount<TAccountTokenProgram>\n : TAccountTokenProgram,\n TAccountAssociatedTokenProgram extends string\n ? ReadonlyAccount<TAccountAssociatedTokenProgram>\n : TAccountAssociatedTokenProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type InitializePoolInstructionData = {\n discriminator: ReadonlyUint8Array;\n assetType: AssetType;\n};\n\nexport type InitializePoolInstructionDataArgs = { assetType: AssetTypeArgs };\n\nexport function getInitializePoolInstructionDataEncoder(): FixedSizeEncoder<InitializePoolInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['assetType', getAssetTypeEncoder()],\n ]),\n (value) => ({ ...value, discriminator: INITIALIZE_POOL_DISCRIMINATOR })\n );\n}\n\nexport function getInitializePoolInstructionDataDecoder(): FixedSizeDecoder<InitializePoolInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['assetType', getAssetTypeDecoder()],\n ]);\n}\n\nexport function getInitializePoolInstructionDataCodec(): FixedSizeCodec<\n InitializePoolInstructionDataArgs,\n InitializePoolInstructionData\n> {\n return combineCodec(\n getInitializePoolInstructionDataEncoder(),\n getInitializePoolInstructionDataDecoder()\n );\n}\n\nexport type InitializePoolAsyncInput<\n TAccountAuthority extends string = string,\n TAccountPool extends string = string,\n TAccountVault extends string = string,\n TAccountVaultAta extends string = string,\n TAccountMint extends string = string,\n TAccountFeeCollector extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountTokenProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n> = {\n authority: TransactionSigner<TAccountAuthority>;\n pool?: Address<TAccountPool>;\n vault?: Address<TAccountVault>;\n vaultAta?: Address<TAccountVaultAta>;\n mint: Address<TAccountMint>;\n feeCollector?: Address<TAccountFeeCollector>;\n systemProgram?: Address<TAccountSystemProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n assetType: InitializePoolInstructionDataArgs['assetType'];\n};\n\nexport async function getInitializePoolInstructionAsync<\n TAccountAuthority extends string,\n TAccountPool extends string,\n TAccountVault extends string,\n TAccountVaultAta extends string,\n TAccountMint extends string,\n TAccountFeeCollector extends string,\n TAccountSystemProgram extends string,\n TAccountTokenProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TProgramAddress extends Address = typeof MIXOOR_PROGRAM_ADDRESS,\n>(\n input: InitializePoolAsyncInput<\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountMint,\n TAccountFeeCollector,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): Promise<\n InitializePoolInstruction<\n TProgramAddress,\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountMint,\n TAccountFeeCollector,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? MIXOOR_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n authority: { value: input.authority ?? null, isWritable: true },\n pool: { value: input.pool ?? null, isWritable: true },\n vault: { value: input.vault ?? null, isWritable: true },\n vaultAta: { value: input.vaultAta ?? null, isWritable: true },\n mint: { value: input.mint ?? null, isWritable: true },\n feeCollector: { value: input.feeCollector ?? null, isWritable: false },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n associatedTokenProgram: {\n value: input.associatedTokenProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.pool.value) {\n accounts.pool.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(new Uint8Array([112, 111, 111, 108])),\n getAddressEncoder().encode(expectAddress(accounts.mint.value)),\n getAssetTypeEncoder().encode(expectSome(args.assetType)),\n ],\n });\n }\n if (!accounts.vault.value) {\n accounts.vault.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(new Uint8Array([118, 97, 117, 108, 116])),\n getAddressEncoder().encode(expectAddress(accounts.pool.value)),\n ],\n });\n }\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n if (!accounts.vaultAta.value) {\n accounts.vaultAta.value = await getProgramDerivedAddress({\n programAddress:\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>,\n seeds: [\n getAddressEncoder().encode(expectAddress(accounts.vault.value)),\n getAddressEncoder().encode(expectAddress(accounts.tokenProgram.value)),\n getAddressEncoder().encode(expectAddress(accounts.mint.value)),\n ],\n });\n }\n if (!accounts.feeCollector.value) {\n accounts.feeCollector.value =\n '9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d' as Address<'9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d'>;\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta(accounts.authority),\n getAccountMeta(accounts.pool),\n getAccountMeta(accounts.vault),\n getAccountMeta(accounts.vaultAta),\n getAccountMeta(accounts.mint),\n getAccountMeta(accounts.feeCollector),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.tokenProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n ],\n data: getInitializePoolInstructionDataEncoder().encode(\n args as InitializePoolInstructionDataArgs\n ),\n programAddress,\n } as InitializePoolInstruction<\n TProgramAddress,\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountMint,\n TAccountFeeCollector,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >);\n}\n\nexport type InitializePoolInput<\n TAccountAuthority extends string = string,\n TAccountPool extends string = string,\n TAccountVault extends string = string,\n TAccountVaultAta extends string = string,\n TAccountMint extends string = string,\n TAccountFeeCollector extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountTokenProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n> = {\n authority: TransactionSigner<TAccountAuthority>;\n pool: Address<TAccountPool>;\n vault: Address<TAccountVault>;\n vaultAta: Address<TAccountVaultAta>;\n mint: Address<TAccountMint>;\n feeCollector?: Address<TAccountFeeCollector>;\n systemProgram?: Address<TAccountSystemProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n assetType: InitializePoolInstructionDataArgs['assetType'];\n};\n\nexport function getInitializePoolInstruction<\n TAccountAuthority extends string,\n TAccountPool extends string,\n TAccountVault extends string,\n TAccountVaultAta extends string,\n TAccountMint extends string,\n TAccountFeeCollector extends string,\n TAccountSystemProgram extends string,\n TAccountTokenProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TProgramAddress extends Address = typeof MIXOOR_PROGRAM_ADDRESS,\n>(\n input: InitializePoolInput<\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountMint,\n TAccountFeeCollector,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): InitializePoolInstruction<\n TProgramAddress,\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountMint,\n TAccountFeeCollector,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? MIXOOR_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n authority: { value: input.authority ?? null, isWritable: true },\n pool: { value: input.pool ?? null, isWritable: true },\n vault: { value: input.vault ?? null, isWritable: true },\n vaultAta: { value: input.vaultAta ?? null, isWritable: true },\n mint: { value: input.mint ?? null, isWritable: true },\n feeCollector: { value: input.feeCollector ?? null, isWritable: false },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n associatedTokenProgram: {\n value: input.associatedTokenProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n if (!accounts.feeCollector.value) {\n accounts.feeCollector.value =\n '9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d' as Address<'9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d'>;\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta(accounts.authority),\n getAccountMeta(accounts.pool),\n getAccountMeta(accounts.vault),\n getAccountMeta(accounts.vaultAta),\n getAccountMeta(accounts.mint),\n getAccountMeta(accounts.feeCollector),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.tokenProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n ],\n data: getInitializePoolInstructionDataEncoder().encode(\n args as InitializePoolInstructionDataArgs\n ),\n programAddress,\n } as InitializePoolInstruction<\n TProgramAddress,\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountMint,\n TAccountFeeCollector,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >);\n}\n\nexport type ParsedInitializePoolInstruction<\n TProgram extends string = typeof MIXOOR_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n authority: TAccountMetas[0];\n pool: TAccountMetas[1];\n vault: TAccountMetas[2];\n vaultAta: TAccountMetas[3];\n mint: TAccountMetas[4];\n feeCollector: TAccountMetas[5];\n systemProgram: TAccountMetas[6];\n tokenProgram: TAccountMetas[7];\n associatedTokenProgram: TAccountMetas[8];\n };\n data: InitializePoolInstructionData;\n};\n\nexport function parseInitializePoolInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedInitializePoolInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 9) {\n // TODO: Coded error.\n throw new Error('Not enough accounts');\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n authority: getNextAccount(),\n pool: getNextAccount(),\n vault: getNextAccount(),\n vaultAta: getNextAccount(),\n mint: getNextAccount(),\n feeCollector: getNextAccount(),\n systemProgram: getNextAccount(),\n tokenProgram: getNextAccount(),\n associatedTokenProgram: getNextAccount(),\n },\n data: getInitializePoolInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getArrayDecoder,\n getArrayEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU64Decoder,\n getU64Encoder,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/kit';\nimport { MIXOOR_PROGRAM_ADDRESS } from '../programs';\nimport {\n expectAddress,\n expectSome,\n getAccountMetaFactory,\n type ResolvedAccount,\n} from '../shared';\n\nexport const TRANSFER_DISCRIMINATOR = new Uint8Array([\n 163, 52, 200, 231, 140, 3, 69, 186,\n]);\n\nexport function getTransferDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(TRANSFER_DISCRIMINATOR);\n}\n\nexport type TransferInstruction<\n TProgram extends string = typeof MIXOOR_PROGRAM_ADDRESS,\n TAccountRelayer extends string | AccountMeta<string> = string,\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountMint extends string | AccountMeta<string> = string,\n TAccountVault extends string | AccountMeta<string> = string,\n TAccountNullifier extends string | AccountMeta<string> = string,\n TAccountRecipient extends string | AccountMeta<string> = string,\n TAccountVaultTokenAccount extends string | AccountMeta<string> = string,\n TAccountRecipientTokenAccount extends string | AccountMeta<string> = string,\n TAccountFeeCollector extends string | AccountMeta<string> =\n '9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d',\n TAccountFeeCollectorTokenAccount extends string | AccountMeta<string> =\n string,\n TAccountSystemProgram extends string | AccountMeta<string> =\n '11111111111111111111111111111111',\n TAccountTokenProgram extends string | AccountMeta<string> =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',\n TAccountAssociatedTokenProgram extends string | AccountMeta<string> =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL',\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountRelayer extends string\n ? WritableSignerAccount<TAccountRelayer> &\n AccountSignerMeta<TAccountRelayer>\n : TAccountRelayer,\n TAccountPool extends string\n ? WritableAccount<TAccountPool>\n : TAccountPool,\n TAccountMint extends string\n ? WritableAccount<TAccountMint>\n : TAccountMint,\n TAccountVault extends string\n ? WritableAccount<TAccountVault>\n : TAccountVault,\n TAccountNullifier extends string\n ? WritableAccount<TAccountNullifier>\n : TAccountNullifier,\n TAccountRecipient extends string\n ? WritableAccount<TAccountRecipient>\n : TAccountRecipient,\n TAccountVaultTokenAccount extends string\n ? WritableAccount<TAccountVaultTokenAccount>\n : TAccountVaultTokenAccount,\n TAccountRecipientTokenAccount extends string\n ? WritableAccount<TAccountRecipientTokenAccount>\n : TAccountRecipientTokenAccount,\n TAccountFeeCollector extends string\n ? WritableAccount<TAccountFeeCollector>\n : TAccountFeeCollector,\n TAccountFeeCollectorTokenAccount extends string\n ? WritableAccount<TAccountFeeCollectorTokenAccount>\n : TAccountFeeCollectorTokenAccount,\n TAccountSystemProgram extends string\n ? ReadonlyAccount<TAccountSystemProgram>\n : TAccountSystemProgram,\n TAccountTokenProgram extends string\n ? ReadonlyAccount<TAccountTokenProgram>\n : TAccountTokenProgram,\n TAccountAssociatedTokenProgram extends string\n ? ReadonlyAccount<TAccountAssociatedTokenProgram>\n : TAccountAssociatedTokenProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type TransferInstructionData = {\n discriminator: ReadonlyUint8Array;\n proofA: ReadonlyUint8Array;\n proofB: ReadonlyUint8Array;\n proofC: ReadonlyUint8Array;\n publicInputs: Array<ReadonlyUint8Array>;\n nullifierHash: ReadonlyUint8Array;\n relayerFee: bigint;\n recipientAmount: bigint;\n};\n\nexport type TransferInstructionDataArgs = {\n proofA: ReadonlyUint8Array;\n proofB: ReadonlyUint8Array;\n proofC: ReadonlyUint8Array;\n publicInputs: Array<ReadonlyUint8Array>;\n nullifierHash: ReadonlyUint8Array;\n relayerFee: number | bigint;\n recipientAmount: number | bigint;\n};\n\nexport function getTransferInstructionDataEncoder(): FixedSizeEncoder<TransferInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['proofA', fixEncoderSize(getBytesEncoder(), 64)],\n ['proofB', fixEncoderSize(getBytesEncoder(), 128)],\n ['proofC', fixEncoderSize(getBytesEncoder(), 64)],\n [\n 'publicInputs',\n getArrayEncoder(fixEncoderSize(getBytesEncoder(), 32), { size: 7 }),\n ],\n ['nullifierHash', fixEncoderSize(getBytesEncoder(), 32)],\n ['relayerFee', getU64Encoder()],\n ['recipientAmount', getU64Encoder()],\n ]),\n (value) => ({ ...value, discriminator: TRANSFER_DISCRIMINATOR })\n );\n}\n\nexport function getTransferInstructionDataDecoder(): FixedSizeDecoder<TransferInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['proofA', fixDecoderSize(getBytesDecoder(), 64)],\n ['proofB', fixDecoderSize(getBytesDecoder(), 128)],\n ['proofC', fixDecoderSize(getBytesDecoder(), 64)],\n [\n 'publicInputs',\n getArrayDecoder(fixDecoderSize(getBytesDecoder(), 32), { size: 7 }),\n ],\n ['nullifierHash', fixDecoderSize(getBytesDecoder(), 32)],\n ['relayerFee', getU64Decoder()],\n ['recipientAmount', getU64Decoder()],\n ]);\n}\n\nexport function getTransferInstructionDataCodec(): FixedSizeCodec<\n TransferInstructionDataArgs,\n TransferInstructionData\n> {\n return combineCodec(\n getTransferInstructionDataEncoder(),\n getTransferInstructionDataDecoder()\n );\n}\n\nexport type TransferAsyncInput<\n TAccountRelayer extends string = string,\n TAccountPool extends string = string,\n TAccountMint extends string = string,\n TAccountVault extends string = string,\n TAccountNullifier extends string = string,\n TAccountRecipient extends string = string,\n TAccountVaultTokenAccount extends string = string,\n TAccountRecipientTokenAccount extends string = string,\n TAccountFeeCollector extends string = string,\n TAccountFeeCollectorTokenAccount extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountTokenProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n> = {\n relayer: TransactionSigner<TAccountRelayer>;\n pool: Address<TAccountPool>;\n mint: Address<TAccountMint>;\n vault?: Address<TAccountVault>;\n nullifier?: Address<TAccountNullifier>;\n recipient: Address<TAccountRecipient>;\n vaultTokenAccount?: Address<TAccountVaultTokenAccount>;\n recipientTokenAccount?: Address<TAccountRecipientTokenAccount>;\n feeCollector?: Address<TAccountFeeCollector>;\n feeCollectorTokenAccount?: Address<TAccountFeeCollectorTokenAccount>;\n systemProgram?: Address<TAccountSystemProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n proofA: TransferInstructionDataArgs['proofA'];\n proofB: TransferInstructionDataArgs['proofB'];\n proofC: TransferInstructionDataArgs['proofC'];\n publicInputs: TransferInstructionDataArgs['publicInputs'];\n nullifierHash: TransferInstructionDataArgs['nullifierHash'];\n relayerFee: TransferInstructionDataArgs['relayerFee'];\n recipientAmount: TransferInstructionDataArgs['recipientAmount'];\n};\n\nexport async function getTransferInstructionAsync<\n TAccountRelayer extends string,\n TAccountPool extends string,\n TAccountMint extends string,\n TAccountVault extends string,\n TAccountNullifier extends string,\n TAccountRecipient extends string,\n TAccountVaultTokenAccount extends string,\n TAccountRecipientTokenAccount extends string,\n TAccountFeeCollector extends string,\n TAccountFeeCollectorTokenAccount extends string,\n TAccountSystemProgram extends string,\n TAccountTokenProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TProgramAddress extends Address = typeof MIXOOR_PROGRAM_ADDRESS,\n>(\n input: TransferAsyncInput<\n TAccountRelayer,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountNullifier,\n TAccountRecipient,\n TAccountVaultTokenAccount,\n TAccountRecipientTokenAccount,\n TAccountFeeCollector,\n TAccountFeeCollectorTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): Promise<\n TransferInstruction<\n TProgramAddress,\n TAccountRelayer,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountNullifier,\n TAccountRecipient,\n TAccountVaultTokenAccount,\n TAccountRecipientTokenAccount,\n TAccountFeeCollector,\n TAccountFeeCollectorTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? MIXOOR_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n relayer: { value: input.relayer ?? null, isWritable: true },\n pool: { value: input.pool ?? null, isWritable: true },\n mint: { value: input.mint ?? null, isWritable: true },\n vault: { value: input.vault ?? null, isWritable: true },\n nullifier: { value: input.nullifier ?? null, isWritable: true },\n recipient: { value: input.recipient ?? null, isWritable: true },\n vaultTokenAccount: {\n value: input.vaultTokenAccount ?? null,\n isWritable: true,\n },\n recipientTokenAccount: {\n value: input.recipientTokenAccount ?? null,\n isWritable: true,\n },\n feeCollector: { value: input.feeCollector ?? null, isWritable: true },\n feeCollectorTokenAccount: {\n value: input.feeCollectorTokenAccount ?? null,\n isWritable: true,\n },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n associatedTokenProgram: {\n value: input.associatedTokenProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.vault.value) {\n accounts.vault.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(new Uint8Array([118, 97, 117, 108, 116])),\n getAddressEncoder().encode(expectAddress(accounts.pool.value)),\n ],\n });\n }\n if (!accounts.nullifier.value) {\n accounts.nullifier.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(\n new Uint8Array([110, 117, 108, 108, 105, 102, 105, 101, 114])\n ),\n getAddressEncoder().encode(expectAddress(accounts.pool.value)),\n fixEncoderSize(getBytesEncoder(), 32).encode(\n expectSome(args.nullifierHash)\n ),\n ],\n });\n }\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n if (!accounts.recipientTokenAccount.value) {\n accounts.recipientTokenAccount.value = await getProgramDerivedAddress({\n programAddress:\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>,\n seeds: [\n getAddressEncoder().encode(expectAddress(accounts.recipient.value)),\n getAddressEncoder().encode(expectAddress(accounts.tokenProgram.value)),\n getAddressEncoder().encode(expectAddress(accounts.mint.value)),\n ],\n });\n }\n if (!accounts.feeCollector.value) {\n accounts.feeCollector.value =\n '9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d' as Address<'9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d'>;\n }\n if (!accounts.feeCollectorTokenAccount.value) {\n accounts.feeCollectorTokenAccount.value = await getProgramDerivedAddress({\n programAddress:\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>,\n seeds: [\n getAddressEncoder().encode(expectAddress(accounts.feeCollector.value)),\n getAddressEncoder().encode(expectAddress(accounts.tokenProgram.value)),\n getAddressEncoder().encode(expectAddress(accounts.mint.value)),\n ],\n });\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta(accounts.relayer),\n getAccountMeta(accounts.pool),\n getAccountMeta(accounts.mint),\n getAccountMeta(accounts.vault),\n getAccountMeta(accounts.nullifier),\n getAccountMeta(accounts.recipient),\n getAccountMeta(accounts.vaultTokenAccount),\n getAccountMeta(accounts.recipientTokenAccount),\n getAccountMeta(accounts.feeCollector),\n getAccountMeta(accounts.feeCollectorTokenAccount),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.tokenProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n ],\n data: getTransferInstructionDataEncoder().encode(\n args as TransferInstructionDataArgs\n ),\n programAddress,\n } as TransferInstruction<\n TProgramAddress,\n TAccountRelayer,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountNullifier,\n TAccountRecipient,\n TAccountVaultTokenAccount,\n TAccountRecipientTokenAccount,\n TAccountFeeCollector,\n TAccountFeeCollectorTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >);\n}\n\nexport type TransferInput<\n TAccountRelayer extends string = string,\n TAccountPool extends string = string,\n TAccountMint extends string = string,\n TAccountVault extends string = string,\n TAccountNullifier extends string = string,\n TAccountRecipient extends string = string,\n TAccountVaultTokenAccount extends string = string,\n TAccountRecipientTokenAccount extends string = string,\n TAccountFeeCollector extends string = string,\n TAccountFeeCollectorTokenAccount extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountTokenProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n> = {\n relayer: TransactionSigner<TAccountRelayer>;\n pool: Address<TAccountPool>;\n mint: Address<TAccountMint>;\n vault: Address<TAccountVault>;\n nullifier: Address<TAccountNullifier>;\n recipient: Address<TAccountRecipient>;\n vaultTokenAccount?: Address<TAccountVaultTokenAccount>;\n recipientTokenAccount?: Address<TAccountRecipientTokenAccount>;\n feeCollector?: Address<TAccountFeeCollector>;\n feeCollectorTokenAccount?: Address<TAccountFeeCollectorTokenAccount>;\n systemProgram?: Address<TAccountSystemProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n proofA: TransferInstructionDataArgs['proofA'];\n proofB: TransferInstructionDataArgs['proofB'];\n proofC: TransferInstructionDataArgs['proofC'];\n publicInputs: TransferInstructionDataArgs['publicInputs'];\n nullifierHash: TransferInstructionDataArgs['nullifierHash'];\n relayerFee: TransferInstructionDataArgs['relayerFee'];\n recipientAmount: TransferInstructionDataArgs['recipientAmount'];\n};\n\nexport function getTransferInstruction<\n TAccountRelayer extends string,\n TAccountPool extends string,\n TAccountMint extends string,\n TAccountVault extends string,\n TAccountNullifier extends string,\n TAccountRecipient extends string,\n TAccountVaultTokenAccount extends string,\n TAccountRecipientTokenAccount extends string,\n TAccountFeeCollector extends string,\n TAccountFeeCollectorTokenAccount extends string,\n TAccountSystemProgram extends string,\n TAccountTokenProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TProgramAddress extends Address = typeof MIXOOR_PROGRAM_ADDRESS,\n>(\n input: TransferInput<\n TAccountRelayer,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountNullifier,\n TAccountRecipient,\n TAccountVaultTokenAccount,\n TAccountRecipientTokenAccount,\n TAccountFeeCollector,\n TAccountFeeCollectorTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): TransferInstruction<\n TProgramAddress,\n TAccountRelayer,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountNullifier,\n TAccountRecipient,\n TAccountVaultTokenAccount,\n TAccountRecipientTokenAccount,\n TAccountFeeCollector,\n TAccountFeeCollectorTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? MIXOOR_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n relayer: { value: input.relayer ?? null, isWritable: true },\n pool: { value: input.pool ?? null, isWritable: true },\n mint: { value: input.mint ?? null, isWritable: true },\n vault: { value: input.vault ?? null, isWritable: true },\n nullifier: { value: input.nullifier ?? null, isWritable: true },\n recipient: { value: input.recipient ?? null, isWritable: true },\n vaultTokenAccount: {\n value: input.vaultTokenAccount ?? null,\n isWritable: true,\n },\n recipientTokenAccount: {\n value: input.recipientTokenAccount ?? null,\n isWritable: true,\n },\n feeCollector: { value: input.feeCollector ?? null, isWritable: true },\n feeCollectorTokenAccount: {\n value: input.feeCollectorTokenAccount ?? null,\n isWritable: true,\n },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n associatedTokenProgram: {\n value: input.associatedTokenProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n if (!accounts.feeCollector.value) {\n accounts.feeCollector.value =\n '9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d' as Address<'9qX97Bd8dvHAknHVjCxz4uEJcPSE3NGjjgniMVdDBu6d'>;\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta(accounts.relayer),\n getAccountMeta(accounts.pool),\n getAccountMeta(accounts.mint),\n getAccountMeta(accounts.vault),\n getAccountMeta(accounts.nullifier),\n getAccountMeta(accounts.recipient),\n getAccountMeta(accounts.vaultTokenAccount),\n getAccountMeta(accounts.recipientTokenAccount),\n getAccountMeta(accounts.feeCollector),\n getAccountMeta(accounts.feeCollectorTokenAccount),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.tokenProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n ],\n data: getTransferInstructionDataEncoder().encode(\n args as TransferInstructionDataArgs\n ),\n programAddress,\n } as TransferInstruction<\n TProgramAddress,\n TAccountRelayer,\n TAccountPool,\n TAccountMint,\n TAccountVault,\n TAccountNullifier,\n TAccountRecipient,\n TAccountVaultTokenAccount,\n TAccountRecipientTokenAccount,\n TAccountFeeCollector,\n TAccountFeeCollectorTokenAccount,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >);\n}\n\nexport type ParsedTransferInstruction<\n TProgram extends string = typeof MIXOOR_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n relayer: TAccountMetas[0];\n pool: TAccountMetas[1];\n mint: TAccountMetas[2];\n vault: TAccountMetas[3];\n nullifier: TAccountMetas[4];\n recipient: TAccountMetas[5];\n vaultTokenAccount?: TAccountMetas[6] | undefined;\n recipientTokenAccount?: TAccountMetas[7] | undefined;\n feeCollector: TAccountMetas[8];\n feeCollectorTokenAccount?: TAccountMetas[9] | undefined;\n systemProgram: TAccountMetas[10];\n tokenProgram: TAccountMetas[11];\n associatedTokenProgram: TAccountMetas[12];\n };\n data: TransferInstructionData;\n};\n\nexport function parseTransferInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedTransferInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 13) {\n // TODO: Coded error.\n throw new Error('Not enough accounts');\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n const getNextOptionalAccount = () => {\n const accountMeta = getNextAccount();\n return accountMeta.address === MIXOOR_PROGRAM_ADDRESS\n ? undefined\n : accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n relayer: getNextAccount(),\n pool: getNextAccount(),\n mint: getNextAccount(),\n vault: getNextAccount(),\n nullifier: getNextAccount(),\n recipient: getNextAccount(),\n vaultTokenAccount: getNextOptionalAccount(),\n recipientTokenAccount: getNextOptionalAccount(),\n feeCollector: getNextAccount(),\n feeCollectorTokenAccount: getNextOptionalAccount(),\n systemProgram: getNextAccount(),\n tokenProgram: getNextAccount(),\n associatedTokenProgram: getNextAccount(),\n },\n data: getTransferInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n fixDecoderSize,\n fixEncoderSize,\n getAddressEncoder,\n getBytesDecoder,\n getBytesEncoder,\n getProgramDerivedAddress,\n getStructDecoder,\n getStructEncoder,\n getU64Decoder,\n getU64Encoder,\n transformEncoder,\n type AccountMeta,\n type AccountSignerMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyAccount,\n type ReadonlyUint8Array,\n type TransactionSigner,\n type WritableAccount,\n type WritableSignerAccount,\n} from '@solana/kit';\nimport { MIXOOR_PROGRAM_ADDRESS } from '../programs';\nimport {\n expectAddress,\n getAccountMetaFactory,\n type ResolvedAccount,\n} from '../shared';\n\nexport const WITHDRAW_DISCRIMINATOR = new Uint8Array([\n 183, 18, 70, 156, 148, 109, 161, 34,\n]);\n\nexport function getWithdrawDiscriminatorBytes() {\n return fixEncoderSize(getBytesEncoder(), 8).encode(WITHDRAW_DISCRIMINATOR);\n}\n\nexport type WithdrawInstruction<\n TProgram extends string = typeof MIXOOR_PROGRAM_ADDRESS,\n TAccountAuthority extends string | AccountMeta<string> =\n 'AdUKMLxLi18EfLqLFQvDaizXmvGoDFaNQfQU681vbTje',\n TAccountPool extends string | AccountMeta<string> = string,\n TAccountVault extends string | AccountMeta<string> = string,\n TAccountVaultAta extends string | AccountMeta<string> = string,\n TAccountAuthorityAta extends string | AccountMeta<string> = string,\n TAccountMint extends string | AccountMeta<string> = string,\n TAccountSystemProgram extends string | AccountMeta<string> =\n '11111111111111111111111111111111',\n TAccountTokenProgram extends string | AccountMeta<string> =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',\n TAccountAssociatedTokenProgram extends string | AccountMeta<string> =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL',\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> &\n InstructionWithData<ReadonlyUint8Array> &\n InstructionWithAccounts<\n [\n TAccountAuthority extends string\n ? WritableSignerAccount<TAccountAuthority> &\n AccountSignerMeta<TAccountAuthority>\n : TAccountAuthority,\n TAccountPool extends string\n ? WritableAccount<TAccountPool>\n : TAccountPool,\n TAccountVault extends string\n ? WritableAccount<TAccountVault>\n : TAccountVault,\n TAccountVaultAta extends string\n ? ReadonlyAccount<TAccountVaultAta>\n : TAccountVaultAta,\n TAccountAuthorityAta extends string\n ? ReadonlyAccount<TAccountAuthorityAta>\n : TAccountAuthorityAta,\n TAccountMint extends string\n ? WritableAccount<TAccountMint>\n : TAccountMint,\n TAccountSystemProgram extends string\n ? ReadonlyAccount<TAccountSystemProgram>\n : TAccountSystemProgram,\n TAccountTokenProgram extends string\n ? ReadonlyAccount<TAccountTokenProgram>\n : TAccountTokenProgram,\n TAccountAssociatedTokenProgram extends string\n ? ReadonlyAccount<TAccountAssociatedTokenProgram>\n : TAccountAssociatedTokenProgram,\n ...TRemainingAccounts,\n ]\n >;\n\nexport type WithdrawInstructionData = {\n discriminator: ReadonlyUint8Array;\n amount: bigint;\n};\n\nexport type WithdrawInstructionDataArgs = { amount: number | bigint };\n\nexport function getWithdrawInstructionDataEncoder(): FixedSizeEncoder<WithdrawInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],\n ['amount', getU64Encoder()],\n ]),\n (value) => ({ ...value, discriminator: WITHDRAW_DISCRIMINATOR })\n );\n}\n\nexport function getWithdrawInstructionDataDecoder(): FixedSizeDecoder<WithdrawInstructionData> {\n return getStructDecoder([\n ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['amount', getU64Decoder()],\n ]);\n}\n\nexport function getWithdrawInstructionDataCodec(): FixedSizeCodec<\n WithdrawInstructionDataArgs,\n WithdrawInstructionData\n> {\n return combineCodec(\n getWithdrawInstructionDataEncoder(),\n getWithdrawInstructionDataDecoder()\n );\n}\n\nexport type WithdrawAsyncInput<\n TAccountAuthority extends string = string,\n TAccountPool extends string = string,\n TAccountVault extends string = string,\n TAccountVaultAta extends string = string,\n TAccountAuthorityAta extends string = string,\n TAccountMint extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountTokenProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n> = {\n authority?: TransactionSigner<TAccountAuthority>;\n pool: Address<TAccountPool>;\n vault?: Address<TAccountVault>;\n vaultAta?: Address<TAccountVaultAta>;\n authorityAta?: Address<TAccountAuthorityAta>;\n mint: Address<TAccountMint>;\n systemProgram?: Address<TAccountSystemProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n amount: WithdrawInstructionDataArgs['amount'];\n};\n\nexport async function getWithdrawInstructionAsync<\n TAccountAuthority extends string,\n TAccountPool extends string,\n TAccountVault extends string,\n TAccountVaultAta extends string,\n TAccountAuthorityAta extends string,\n TAccountMint extends string,\n TAccountSystemProgram extends string,\n TAccountTokenProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TProgramAddress extends Address = typeof MIXOOR_PROGRAM_ADDRESS,\n>(\n input: WithdrawAsyncInput<\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountAuthorityAta,\n TAccountMint,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): Promise<\n WithdrawInstruction<\n TProgramAddress,\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountAuthorityAta,\n TAccountMint,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >\n> {\n // Program address.\n const programAddress = config?.programAddress ?? MIXOOR_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n authority: { value: input.authority ?? null, isWritable: true },\n pool: { value: input.pool ?? null, isWritable: true },\n vault: { value: input.vault ?? null, isWritable: true },\n vaultAta: { value: input.vaultAta ?? null, isWritable: false },\n authorityAta: { value: input.authorityAta ?? null, isWritable: false },\n mint: { value: input.mint ?? null, isWritable: true },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n associatedTokenProgram: {\n value: input.associatedTokenProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.authority.value) {\n accounts.authority.value =\n 'AdUKMLxLi18EfLqLFQvDaizXmvGoDFaNQfQU681vbTje' as Address<'AdUKMLxLi18EfLqLFQvDaizXmvGoDFaNQfQU681vbTje'>;\n }\n if (!accounts.vault.value) {\n accounts.vault.value = await getProgramDerivedAddress({\n programAddress,\n seeds: [\n getBytesEncoder().encode(new Uint8Array([118, 97, 117, 108, 116])),\n getAddressEncoder().encode(expectAddress(accounts.pool.value)),\n ],\n });\n }\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n if (!accounts.vaultAta.value) {\n accounts.vaultAta.value = await getProgramDerivedAddress({\n programAddress:\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>,\n seeds: [\n getAddressEncoder().encode(expectAddress(accounts.vault.value)),\n getAddressEncoder().encode(expectAddress(accounts.tokenProgram.value)),\n getAddressEncoder().encode(expectAddress(accounts.mint.value)),\n ],\n });\n }\n if (!accounts.authorityAta.value) {\n accounts.authorityAta.value = await getProgramDerivedAddress({\n programAddress:\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>,\n seeds: [\n getAddressEncoder().encode(expectAddress(accounts.authority.value)),\n getAddressEncoder().encode(expectAddress(accounts.tokenProgram.value)),\n getAddressEncoder().encode(expectAddress(accounts.mint.value)),\n ],\n });\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta(accounts.authority),\n getAccountMeta(accounts.pool),\n getAccountMeta(accounts.vault),\n getAccountMeta(accounts.vaultAta),\n getAccountMeta(accounts.authorityAta),\n getAccountMeta(accounts.mint),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.tokenProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n ],\n data: getWithdrawInstructionDataEncoder().encode(\n args as WithdrawInstructionDataArgs\n ),\n programAddress,\n } as WithdrawInstruction<\n TProgramAddress,\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountAuthorityAta,\n TAccountMint,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >);\n}\n\nexport type WithdrawInput<\n TAccountAuthority extends string = string,\n TAccountPool extends string = string,\n TAccountVault extends string = string,\n TAccountVaultAta extends string = string,\n TAccountAuthorityAta extends string = string,\n TAccountMint extends string = string,\n TAccountSystemProgram extends string = string,\n TAccountTokenProgram extends string = string,\n TAccountAssociatedTokenProgram extends string = string,\n> = {\n authority?: TransactionSigner<TAccountAuthority>;\n pool: Address<TAccountPool>;\n vault: Address<TAccountVault>;\n vaultAta: Address<TAccountVaultAta>;\n authorityAta: Address<TAccountAuthorityAta>;\n mint: Address<TAccountMint>;\n systemProgram?: Address<TAccountSystemProgram>;\n tokenProgram?: Address<TAccountTokenProgram>;\n associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;\n amount: WithdrawInstructionDataArgs['amount'];\n};\n\nexport function getWithdrawInstruction<\n TAccountAuthority extends string,\n TAccountPool extends string,\n TAccountVault extends string,\n TAccountVaultAta extends string,\n TAccountAuthorityAta extends string,\n TAccountMint extends string,\n TAccountSystemProgram extends string,\n TAccountTokenProgram extends string,\n TAccountAssociatedTokenProgram extends string,\n TProgramAddress extends Address = typeof MIXOOR_PROGRAM_ADDRESS,\n>(\n input: WithdrawInput<\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountAuthorityAta,\n TAccountMint,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >,\n config?: { programAddress?: TProgramAddress }\n): WithdrawInstruction<\n TProgramAddress,\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountAuthorityAta,\n TAccountMint,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n> {\n // Program address.\n const programAddress = config?.programAddress ?? MIXOOR_PROGRAM_ADDRESS;\n\n // Original accounts.\n const originalAccounts = {\n authority: { value: input.authority ?? null, isWritable: true },\n pool: { value: input.pool ?? null, isWritable: true },\n vault: { value: input.vault ?? null, isWritable: true },\n vaultAta: { value: input.vaultAta ?? null, isWritable: false },\n authorityAta: { value: input.authorityAta ?? null, isWritable: false },\n mint: { value: input.mint ?? null, isWritable: true },\n systemProgram: { value: input.systemProgram ?? null, isWritable: false },\n tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },\n associatedTokenProgram: {\n value: input.associatedTokenProgram ?? null,\n isWritable: false,\n },\n };\n const accounts = originalAccounts as Record<\n keyof typeof originalAccounts,\n ResolvedAccount\n >;\n\n // Original args.\n const args = { ...input };\n\n // Resolve default values.\n if (!accounts.authority.value) {\n accounts.authority.value =\n 'AdUKMLxLi18EfLqLFQvDaizXmvGoDFaNQfQU681vbTje' as Address<'AdUKMLxLi18EfLqLFQvDaizXmvGoDFaNQfQU681vbTje'>;\n }\n if (!accounts.tokenProgram.value) {\n accounts.tokenProgram.value =\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;\n }\n if (!accounts.systemProgram.value) {\n accounts.systemProgram.value =\n '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n }\n if (!accounts.associatedTokenProgram.value) {\n accounts.associatedTokenProgram.value =\n 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;\n }\n\n const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');\n return Object.freeze({\n accounts: [\n getAccountMeta(accounts.authority),\n getAccountMeta(accounts.pool),\n getAccountMeta(accounts.vault),\n getAccountMeta(accounts.vaultAta),\n getAccountMeta(accounts.authorityAta),\n getAccountMeta(accounts.mint),\n getAccountMeta(accounts.systemProgram),\n getAccountMeta(accounts.tokenProgram),\n getAccountMeta(accounts.associatedTokenProgram),\n ],\n data: getWithdrawInstructionDataEncoder().encode(\n args as WithdrawInstructionDataArgs\n ),\n programAddress,\n } as WithdrawInstruction<\n TProgramAddress,\n TAccountAuthority,\n TAccountPool,\n TAccountVault,\n TAccountVaultAta,\n TAccountAuthorityAta,\n TAccountMint,\n TAccountSystemProgram,\n TAccountTokenProgram,\n TAccountAssociatedTokenProgram\n >);\n}\n\nexport type ParsedWithdrawInstruction<\n TProgram extends string = typeof MIXOOR_PROGRAM_ADDRESS,\n TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],\n> = {\n programAddress: Address<TProgram>;\n accounts: {\n authority: TAccountMetas[0];\n pool: TAccountMetas[1];\n vault: TAccountMetas[2];\n vaultAta: TAccountMetas[3];\n authorityAta: TAccountMetas[4];\n mint: TAccountMetas[5];\n systemProgram: TAccountMetas[6];\n tokenProgram: TAccountMetas[7];\n associatedTokenProgram: TAccountMetas[8];\n };\n data: WithdrawInstructionData;\n};\n\nexport function parseWithdrawInstruction<\n TProgram extends string,\n TAccountMetas extends readonly AccountMeta[],\n>(\n instruction: Instruction<TProgram> &\n InstructionWithAccounts<TAccountMetas> &\n InstructionWithData<ReadonlyUint8Array>\n): ParsedWithdrawInstruction<TProgram, TAccountMetas> {\n if (instruction.accounts.length < 9) {\n // TODO: Coded error.\n throw new Error('Not enough accounts');\n }\n let accountIndex = 0;\n const getNextAccount = () => {\n const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;\n accountIndex += 1;\n return accountMeta;\n };\n return {\n programAddress: instruction.programAddress,\n accounts: {\n authority: getNextAccount(),\n pool: getNextAccount(),\n vault: getNextAccount(),\n vaultAta: getNextAccount(),\n authorityAta: getNextAccount(),\n mint: getNextAccount(),\n systemProgram: getNextAccount(),\n tokenProgram: getNextAccount(),\n associatedTokenProgram: getNextAccount(),\n },\n data: getWithdrawInstructionDataDecoder().decode(instruction.data),\n };\n}\n","import { Address, getAddressEncoder } from '@solana/kit';\nimport { buildPoseidon } from 'circomlibjs';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { groth16 } from 'snarkjs';\nimport { fileURLToPath } from 'url';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet poseidon: any;\n\nasync function initPoseidon() {\n if (!poseidon) {\n poseidon = await buildPoseidon();\n }\n return poseidon;\n}\n\n// Snark scalar field size\nconst SNARK_FIELD_SIZE = BigInt(\n '21888242871839275222246405745257275088548364400416034343698204186575808495617'\n);\n\n// Helper function to convert Uint8Array to field element (BigInt string)\n// consistently using Big-Endian interpretation AND modulo reduction\nfunction toFieldElement(bytes: ArrayLike<number>): string {\n let bigInt = 0n;\n for (let i = 0; i < bytes.length; i++) {\n bigInt = (bigInt << 8n) | BigInt(bytes[i]);\n }\n return (bigInt % SNARK_FIELD_SIZE).toString();\n}\n\nexport async function poseidonHash(inputs: Uint8Array[]): Promise<Uint8Array> {\n await initPoseidon();\n // Ensure inputs are converted to BigInts (standard form) using Big-Endian interpretation\n // Do NOT use poseidon.F.e() as it might convert to Montgomery form which poseidon() expects to handle itself\n const hash = poseidon(inputs.map((x) => BigInt(toFieldElement(x))));\n const hashBigInt = poseidon.F.toObject(hash);\n\n // Convert BigInt to 32-byte array (BIG-ENDIAN to match MerkleTree class)\n const bytes = new Uint8Array(32);\n let temp = BigInt(hashBigInt);\n for (let i = 31; i >= 0; i--) {\n bytes[i] = Number(temp & BigInt(0xff));\n temp = temp >> BigInt(8);\n }\n\n return bytes;\n}\n\nexport async function generateCommitment(\n secret: Uint8Array,\n nullifier: Uint8Array,\n amount: bigint,\n poolId: Address\n): Promise<Uint8Array> {\n await initPoseidon();\n\n const poolIdBytes = getAddressEncoder().encode(poolId);\n\n const secretField = BigInt(toFieldElement(secret));\n const nullifierField = BigInt(toFieldElement(nullifier));\n const amountField = BigInt(amount);\n const poolIdField = BigInt(toFieldElement(Uint8Array.from(poolIdBytes)));\n\n const hash = poseidon([\n secretField,\n nullifierField,\n amountField,\n poolIdField,\n ]);\n const hashBigInt = poseidon.F.toObject(hash);\n\n // Convert result to bytes (BIG-ENDIAN to match MerkleTree class)\n const bytes = new Uint8Array(32);\n let temp = BigInt(hashBigInt);\n for (let i = 31; i >= 0; i--) {\n bytes[i] = Number(temp & BigInt(0xff));\n temp = temp >> BigInt(8);\n }\n\n return bytes;\n}\n\nexport async function generateNullifier(\n nullifier: Uint8Array,\n poolId: Address\n): Promise<Uint8Array> {\n const poolIdBytes = getAddressEncoder().encode(poolId);\n return await poseidonHash([nullifier, Uint8Array.from(poolIdBytes)]);\n}\n\nexport interface ProofInput {\n secret: Uint8Array;\n nullifier: Uint8Array;\n amount: bigint;\n pathElements: Uint8Array[];\n pathIndices: number[];\n recipient: Uint8Array;\n relayer: Uint8Array;\n fee: number;\n refund: bigint;\n root: Uint8Array;\n poolAddress: Address; // pool address\n}\n\nexport interface ProofOutput {\n proof_a: Uint8Array;\n proof_b: Uint8Array;\n proof_c: Uint8Array;\n}\nfunction fieldElementToBytes(element: string): Uint8Array {\n // Convert field element string to BigInt, then to 32-byte array (BIG-ENDIAN to match snarkjs output)\n const bigInt = BigInt(element);\n const bytes = new Uint8Array(32);\n\n for (let i = 0; i < 32; i++) {\n bytes[31 - i] = Number((bigInt >> BigInt(i * 8)) & BigInt(0xff));\n }\n\n return bytes;\n}\n\nfunction publicSignalToBytes(signal: string): Uint8Array {\n const bigInt = BigInt(signal);\n const bytes = new Uint8Array(32);\n\n for (let i = 0; i < 32; i++) {\n bytes[31 - i] = Number((bigInt >> BigInt(i * 8)) & BigInt(0xff));\n }\n\n return bytes;\n}\n\nfunction g1PointToBytes(point: [string, string]): Uint8Array {\n const x = fieldElementToBytes(point[0]);\n const y = fieldElementToBytes(point[1]);\n\n const result = new Uint8Array(64);\n result.set(x, 0);\n result.set(y, 32);\n\n return result;\n}\n\nfunction g2PointToBytes(\n point: [[string, string], [string, string]]\n): Uint8Array {\n // G2 point has two coordinates, each is a pair of field elements\n // Solana/EIP-197 BN254 G2 expectation: c1 then c0 (Big Endian logic)\n // snarkjs output: [c0, c1]\n const x1 = fieldElementToBytes(point[0][1]); // c1\n const x0 = fieldElementToBytes(point[0][0]); // c0\n const y1 = fieldElementToBytes(point[1][1]); // c1\n const y0 = fieldElementToBytes(point[1][0]); // c0\n\n const result = new Uint8Array(128);\n result.set(x1, 0);\n result.set(x0, 32);\n result.set(y1, 64);\n result.set(y0, 96);\n\n return result;\n}\n\nexport type ProofData = {\n proofA: Uint8Array;\n proofB: Uint8Array;\n proofC: Uint8Array;\n};\n\nexport async function generateProof(input: ProofInput): Promise<{\n proofData: ProofData;\n publicInputs: Uint8Array[];\n}> {\n await initPoseidon();\n\n const poolIdBytes = getAddressEncoder().encode(input.poolAddress);\n\n const circuitInputs = {\n root: toFieldElement(input.root),\n nullifierHash: toFieldElement(\n await generateNullifier(input.nullifier, input.poolAddress)\n ),\n recipient: toFieldElement(input.recipient),\n relayer: toFieldElement(input.relayer),\n fee: input.fee,\n refund: input.refund,\n poolId: toFieldElement(Uint8Array.from(poolIdBytes)),\n secret: toFieldElement(input.secret),\n nullifier: toFieldElement(input.nullifier),\n pathElements: input.pathElements.map((x) => toFieldElement(x)),\n pathIndices: input.pathIndices,\n amount: BigInt(input.amount).toString(),\n };\n\n // Resolve paths relative to the package root\n // Get the directory of the current file\n // Handle both ESM and CommonJS environments\n let __dirname: string;\n if (typeof __filename !== 'undefined') {\n // CommonJS environment\n __dirname = path.dirname(__filename);\n } else {\n // ESM environment\n const __filename_esm = fileURLToPath(import.meta.url);\n __dirname = path.dirname(__filename_esm);\n }\n\n const packageRoot = path.join(__dirname, '../..');\n const wasmPath = path.join(\n packageRoot,\n 'circuits/build/transaction_js/transaction.wasm'\n );\n const zkeyPath = path.join(packageRoot, 'circuits/transaction_0001.zkey');\n\n const { proof, publicSignals } = await groth16.fullProve(\n circuitInputs,\n wasmPath,\n zkeyPath\n );\n\n // Verify proof locally first\n const vKeyPath = path.join(packageRoot, 'circuits/verification_key.json');\n const isValid = await groth16.verify(\n JSON.parse(fs.readFileSync(vKeyPath, 'utf8')),\n publicSignals,\n proof\n );\n console.log('Local proof verification:', isValid ? 'VALID ✓' : 'INVALID ✗');\n if (!isValid) {\n throw new Error('Generated proof is invalid - check circuit inputs');\n }\n\n const publicInputs = publicSignals.map((signal) =>\n publicSignalToBytes(signal)\n );\n\n // snarkjs returns proof with pi_a, pi_b, pi_c as string arrays\n const proof_a = g1PointToBytes([proof.pi_a[0], proof.pi_a[1]]);\n const proof_b = g2PointToBytes([\n [proof.pi_b[0][0], proof.pi_b[0][1]],\n [proof.pi_b[1][0], proof.pi_b[1][1]],\n ]);\n const proof_c = g1PointToBytes([proof.pi_c[0], proof.pi_c[1]]);\n\n return {\n proofData: {\n proofA: proof_a,\n proofB: proof_b,\n proofC: proof_c,\n },\n publicInputs,\n };\n}\n","import { randomBytes as nodeRandomBytes } from 'crypto';\n\nexport function randomBytes(size: number): Uint8Array {\n return new Uint8Array(nodeRandomBytes(size));\n}\n\nexport function toHex(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString('hex');\n}\n\nexport function fromHex(hex: string): Uint8Array {\n return new Uint8Array(Buffer.from(hex, 'hex'));\n}\n","import { Address } from '@solana/kit';\nimport { buildPoseidon } from 'circomlibjs';\nimport { Client } from '../../test/_setup';\n\nexport class MerkleTree {\n private levels: number;\n private _leaves: Uint8Array[];\n private _zeros: Uint8Array[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private poseidon: any;\n private initialized: boolean = false;\n\n constructor(levels: number) {\n this.levels = levels;\n this._leaves = [];\n this._zeros = [];\n }\n\n async initialize() {\n if (this.initialized) return;\n\n this.poseidon = await buildPoseidon();\n\n // First zero is all zeros\n this._zeros[0] = new Uint8Array(32);\n\n // Mark as initialized BEFORE building zero tree\n this.initialized = true;\n\n // Build zero tree\n for (let i = 1; i <= this.levels; i++) {\n this._zeros[i] = this.hash(this._zeros[i - 1], this._zeros[i - 1]);\n }\n }\n\n private hash(left: Uint8Array, right: Uint8Array): Uint8Array {\n if (!this.poseidon) {\n throw new Error('MerkleTree not initialized. Call initialize() first');\n }\n\n // Convert Uint8Array to field elements with modulo reduction to match circuit\n // This ensures consistency if inputs (e.g. from randomBytes) technically exceed field size\n const SNARK_FIELD_SIZE = BigInt(\n '21888242871839275222246405745257275088548364400416034343698204186575808495617'\n );\n const leftBigInt = this.uint8ArrayToBigInt(left) % SNARK_FIELD_SIZE;\n const rightBigInt = this.uint8ArrayToBigInt(right) % SNARK_FIELD_SIZE;\n\n const result = this.poseidon([leftBigInt, rightBigInt]);\n const resultBytes = this.poseidon.F.toObject(result);\n\n // Convert back to Uint8Array (32 bytes)\n return this.bigIntToUint8Array(BigInt(resultBytes));\n }\n\n private uint8ArrayToBigInt(arr: Uint8Array): bigint {\n let hex = '0x';\n for (let i = 0; i < arr.length; i++) {\n hex += arr[i].toString(16).padStart(2, '0');\n }\n return BigInt(hex);\n }\n\n private bigIntToUint8Array(value: bigint): Uint8Array {\n const bytes = new Uint8Array(32);\n let temp = value;\n for (let i = 31; i >= 0; i--) {\n bytes[i] = Number(temp & BigInt(0xff));\n temp = temp >> BigInt(8);\n }\n return bytes;\n }\n\n insert(leaf: Uint8Array) {\n if (!this.initialized) {\n throw new Error('MerkleTree not initialized. Call initialize() first');\n }\n this._leaves.push(leaf);\n }\n\n root(): Uint8Array {\n if (!this.initialized) {\n throw new Error('MerkleTree not initialized. Call initialize() first');\n }\n\n if (this._leaves.length === 0) {\n return this._zeros[this.levels];\n }\n\n let currentLevel = [...this._leaves];\n\n for (let level = 0; level < this.levels; level++) {\n const nextLevel: Uint8Array[] = [];\n\n for (let i = 0; i < currentLevel.length; i += 2) {\n const left = currentLevel[i];\n const right =\n i + 1 < currentLevel.length\n ? currentLevel[i + 1]\n : this._zeros[level];\n nextLevel.push(this.hash(left, right));\n }\n\n currentLevel = nextLevel;\n\n // Note: Removed early break checking for length === 1\n // We must continue hashing up to the root level.\n }\n\n return currentLevel[0];\n }\n\n getProof(index: number): {\n pathElements: Uint8Array[];\n pathIndices: number[];\n } {\n if (!this.initialized) {\n throw new Error('MerkleTree not initialized. Call initialize() first');\n }\n\n if (index >= this._leaves.length) {\n throw new Error('Leaf index out of bounds');\n }\n\n const pathElements: Uint8Array[] = [];\n const pathIndices: number[] = [];\n\n let currentLevel = [...this._leaves];\n let currentIndex = index;\n\n for (let level = 0; level < this.levels; level++) {\n const isLeft = currentIndex % 2 === 0;\n const siblingIndex = isLeft ? currentIndex + 1 : currentIndex - 1;\n\n const sibling =\n siblingIndex < currentLevel.length\n ? currentLevel[siblingIndex]\n : this._zeros[level];\n\n pathElements.push(sibling);\n pathIndices.push(isLeft ? 0 : 1);\n\n // Move up to next level\n const nextLevel: Uint8Array[] = [];\n for (let i = 0; i < currentLevel.length; i += 2) {\n const left = currentLevel[i];\n const right =\n i + 1 < currentLevel.length\n ? currentLevel[i + 1]\n : this._zeros[level];\n nextLevel.push(this.hash(left, right));\n }\n\n currentLevel = nextLevel;\n currentIndex = Math.floor(currentIndex / 2);\n }\n\n return { pathElements, pathIndices };\n }\n}\n\n/**\n * The Merkle tree is now OFF-CHAIN (event-based, like Tornado Cash)\n *\n * In production:\n * 1. Listen to CommitmentInserted events from deposits\n * 2. Build local Merkle tree from events\n * 3. Use local tree's root in ZK proofs\n * 4. The root should match one in Pool's root_history\n *\n * For testing: Just use your local MerkleTree.root()\n */\nexport function extractMerkleRootFromAccount(\n _client: Client,\n _poolAddress: Address\n): Uint8Array {\n throw new Error(\n 'Merkle tree is off-chain now. Build it locally from CommitmentInserted events. ' +\n 'For tests, use your MerkleTree instance: merkleTree.root()'\n );\n}\n","import {\n Address,\n getAddressEncoder,\n getEnumCodec,\n getProgramDerivedAddress,\n ProgramDerivedAddress,\n} from '@solana/kit';\nimport { AssetType, MIXOOR_PROGRAM_ADDRESS } from '../generated';\n\nexport type PoolSeeds = {\n /** The prefix string SEED. */\n seed?: string;\n /** The mint address */\n mint: Address;\n /** The asset type */\n assetType: AssetType;\n};\n\nexport async function findPoolAddress(\n seeds: PoolSeeds,\n config: { programAddress?: Address | undefined } = {}\n): Promise<ProgramDerivedAddress> {\n const { programAddress = MIXOOR_PROGRAM_ADDRESS } = config;\n\n return await getProgramDerivedAddress({\n programAddress,\n seeds: [\n 'pool',\n getAddressEncoder().encode(seeds.mint),\n getEnumCodec(AssetType).encode(seeds.assetType),\n ],\n });\n}\n\nexport type MerkleTreeSeeds = {\n /** The prefix string SEED. */\n seed?: string;\n /** The pool address */\n pool: Address;\n};\n\nexport async function findMerkleTreeAddress(\n seeds: MerkleTreeSeeds,\n config: { programAddress?: Address | undefined } = {}\n): Promise<ProgramDerivedAddress> {\n const { programAddress = MIXOOR_PROGRAM_ADDRESS } = config;\n\n return await getProgramDerivedAddress({\n programAddress,\n seeds: ['merkle', getAddressEncoder().encode(seeds.pool)],\n });\n}\n\nexport type VaultSeeds = {\n /** The prefix string SEED. */\n seed?: string;\n /** The pool address */\n pool: Address;\n};\n\nexport async function findVaultAddress(\n seeds: MerkleTreeSeeds,\n config: { programAddress?: Address | undefined } = {}\n): Promise<ProgramDerivedAddress> {\n const { programAddress = MIXOOR_PROGRAM_ADDRESS } = config;\n\n return await getProgramDerivedAddress({\n programAddress,\n seeds: ['vault', getAddressEncoder().encode(seeds.pool)],\n });\n}\n\nexport type NullifierSeeds = {\n /** The prefix string SEED. */\n seed?: string;\n /** The pool address */\n pool: Address;\n /** The nullifier hash */\n nullifierHash: Uint8Array;\n};\n\nexport async function findNullifierAddress(\n seeds: NullifierSeeds,\n config: { programAddress?: Address | undefined } = {}\n): Promise<ProgramDerivedAddress> {\n const { programAddress = MIXOOR_PROGRAM_ADDRESS } = config;\n\n return await getProgramDerivedAddress({\n programAddress,\n seeds: [\n 'nullifier',\n getAddressEncoder().encode(seeds.pool),\n seeds.nullifierHash,\n ],\n });\n}\n"]}