@wireio/stake 0.0.1 → 0.0.3
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.
- package/lib/stake.browser.js +10 -7
- package/lib/stake.browser.js.map +1 -1
- package/lib/stake.d.ts +4 -3
- package/lib/stake.js +10 -7
- package/lib/stake.js.map +1 -1
- package/lib/stake.m.js +10 -7
- package/lib/stake.m.js.map +1 -1
- package/package.json +2 -2
- package/src/networks/solana/solana.ts +13 -10
package/lib/stake.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stake.js","sources":["../src/utils.ts","../src/networks/solana/constants.ts","../src/networks/solana/utils.ts","../src/networks/solana/program.ts","../src/networks/solana/clients/deposit.client.ts","../src/networks/solana/clients/distribution.client.ts","../src/networks/solana/clients/leaderboard.client.ts","../src/networks/solana/solana.ts","../src/staker/staker.ts","../src/networks/ethereum/contract.ts","../src/networks/ethereum/ethereum.ts","../src/networks/ethereum/types.ts"],"sourcesContent":["/**\n * Static utility functions for working with Wire Network Staking Protocol.\n * \n * @module utils\n */\n\nexport const hi = (name: string): string => {\n return `Hello, ${name}!`;\n}","// src/networks/solana/constants.ts\n\nimport { PublicKey } from '@solana/web3.js';\nimport { TOKEN_2022_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID } from '@solana/spl-token';\n\n// — IDLs — (must match your filesystem: src/assets/solana/idl/*.json)\nimport DepositIDL from '../../assets/solana/idl/deposit.json';\nimport DistributionIDL from '../../assets/solana/idl/distribution.json';\nimport LiqSolTokenIDL from '../../assets/solana/idl/liq_sol_token.json';\nimport StakeControllerIDL from '../../assets/solana/idl/stake_controller.json';\nimport StakeRegistryIDL from '../../assets/solana/idl/stake_registry.json';\nimport TreasuryIDL from '../../assets/solana/idl/treasury.json';\nimport ValidatorLeaderboardIDL from '../../assets/solana/idl/validator_leaderboard.json';\nimport ValidatorRegistryIDL from '../../assets/solana/idl/validator_registry.json';\nimport YieldOracleIDL from '../../assets/solana/idl/yield_oracle.json';\n\n// — Types — for your clients\nimport type { Deposit } from '../../assets/solana/types/deposit';\nimport type { Distribution } from '../../assets/solana/types/distribution';\nimport type { ValidatorLeaderboard } from '../../assets/solana/types/validator_leaderboard';\nimport type { LiqSolToken } from '../../assets/solana/types/liq_sol_token';\nimport type { StakeController } from '../../assets/solana/types/stake_controller';\nimport type { StakeRegistry } from '../../assets/solana/types/stake_registry';\nimport type { Treasury } from '../../assets/solana/types/treasury';\nimport type { ValidatorRegistry } from '../../assets/solana/types/validator_registry';\nimport type { YieldOracle } from '../../assets/solana/types/yield_oracle';\n\n// Re-export for easy import elsewhere:\nexport {\n Deposit,\n DepositIDL,\n Distribution,\n DistributionIDL,\n LiqSolToken,\n LiqSolTokenIDL,\n StakeController,\n StakeControllerIDL,\n StakeRegistry,\n StakeRegistryIDL,\n Treasury,\n TreasuryIDL,\n ValidatorLeaderboard,\n ValidatorLeaderboardIDL,\n ValidatorRegistry,\n ValidatorRegistryIDL,\n YieldOracle,\n YieldOracleIDL,\n};\n\n// — Program IDs — anchor “address” fields inside each IDL must match these:\nexport const DEPOSIT_PROGRAM_ID = new PublicKey(DepositIDL.address);\nexport const DISTRIBUTION_PROGRAM_ID = new PublicKey(DistributionIDL.address);\nexport const LIQSOL_TOKEN_PROGRAM_ID = new PublicKey(LiqSolTokenIDL.address);\nexport const STAKE_CONTROLLER_PROGRAM_ID = new PublicKey(StakeControllerIDL.address);\nexport const STAKE_REGISTRY_PROGRAM_ID = new PublicKey(StakeRegistryIDL.address);\nexport const TREASURY_PROGRAM_ID = new PublicKey(TreasuryIDL.address);\nexport const VALIDATOR_LEADERBOARD_PROGRAM_ID = new PublicKey(ValidatorLeaderboardIDL.address);\nexport const VALIDATOR_REGISTRY_PROGRAM_ID = new PublicKey(ValidatorRegistryIDL.address);\nexport const YIELD_ORACLE_PROGRAM_ID = new PublicKey(YieldOracleIDL.address);\n\n// — Protocol constants — tweak as needed:\nexport const MIN_SOL_TO_PARTICIPATE = 1_000_000_000; // 1 SOL in lamports\nexport const MIN_FUNDS_THRESHOLD = 10_000_000_000; // 10 SOL in lamports\nexport const RESERVE_FOR_FEES = 1_000_000_000; // 1 SOL\n\n// — Pre-derived PDA seeds for your convenience — \n// (you can still use your utils.ts helpers instead)\nexport const TREASURY_WALLET_PDA = new PublicKey('9gLj1MRrm66GNYqnMLPGUzyYqYJpVLQgFSbtCQV9Ta4G');\nexport const LIQSOL_MINT_ADDRESS = new PublicKey('B2XtJABkc6eUoYUNgSfZVb3kYckmbh2zxp4rp2hX2Xwa');\nexport const STAKE_VAULT_PDA = new PublicKey('AY83EfU5LXJGDhbLeP45H3tLKisGZgSe2G4mGYfPimqN');\n\n// re-export SPL token constants:\nexport { TOKEN_2022_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID };","// src/solana/utils.ts\nimport { AnchorProvider, Program } from '@coral-xyz/anchor'\nimport { PublicKey } from '@solana/web3.js'\nimport { getAssociatedTokenAddressSync, TOKEN_2022_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID } from '@solana/spl-token'\nimport {\n DEPOSIT_PROGRAM_ID,\n DISTRIBUTION_PROGRAM_ID,\n STAKE_CONTROLLER_PROGRAM_ID,\n VALIDATOR_LEADERBOARD_PROGRAM_ID,\n LIQSOL_MINT_ADDRESS,\n DepositIDL,\n Deposit\n} from './constants'\n\n// -- Program factories ------------------------------------------------------\n/**\n * Create an Anchor Program client for the Deposit program\n */\nexport function getDepositProgram(provider: AnchorProvider): Program<Deposit> {\n // Ensure the IDL has the correct program address\n const idlWithAddress = {\n ...JSON.parse(JSON.stringify(DepositIDL)),\n address: DEPOSIT_PROGRAM_ID.toString(),\n }\n return new Program(idlWithAddress as any, provider) as Program<Deposit>\n}\n\n// (Other program factories can go here if needed)\n\n// -- PDA derivation helpers ------------------------------------------------\nexport function deriveDepositAuthorityPDA(\n programId: PublicKey = DEPOSIT_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('program_authority')],\n programId\n )\n}\n\nexport function deriveLiqsolMintAuthorityPDA(\n programId: PublicKey = LIQSOL_MINT_ADDRESS\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('mint_authority')],\n programId\n )\n}\n\nexport function deriveStakeControllerVaultPDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('vault')],\n STAKE_CONTROLLER_PROGRAM_ID\n )\n}\n\nexport function deriveStakeControllerReservePoolPDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('reserve_pool')],\n STAKE_CONTROLLER_PROGRAM_ID\n )\n}\n\nexport function deriveStakeControllerStatePDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('stake_controller')],\n STAKE_CONTROLLER_PROGRAM_ID\n )\n}\n\nexport function deriveDistributionStatePDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('distribution_state')],\n DISTRIBUTION_PROGRAM_ID\n )\n}\n\nexport function deriveUserRecordPDA(\n user: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('user_record'), user.toBuffer()],\n DISTRIBUTION_PROGRAM_ID\n )\n}\n\nexport function deriveLeaderboardHeadPDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('leaderboard_head')],\n VALIDATOR_LEADERBOARD_PROGRAM_ID\n )\n}\n\nexport function deriveValidatorRecordPDA(\n voteAccount: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('validator_record'), voteAccount.toBuffer()],\n VALIDATOR_LEADERBOARD_PROGRAM_ID\n )\n}\n\nexport function deriveTop10CachePDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('top_10_cache')],\n VALIDATOR_LEADERBOARD_PROGRAM_ID\n )\n}\n\n// -- SPL Token helper -------------------------------------------------------\nexport function getUserLiqsolATA(\n user: PublicKey\n): PublicKey {\n return getAssociatedTokenAddressSync(\n LIQSOL_MINT_ADDRESS,\n user,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n )\n}\n\n// seedToPID(seed: string): PublicKey ","// src/solana/programService.ts\n\nimport { AnchorProvider, Program } from '@coral-xyz/anchor';\nimport { PublicKey } from '@solana/web3.js';\n\n// 1) pull in all your on-chain IDLs (must match lowercase `src/assets/solana/idl`)\nimport depositJson from '../../assets/solana/idl/deposit.json';\nimport distributionJson from '../../assets/solana/idl/distribution.json';\nimport liqSolTokenJson from '../../assets/solana/idl/liq_sol_token.json';\nimport stakeControllerJson from '../../assets/solana/idl/stake_controller.json';\nimport stakeRegistryJson from '../../assets/solana/idl/stake_registry.json';\nimport treasuryJson from '../../assets/solana/idl/treasury.json';\nimport validatorLeaderboardJson from '../../assets/solana/idl/validator_leaderboard.json';\nimport validatorRegistryJson from '../../assets/solana/idl/validator_registry.json';\nimport yieldOracleJson from '../../assets/solana/idl/yield_oracle.json';\n\n// 2) import their companion TS types\nimport type { Deposit } from '../../assets/solana/types/deposit';\nimport type { Distribution } from '../../assets/solana/types/distribution';\nimport type { LiqSolToken } from '../../assets/solana/types/liq_sol_token';\nimport type { StakeController } from '../../assets/solana/types/stake_controller';\nimport type { StakeRegistry } from '../../assets/solana/types/stake_registry';\nimport type { Treasury } from '../../assets/solana/types/treasury';\nimport type { ValidatorLeaderboard } from '../../assets/solana/types/validator_leaderboard';\nimport type { ValidatorRegistry } from '../../assets/solana/types/validator_registry';\nimport type { YieldOracle } from '../../assets/solana/types/yield_oracle';\n\ntype IdlEntry<IDL> = {\n idl: IDL & { address: string };\n address: PublicKey;\n};\n\nexport const PROGRAM_IDLS = {\n deposit: {\n idl: depositJson,\n address: new PublicKey(depositJson.address),\n } as IdlEntry<Deposit>,\n\n distribution: {\n idl: distributionJson,\n address: new PublicKey(distributionJson.address),\n } as IdlEntry<Distribution>,\n\n liqSolToken: {\n idl: liqSolTokenJson,\n address: new PublicKey(liqSolTokenJson.address),\n } as IdlEntry<LiqSolToken>,\n\n stakeController: {\n idl: stakeControllerJson,\n address: new PublicKey(stakeControllerJson.address),\n } as IdlEntry<StakeController>,\n\n stakeRegistry: {\n idl: stakeRegistryJson,\n address: new PublicKey(stakeRegistryJson.address),\n } as IdlEntry<StakeRegistry>,\n\n treasury: {\n idl: treasuryJson,\n address: new PublicKey(treasuryJson.address),\n } as IdlEntry<Treasury>,\n\n validatorLeaderboard: {\n idl: validatorLeaderboardJson,\n address: new PublicKey(validatorLeaderboardJson.address),\n } as IdlEntry<ValidatorLeaderboard>,\n\n validatorRegistry: {\n idl: validatorRegistryJson,\n address: new PublicKey(validatorRegistryJson.address),\n } as IdlEntry<ValidatorRegistry>,\n\n yieldOracle: {\n idl: yieldOracleJson,\n address: new PublicKey(yieldOracleJson.address),\n } as IdlEntry<YieldOracle>,\n};\n\n/**\n * Factory for Anchor Program clients.\n *\n * Anchor v0.28+ reads the program ID from `idl.address`, so\n * we call the 2-arg constructor: `new Program(idl, provider)`.\n */\nexport class SolanaProgramService {\n constructor(private provider: AnchorProvider) { }\n\n /**\n * Returns a typed Anchor Program instance for the given key.\n */\n getProgram<K extends keyof typeof PROGRAM_IDLS>(\n name: K\n ): Program<(typeof PROGRAM_IDLS)[K]['idl']> {\n const entry = PROGRAM_IDLS[name];\n // stamp the correct address into a fresh copy of the IDL\n const idlWithAddr = { ...entry.idl, address: entry.address.toString() };\n // use the two-arg signature: (idl, provider)\n return new Program(idlWithAddr as any, this.provider) as Program<\n (typeof PROGRAM_IDLS)[K]['idl']\n >;\n }\n\n /** List all program keys */\n listProgramNames(): Array<keyof typeof PROGRAM_IDLS> {\n return Object.keys(PROGRAM_IDLS) as Array<keyof typeof PROGRAM_IDLS>;\n }\n\n /** Raw PublicKey of a program */\n getProgramId(name: keyof typeof PROGRAM_IDLS): PublicKey {\n return PROGRAM_IDLS[name].address;\n }\n}","import { AnchorProvider } from '@coral-xyz/anchor';\nimport { BN } from '@coral-xyz/anchor';\nimport {\n PublicKey,\n Transaction,\n SystemProgram,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n SYSVAR_CLOCK_PUBKEY,\n SYSVAR_RENT_PUBKEY,\n SYSVAR_STAKE_HISTORY_PUBKEY,\n StakeProgram,\n ComputeBudgetProgram,\n VersionedTransaction,\n Signer,\n TransactionSignature,\n} from '@solana/web3.js';\nimport {\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n} from '@solana/spl-token';\n\nimport {\n deriveDepositAuthorityPDA,\n deriveLiqsolMintAuthorityPDA,\n deriveStakeControllerVaultPDA,\n deriveStakeControllerReservePoolPDA,\n deriveStakeControllerStatePDA,\n deriveDistributionStatePDA,\n deriveUserRecordPDA,\n getUserLiqsolATA,\n} from '../utils';\nimport {\n LIQSOL_MINT_ADDRESS,\n TREASURY_WALLET_PDA,\n STAKE_CONTROLLER_PROGRAM_ID,\n LIQSOL_TOKEN_PROGRAM_ID,\n YIELD_ORACLE_PROGRAM_ID,\n DISTRIBUTION_PROGRAM_ID,\n MIN_SOL_TO_PARTICIPATE,\n} from '../constants';\nimport { SolanaProgramService } from '../program';\n\n/**\n * DepositClient provides methods for building, simulating, and sending deposit transactions\n * to the Solana blockchain using the Anchor framework. It handles the creation of ephemeral\n * stake accounts, derives necessary PDAs and ATAs, and manages transaction construction\n * with compute budget adjustments. This client is designed to facilitate deposits into\n * the Liqsol staking protocol, ensuring all required accounts and instructions are included.\n *\n * @remarks\n * - Uses AnchorProvider for network interactions.\n * - Enforces minimum deposit requirements.\n * - Supports dry-run simulation for transaction debugging.\n * - Provides high-level helper for building and sending deposit transactions.\n */\nexport class DepositClient {\n private program = new SolanaProgramService(this.provider);\n\n constructor(private provider: AnchorProvider) { }\n\n /** Minimum lamports (1 SOL) */\n static readonly MIN_DEPOSIT = MIN_SOL_TO_PARTICIPATE;\n\n /**\n * Build the deposit transaction (compute-budget bump + deposit Ix).\n * Returns both the Transaction and the ephemeral stake account Pubkey.\n */\n async buildDepositTx(\n user: PublicKey,\n amount: number\n ): Promise<{ transaction: Transaction; ephemeralStakePubkey: PublicKey }> {\n if (amount < MIN_SOL_TO_PARTICIPATE) {\n throw new Error(\n `Minimum deposit is ${MIN_SOL_TO_PARTICIPATE / 1e9} SOL`\n );\n }\n\n // 1) grab your typed Anchor program\n const program = this.program.getProgram('deposit');\n\n // 2) PDAs & ATAs\n const userAta = getUserLiqsolATA(user);\n const [depositAuthPDA] = deriveDepositAuthorityPDA();\n const [mintAuthPDA] = deriveLiqsolMintAuthorityPDA();\n const [vaultPDA] = deriveStakeControllerVaultPDA();\n const [reservePoolPDA] = deriveStakeControllerReservePoolPDA();\n const [controllerStatePDA] = deriveStakeControllerStatePDA();\n const [distStatePDA] = deriveDistributionStatePDA();\n const [userRecordPDA] = deriveUserRecordPDA(user);\n\n // 3) ephemeral stake account\n const seed = Math.floor(Math.random() * 0xffffffff);\n const ephemeralSeed = `ephemeral_${seed}`;\n const ephemeralStakePubkey = await PublicKey.createWithSeed(\n user,\n ephemeralSeed,\n StakeProgram.programId\n );\n\n // 4) build deposit instruction\n const depositIx = await program.methods\n .deposit(new BN(amount), seed)\n .accounts({\n user,\n programAuthority: depositAuthPDA,\n treasuryWallet: TREASURY_WALLET_PDA,\n systemProgram: SystemProgram.programId,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n stakeControllerProgram: STAKE_CONTROLLER_PROGRAM_ID,\n liqsolProgram: LIQSOL_TOKEN_PROGRAM_ID,\n yieldOracleProgram: YIELD_ORACLE_PROGRAM_ID,\n stakeProgram: StakeProgram.programId,\n distributionProgram: DISTRIBUTION_PROGRAM_ID,\n liqsolMint: LIQSOL_MINT_ADDRESS,\n userAta,\n liqsolMintAuthority: mintAuthPDA,\n reservePool: reservePoolPDA,\n vault: vaultPDA,\n ephemeralStake: ephemeralStakePubkey,\n controllerState: controllerStatePDA,\n userRecord: userRecordPDA,\n distributionState: distStatePDA,\n instructionsSysvar: SYSVAR_INSTRUCTIONS_PUBKEY,\n clock: SYSVAR_CLOCK_PUBKEY,\n stakeHistory: SYSVAR_STAKE_HISTORY_PUBKEY,\n rent: SYSVAR_RENT_PUBKEY,\n } as any)\n .instruction();\n\n // 5) prepend compute-budget bump\n const computeIx = ComputeBudgetProgram.setComputeUnitLimit({\n units: 400_000,\n });\n\n const tx = new Transaction().add(computeIx, depositIx);\n return { transaction: tx, ephemeralStakePubkey };\n }\n\n /**\n * Simulate (dry-run) a built transaction.\n * Returns any error plus the total compute-units consumed.\n */\n async simulate(\n tx: Transaction\n ): Promise<{ err: any; unitsConsumed: number }> {\n tx.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n\n const versioned = new VersionedTransaction(tx.compileMessage());\n const sim = await this.provider.connection.simulateTransaction(\n versioned,\n { sigVerify: false }\n );\n return { err: sim.value.err, unitsConsumed: sim.value.unitsConsumed! };\n }\n\n /**\n * High-level “build & send” helper.\n * Returns the confirmed signature.\n */\n async deposit(\n user: PublicKey,\n amount: number,\n signers: Signer[] = []\n ): Promise<TransactionSignature> {\n const { transaction } = await this.buildDepositTx(user, amount);\n\n // set feePayer & recent blockhash\n transaction.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n transaction.recentBlockhash = blockhash;\n\n // send + confirm\n return this.provider.sendAndConfirm(transaction, signers);\n }\n}","// src/solana/clients/DistributionClient.ts\nimport { AnchorProvider, Program, BN, web3 } from '@coral-xyz/anchor';\nimport {\n PublicKey,\n Transaction,\n TransactionInstruction,\n SystemProgram,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from '@solana/spl-token';\nimport {\n DISTRIBUTION_PROGRAM_ID,\n STAKE_CONTROLLER_PROGRAM_ID,\n DistributionIDL,\n Distribution,\n YIELD_ORACLE_PROGRAM_ID,\n LIQSOL_TOKEN_PROGRAM_ID,\n} from '../constants';\nimport {\n deriveDistributionStatePDA,\n deriveUserRecordPDA,\n deriveLiqsolMintAuthorityPDA,\n} from '../utils';\n\nexport class DistributionClient {\n constructor(private provider: AnchorProvider) { }\n\n /** Wrapped Anchor Program for Distribution */\n private get program(): Program<Distribution> {\n const idlWithAddress = {\n ...JSON.parse(JSON.stringify(DistributionIDL)),\n address: DISTRIBUTION_PROGRAM_ID.toString(),\n };\n return new Program(idlWithAddress as any, this.provider) as Program<Distribution>;\n }\n\n /** Derive the PDA for global distribution state */\n deriveStatePDA(): PublicKey {\n return deriveDistributionStatePDA()[0];\n }\n\n /** Derive the PDA for a user’s record */\n deriveUserRecordPDA(user: PublicKey): PublicKey {\n return deriveUserRecordPDA(user)[0];\n }\n\n /** Fetch on-chain distribution state */\n async getState(): Promise<any> {\n return this.program.account.distributionState.fetch(this.deriveStatePDA());\n }\n\n /** Fetch a user’s record or return null if it doesn’t exist */\n async getUserRecord(user: PublicKey): Promise<any | null> {\n try {\n return await this.program.account.userRecord.fetch(\n this.deriveUserRecordPDA(user)\n );\n } catch {\n return null;\n }\n }\n\n /** Build an `initialize` transaction for the distribution program */\n async buildInitializeTransaction(user: PublicKey): Promise<Transaction> {\n const [statePda] = deriveDistributionStatePDA();\n const ix = await this.program.methods\n .initialize()\n .accounts({\n authority: user,\n distributionState: statePda,\n systemProgram: SystemProgram.programId,\n rent: web3.SYSVAR_RENT_PUBKEY,\n } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /** Build an `updateUser` transaction (register or refresh a user record) */\n async buildUpdateUserTransaction(user: PublicKey): Promise<Transaction> {\n const statePda = this.deriveStatePDA();\n const userPda = this.deriveUserRecordPDA(user);\n\n // Fetch state to get the liqSOL mint address\n const state: any = await this.getState();\n const liqsolMint: PublicKey = state.liqsolMint;\n const userAta = getAssociatedTokenAddressSync(\n liqsolMint,\n user,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n const [stakeControllerStatePda] = PublicKey.findProgramAddressSync(\n [Buffer.from('stake_controller')],\n STAKE_CONTROLLER_PROGRAM_ID\n );\n\n const ix = await this.program.methods\n .updateUser()\n .accounts({\n user,\n userAta,\n userRecord: userPda,\n authority: user,\n payer: user,\n distributionState: statePda,\n stakeControllerState: stakeControllerStatePda,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n yieldOracleProgram: YIELD_ORACLE_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /** Build a `withdraw` transaction */\n async buildWithdrawTransaction(user: PublicKey, amount: number): Promise<Transaction> {\n const statePda = this.deriveStatePDA();\n const userPda = this.deriveUserRecordPDA(user);\n\n // Fetch state for the mint\n const state: any = await this.getState();\n const liqsolMint: PublicKey = state.liqsolMint;\n const userAta = getAssociatedTokenAddressSync(\n liqsolMint,\n user,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n const [stakeControllerStatePda] = PublicKey.findProgramAddressSync(\n [Buffer.from('stake_controller')],\n STAKE_CONTROLLER_PROGRAM_ID\n );\n const [controllerAuthPda] = PublicKey.findProgramAddressSync(\n [Buffer.from('stake_authority')],\n STAKE_CONTROLLER_PROGRAM_ID\n );\n\n const ix = await this.program.methods\n .withdraw(new BN(amount))\n .accounts({\n user,\n userAta,\n userRecord: userPda,\n distributionState: statePda,\n liqsolMint,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n stakeControllerProgram: STAKE_CONTROLLER_PROGRAM_ID,\n stakeControllerState: stakeControllerStatePda,\n controllerAuthority: controllerAuthPda,\n yieldOracleProgram: YIELD_ORACLE_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /** Build a `claimRewards` transaction */\n async buildClaimRewardsTransaction(user: PublicKey): Promise<Transaction> {\n const statePda = this.deriveStatePDA();\n const userPda = this.deriveUserRecordPDA(user);\n\n // Fetch state for the mint\n const state: any = await this.getState();\n const liqsolMint: PublicKey = state.liqsolMint;\n const userAta = getAssociatedTokenAddressSync(\n liqsolMint,\n user,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n const [mintAuthPda] = deriveLiqsolMintAuthorityPDA();\n\n const ix = await this.program.methods\n .claimRewards()\n .accounts({\n user,\n userAta,\n userRecord: userPda,\n distributionState: statePda,\n liqsolMint,\n liqsolProgram: LIQSOL_TOKEN_PROGRAM_ID,\n liqsolMintAuthority: mintAuthPda,\n instructionsSysvar: web3.SYSVAR_INSTRUCTIONS_PUBKEY,\n yieldOracleProgram: YIELD_ORACLE_PROGRAM_ID,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /** Send & confirm a single-IX transaction; returns the tx signature */\n async sendTransaction(\n tx: Transaction,\n signers: import('@solana/web3.js').Signer[] = []\n ): Promise<string> {\n tx.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n return this.provider.sendAndConfirm(tx, signers);\n }\n\n /** Simulate a single-IX transaction; returns error (if any) + compute units used */\n async simulateTransaction(\n tx: Transaction\n ): Promise<{ err: any; unitsConsumed: number }> {\n tx.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n const versioned = new VersionedTransaction(tx.compileMessage());\n const sim = await this.provider.connection.simulateTransaction(versioned, {\n sigVerify: false,\n });\n return { err: sim.value.err, unitsConsumed: sim.value.unitsConsumed! };\n }\n}","// src/solana/clients/ValidatorLeaderboardClient.ts\nimport { AnchorProvider, Program, BN } from '@coral-xyz/anchor';\nimport { PublicKey, Transaction, TransactionInstruction, SystemProgram, VersionedTransaction } from '@solana/web3.js';\nimport {\n deriveLeaderboardHeadPDA,\n deriveValidatorRecordPDA,\n deriveTop10CachePDA,\n} from '../utils';\nimport { VALIDATOR_LEADERBOARD_PROGRAM_ID, ValidatorLeaderboard, ValidatorLeaderboardIDL } from '../constants';\n\nexport class ValidatorLeaderboardClient {\n constructor(private provider: AnchorProvider) { }\n\n /**\n * Wrapped Anchor Program for ValidatorLeaderboard\n */\n private get program(): Program<ValidatorLeaderboard> {\n const idlWithAddress = {\n ...JSON.parse(JSON.stringify(ValidatorLeaderboardIDL)),\n address: VALIDATOR_LEADERBOARD_PROGRAM_ID.toString(),\n };\n return new Program(idlWithAddress as any, this.provider) as Program<ValidatorLeaderboard>;\n }\n\n /** Derive the PDA for the leaderboard head */\n deriveHeadPDA(): PublicKey {\n return deriveLeaderboardHeadPDA()[0];\n }\n\n /** Derive the PDA for a given validator record */\n deriveRecordPDA(voteAccount: PublicKey): PublicKey {\n return deriveValidatorRecordPDA(voteAccount)[0];\n }\n\n /**\n * Build the initialize instruction as a Transaction\n */\n async buildInitializeTransaction(authority: PublicKey): Promise<Transaction> {\n const [headPda] = deriveLeaderboardHeadPDA();\n const ix = await this.program.methods\n .initialize()\n .accounts({\n authority,\n leaderboardHead: headPda,\n systemProgram: SystemProgram.programId,\n } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /**\n * Build an updateValidator transaction\n */\n async buildUpdateValidatorTransaction(params: {\n authority: PublicKey;\n registrant: PublicKey;\n voteAccount: PublicKey;\n vpp: number;\n insertAfter?: PublicKey;\n insertBefore?: PublicKey;\n currentPrev?: PublicKey;\n currentNext?: PublicKey;\n }): Promise<Transaction> {\n const { authority, registrant, voteAccount, vpp, insertAfter, insertBefore, currentPrev, currentNext } = params;\n const [headPda] = deriveLeaderboardHeadPDA();\n const [recPda] = deriveValidatorRecordPDA(voteAccount);\n\n const accounts: any = {\n registrant,\n voteAccount,\n validatorRecord: recPda,\n leaderboardHead: headPda,\n systemProgram: SystemProgram.programId,\n ...(insertAfter && { insertAfter }),\n ...(insertBefore && { insertBefore }),\n ...(currentPrev && { currentPrev }),\n ...(currentNext && { currentNext }),\n };\n\n const ix = await this.program.methods\n .updateValidator(new BN(vpp))\n .accounts(accounts)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /**\n * Build an updateTop10Cache transaction\n */\n async buildUpdateTop10CacheTransaction(params: {\n authority: PublicKey;\n top10Validators: PublicKey[];\n }): Promise<Transaction> {\n const { authority, top10Validators } = params;\n if (top10Validators.length !== 10) {\n throw new Error('Must supply exactly 10 validators');\n }\n const [cachePda] = deriveTop10CachePDA();\n const ix = await this.program.methods\n .updateTop10Cache(top10Validators)\n .accounts({ authority, cache: cachePda, systemProgram: SystemProgram.programId } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /**\n * Fetch the cached top 10 validators via a view call\n */\n async getCachedTop10(): Promise<PublicKey[]> {\n const [cachePda] = deriveTop10CachePDA();\n return this.program.methods\n .getCachedTop10()\n .accounts({ cache: cachePda } as any)\n .view();\n }\n\n /**\n * Traverse the on-chain linked list and return the sequence of PublicKeys\n */\n async getLeaderboard(): Promise<PublicKey[]> {\n const [headPda] = deriveLeaderboardHeadPDA();\n let headAccount;\n try {\n headAccount = await this.program.account.leaderboardHead.fetch(headPda);\n } catch {\n return [];\n }\n const result: PublicKey[] = [];\n let cursor: PublicKey = headAccount.nextValidator;\n while (cursor && !cursor.equals(PublicKey.default)) {\n result.push(cursor);\n const rec = await this.program.account.validatorRecord.fetch(cursor);\n cursor = rec.nextValidator;\n }\n return result;\n }\n\n /**\n * Fetch a single validator record or null\n */\n async getRecord(voteAccount: PublicKey): Promise<any | null> {\n const [recPda] = deriveValidatorRecordPDA(voteAccount);\n try {\n return await this.program.account.validatorRecord.fetch(recPda);\n } catch {\n return null;\n }\n }\n\n /**\n * Send & confirm a single-IX Transaction; returns the signature\n */\n async sendTransaction(\n tx: Transaction,\n signers: import('@solana/web3.js').Signer[] = []\n ): Promise<string> {\n tx.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n return this.provider.sendAndConfirm(tx, signers);\n }\n\n /**\n * Simulate a single-IX Transaction; returns any err + compute units consumed\n */\n async simulateTransaction(\n tx: Transaction\n ): Promise<{ err: any; unitsConsumed: number }> {\n tx.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n const versioned = new VersionedTransaction(tx.compileMessage());\n const sim = await this.provider.connection.simulateTransaction(versioned, { sigVerify: false });\n return { err: sim.value.err, unitsConsumed: sim.value.unitsConsumed! };\n }\n}\n","import {\n Connection,\n PublicKey as SolPubKey,\n Transaction,\n VersionedTransaction,\n TransactionSignature,\n Commitment,\n} from '@solana/web3.js';\nimport { AnchorProvider } from '@coral-xyz/anchor';\nimport { BaseSignerWalletAdapter } from '@solana/wallet-adapter-base';\nimport { IStakingClient, SolanaTransaction, StakerConfig } from '../../staker/types';\nimport { KeyType, PublicKey } from '@wireio/core';\nimport { DepositClient } from './clients/deposit.client';\nimport { DistributionClient } from './clients/distribution.client';\nimport { ValidatorLeaderboardClient } from './clients/leaderboard.client';\n\nconst commitment: Commitment = 'confirmed';\n\nexport class SolanaStakingClient implements IStakingClient {\n public pubKey: PublicKey;\n \n private connection: Connection;\n private anchorProvider: AnchorProvider;\n\n private depositClient: DepositClient;\n private distributionClient: DistributionClient;\n private leaderboardClient: ValidatorLeaderboardClient;\n\n constructor(private config: StakerConfig) {\n // 1) unwrap & validate wallet adapter\n const adapter = config.provider as BaseSignerWalletAdapter;\n if (!adapter.publicKey) {\n throw new Error('Solana wallet adapter not connected');\n }\n\n // 2) sanity‐check wire ↔ solana pubkey\n const solPub = adapter.publicKey;\n const wirePub = new PublicKey(KeyType.ED, solPub.toBytes());\n if (!wirePub.equals(config.pubKey)) {\n throw new Error('Passed-in pubKey doesn’t match adapter.publicKey');\n }\n \n this.pubKey = wirePub;\n this.connection = new Connection(config.network.rpcUrls[0], commitment);\n\n const anchorWallet = {\n publicKey: solPub,\n async signTransaction<T extends SolanaTransaction>(tx: T): Promise<T> {\n return adapter.signTransaction(tx);\n },\n async signAllTransactions<T extends SolanaTransaction>(txs: T[]): Promise<T[]> {\n return Promise.all(txs.map((tx) => adapter.signTransaction(tx)));\n },\n };\n\n this.anchorProvider = new AnchorProvider(\n this.connection,\n anchorWallet,\n { commitment }\n );\n\n // 4) staking clients\n this.depositClient = new DepositClient(this.anchorProvider);\n this.distributionClient = new DistributionClient(this.anchorProvider);\n this.leaderboardClient = new ValidatorLeaderboardClient(this.anchorProvider);\n }\n\n async deposit(amount: number): Promise<string> {\n const tx = await this.depositClient.buildDepositTx(\n new SolPubKey(this.pubKey.data.array),\n amount,\n );\n const signed = await this.signTransaction(tx.transaction);\n return this.sendTransaction(signed);\n }\n\n async signTransaction(tx: SolanaTransaction): Promise<SolanaTransaction> {\n return await this.anchorProvider.wallet.signTransaction(tx);\n }\n\n async sendTransaction(signed: SolanaTransaction): Promise<TransactionSignature> {\n return await this.anchorProvider.sendAndConfirm(signed);\n }\n}","// src/staker/staker.ts\n\nimport { ChainID, Curve, EvmChainID, SolChainID } from '@wireio/core';\nimport { IStakingClient, StakerConfig } from './types';\nimport { SolanaStakingClient } from '../networks/solana/solana';\nimport { EthereumStakingClient } from '../networks/ethereum/ethereum';\n\nexport class Staker {\n private clients: Map<ChainID, IStakingClient> = new Map();\n\n constructor(config: StakerConfig | StakerConfig[]) {\n if (!Array.isArray(config)) config = [config];\n\n config.forEach((cfg) => {\n switch (cfg.network.chainId) {\n case SolChainID.Testnet:\n this.clients.set(SolChainID.Testnet, new SolanaStakingClient(cfg));\n break;\n\n // case EvmChainID.Sepolia:\n // this.clients.set(EvmChainID.Sepolia, new EthereumStakingClient(cfg));\n // break;\n default:\n throw new Error(`Unsupported network curve: ${cfg.network.name}`);\n\n }\n });\n }\n\n deposit(amount: number): Promise<string> {\n if (!this.clients.has(SolChainID.Testnet)) {\n throw new Error('Staker not initialized for Solana Testnet');\n }\n return this.clients.get(SolChainID.Testnet)!.deposit(amount);\n }\n\n // …withdraw, claimRewards, etc…\n}","/**\n * @module EthereumContractService\n * \n * Provides a unified service for interacting with Ethereum smart contracts using ethers.js.\n * \n * This module includes:\n * - ABI imports for ERC20, ERC721, and ERC1155 token standards.\n * - Address book and contract configuration types.\n * - A service class for managing contract instances, interfaces, and utility methods for read/write access.\n * - Utility for decoding custom errors and events using a combined interface of all known ABIs.\n * \n * @remarks\n * - Update the `ADDRESSES` and `CONTRACTS` objects to match your deployment.\n * - The service supports both read-only and write-enabled contract handles, depending on the presence of a signer.\n * - The `omniInterface` property allows decoding of errors and events across all included ABIs.\n * \n * @example\n * ```typescript\n * const service = new EthereumContractService({ provider, signer });\n * const stakeContract = service.getContract('Stake');\n * const address = service.getAddress('Stake');\n * ```\n */\n\nimport ERC20Artifact from '../../assets/ethereum/ABI/token/ERC20Token.sol/ERC20Token.json';\nimport ERC721Artifact from '../../assets/ethereum/ABI/token/ERC721Token.sol/ERC721Token.json';\nimport ERC1155Artifact from '../../assets/ethereum/ABI/token/ERC1155Token.sol/ERC1155Token.json';\nimport { AddressBook, ContractName } from './types';\nimport { Contract, ethers, providers, Signer } from 'ethers';\nimport { JsonFragment } from '@ethersproject/abi';\nimport { ErrorDescription } from '@ethersproject/abi/lib/interface';\n\nexport const ERC20Abi = ERC20Artifact.abi;\nexport const ERC721Abi = ERC721Artifact.abi;\nexport const ERC1155Abi = ERC1155Artifact.abi;\n\n// Update this to be your staking contract address book\nexport const ADDRESSES: AddressBook = {\n Stake: '0xEeaCBa95852324eAc63fE2711aFe0283adf3bC93',\n};\n\nexport type Contracts<T extends string = ContractName> = Record<T, ContractConfig>;\n\nexport type ContractConfig = {\n address: string;\n abi: JsonFragment[];\n}\n\nexport const CONTRACTS: Contracts<ContractName> = {\n Stake: { address: ADDRESSES.Stake, abi: undefined as any }, // Replace with actual ABI artifact when available\n // Stake: { address: ADDRESSES.Stake, abi: Stake.abi },\n}\n\nexport interface ContractOptions {\n /** RPC endpoint or injected EIP-1193 provider */\n provider?: ethers.providers.Provider;\n /** Only required if you need to send txns */\n signer?: Signer;\n}\n\n\nexport class EthereumContractService {\n private provider?: providers.Provider;\n private signer?: Signer;\n\n public readonly contract: { [N in ContractName]: ethers.Contract } = {} as any;\n public readonly iface: { [N in ContractName]: ethers.utils.Interface } = {} as any;\n\n constructor(opts: ContractOptions) {\n this.provider = opts.provider;\n this.signer = opts.signer;\n\n (Object.keys(CONTRACTS) as ContractName[]).forEach((name) => {\n const { address, abi } = CONTRACTS[name];\n this.iface[name] = new ethers.utils.Interface(abi);\n this.contract[name] = new ethers.Contract(address, abi, this.signer ?? this.provider);\n });\n }\n\n /** Get raw address for a contract */\n public getAddress(name: ContractName): string {\n return CONTRACTS[name].address;\n }\n\n /** Utility: get a read-only handle even if signer is present */\n getReadOnly(name: ContractName): Contract {\n const { address, abi } = CONTRACTS[name];\n return new Contract(address, abi, this.provider);\n }\n\n /** Utility: get a write-enabled handle (throws if no signer) */\n getWrite(name: ContractName): Contract {\n if (!this.signer) throw new Error('No signer available for write calls');\n const { address, abi } = CONTRACTS[name];\n return new Contract(address, abi, this.signer);\n }\n\n /** Expose network info */\n async getNetwork() {\n return this.provider?.getNetwork();\n }\n\n /** List all known contract names */\n public listContractNames(): ContractName[] {\n return Object.keys(CONTRACTS) as ContractName[];\n }\n\n /** Get Interface instance for a contract */\n public getInterface(name: ContractName): ethers.utils.Interface {\n const iface = this.iface[name];\n if (!iface) throw new Error(`Interface not initialized for ${name}`);\n return iface;\n }\n\n /** Get live Contract instance */\n public getContract(name: ContractName): ethers.Contract {\n const ctr = this.contract[name];\n if (!ctr) throw new Error(`Contract not initialized for ${name}`);\n return ctr;\n }\n\n /** A unified Interface containing all ABIs (addresses + extra decoding-only)\n * to parse custom errors or events. */\n public get omniInterface(): ethers.utils.Interface {\n const all: any[] = [];\n\n // Add all artifacts to the interface\n const allArtifacts = [\n ERC20Artifact,\n ERC721Artifact,\n ERC1155Artifact,\n // Add more artifacts as needed\n ];\n\n // Add all ABIs to the omnibus interface\n allArtifacts.forEach(artifact => {\n if (artifact && artifact.abi) {\n all.push(...artifact.abi);\n }\n });\n\n // dedupe\n const seen = new Set<string>();\n const dedup: any[] = [];\n for (const item of all) {\n try {\n const frag = ethers.utils.Fragment.from(item);\n const key = `${frag.type}:${frag.format(ethers.utils.FormatTypes.full)}`.toLowerCase();\n if (!seen.has(key)) {\n seen.add(key);\n dedup.push(item);\n }\n } catch { }\n }\n\n return new ethers.utils.Interface(dedup);\n }\n\n /** Decode a revert or custom error payload */\n public parseError(revertData: string): ErrorDescription {\n try {\n return this.omniInterface.parseError(revertData);\n } catch {\n throw new Error(`Unable to parse error data: ${revertData}`);\n }\n }\n}","// src/networks/ethereum/ethereum.ts\n\nimport { ethers } from 'ethers';\nimport { IStakingClient, StakerConfig } from '../../staker/types';\nimport { PublicKey as WirePubKey } from '@wireio/core';\nimport { ERC20Abi } from './contract'; // TODO replace with staking contract ABI\nimport axios from 'axios';\n\n// — replace with your actual staking contract ABI & address —\nconst STAKING_CONTRACT_ADDRESS = '0xYourStakingContractAddress';\n\nexport class EthereumStakingClient implements IStakingClient {\n public readonly pubKey: WirePubKey;\n private readonly provider: ethers.providers.Web3Provider;\n private readonly signer: ethers.Signer;\n private readonly contract: ethers.Contract;\n\n constructor(private config: StakerConfig) {\n // 1) unwrap & validate Ethers provider\n if (!ethers.providers.Web3Provider.isProvider(config.provider as any)) {\n throw new Error('Expected a Web3Provider for Ethereum');\n }\n this.provider = config.provider as ethers.providers.Web3Provider;\n\n // 2) signer\n this.signer = this.provider.getSigner();\n this.pubKey = config.pubKey as WirePubKey;\n\n // 4) instantiate your contract wrapper\n this.contract = new ethers.Contract(\n STAKING_CONTRACT_ADDRESS,\n ERC20Abi,\n this.signer\n );\n }\n\n /** Submit a deposit; returns the transaction hash */\n async deposit(amount: number): Promise<string> {\n // build & send in one go\n const txResponse = await this.contract.deposit(\n ethers.BigNumber.from(amount),\n {\n // if your contract needs ETH value:\n // value: ethers.BigNumber.from(amount),\n }\n );\n\n // wait for on-chain confirmation (optional)\n await txResponse.wait();\n return txResponse.hash;\n }\n\n /** (Optional) dry-run via eth_call */\n async simulateDeposit(amount: number): Promise<any> {\n return this.provider.call({\n to: STAKING_CONTRACT_ADDRESS,\n data: this.contract.interface.encodeFunctionData('deposit', [\n ethers.BigNumber.from(amount)\n ]),\n });\n }\n\n // TODO: implement withdraw, claimRewards, etc.\n}","export const CONTRACT_NAMES = [\n 'Stake',\n] as const;\n\nexport type ContractName = typeof CONTRACT_NAMES[number];\nexport type AddressBook = Record<ContractName, string>;"],"names":["PublicKey","DepositIDL","LiqSolTokenIDL","StakeControllerIDL","StakeRegistryIDL","TreasuryIDL","ValidatorRegistryIDL","YieldOracleIDL","__spreadProps","Program","getAssociatedTokenAddressSync","TOKEN_2022_PROGRAM_ID","ASSOCIATED_TOKEN_PROGRAM_ID","distributionJson","validatorLeaderboardJson","__async","StakeProgram","BN","SystemProgram","SYSVAR_INSTRUCTIONS_PUBKEY","SYSVAR_CLOCK_PUBKEY","SYSVAR_STAKE_HISTORY_PUBKEY","SYSVAR_RENT_PUBKEY","ComputeBudgetProgram","Transaction","VersionedTransaction","web3","KeyType","Connection","AnchorProvider","SolPubKey","SolChainID","ethers","Contract"],"mappings":";;;;;;;;AAMa,MAAA,EAAA,GAAK,CAAC,IAAyB,KAAA;AACxC,EAAA,OAAO,UAAU,IAAI,CAAA,CAAA,CAAA,CAAA;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
1
|
+
{"version":3,"file":"stake.js","sources":["../src/utils.ts","../src/networks/solana/constants.ts","../src/networks/solana/utils.ts","../src/networks/solana/program.ts","../src/networks/solana/clients/deposit.client.ts","../src/networks/solana/clients/distribution.client.ts","../src/networks/solana/clients/leaderboard.client.ts","../src/networks/solana/solana.ts","../src/staker/staker.ts","../src/networks/ethereum/contract.ts","../src/networks/ethereum/ethereum.ts","../src/networks/ethereum/types.ts"],"sourcesContent":["/**\n * Static utility functions for working with Wire Network Staking Protocol.\n * \n * @module utils\n */\n\nexport const hi = (name: string): string => {\n return `Hello, ${name}!`;\n}","// src/networks/solana/constants.ts\n\nimport { PublicKey } from '@solana/web3.js';\nimport { TOKEN_2022_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID } from '@solana/spl-token';\n\n// — IDLs — (must match your filesystem: src/assets/solana/idl/*.json)\nimport DepositIDL from '../../assets/solana/idl/deposit.json';\nimport DistributionIDL from '../../assets/solana/idl/distribution.json';\nimport LiqSolTokenIDL from '../../assets/solana/idl/liq_sol_token.json';\nimport StakeControllerIDL from '../../assets/solana/idl/stake_controller.json';\nimport StakeRegistryIDL from '../../assets/solana/idl/stake_registry.json';\nimport TreasuryIDL from '../../assets/solana/idl/treasury.json';\nimport ValidatorLeaderboardIDL from '../../assets/solana/idl/validator_leaderboard.json';\nimport ValidatorRegistryIDL from '../../assets/solana/idl/validator_registry.json';\nimport YieldOracleIDL from '../../assets/solana/idl/yield_oracle.json';\n\n// — Types — for your clients\nimport type { Deposit } from '../../assets/solana/types/deposit';\nimport type { Distribution } from '../../assets/solana/types/distribution';\nimport type { ValidatorLeaderboard } from '../../assets/solana/types/validator_leaderboard';\nimport type { LiqSolToken } from '../../assets/solana/types/liq_sol_token';\nimport type { StakeController } from '../../assets/solana/types/stake_controller';\nimport type { StakeRegistry } from '../../assets/solana/types/stake_registry';\nimport type { Treasury } from '../../assets/solana/types/treasury';\nimport type { ValidatorRegistry } from '../../assets/solana/types/validator_registry';\nimport type { YieldOracle } from '../../assets/solana/types/yield_oracle';\n\n// Re-export for easy import elsewhere:\nexport {\n Deposit,\n DepositIDL,\n Distribution,\n DistributionIDL,\n LiqSolToken,\n LiqSolTokenIDL,\n StakeController,\n StakeControllerIDL,\n StakeRegistry,\n StakeRegistryIDL,\n Treasury,\n TreasuryIDL,\n ValidatorLeaderboard,\n ValidatorLeaderboardIDL,\n ValidatorRegistry,\n ValidatorRegistryIDL,\n YieldOracle,\n YieldOracleIDL,\n};\n\n// — Program IDs — anchor “address” fields inside each IDL must match these:\nexport const DEPOSIT_PROGRAM_ID = new PublicKey(DepositIDL.address);\nexport const DISTRIBUTION_PROGRAM_ID = new PublicKey(DistributionIDL.address);\nexport const LIQSOL_TOKEN_PROGRAM_ID = new PublicKey(LiqSolTokenIDL.address);\nexport const STAKE_CONTROLLER_PROGRAM_ID = new PublicKey(StakeControllerIDL.address);\nexport const STAKE_REGISTRY_PROGRAM_ID = new PublicKey(StakeRegistryIDL.address);\nexport const TREASURY_PROGRAM_ID = new PublicKey(TreasuryIDL.address);\nexport const VALIDATOR_LEADERBOARD_PROGRAM_ID = new PublicKey(ValidatorLeaderboardIDL.address);\nexport const VALIDATOR_REGISTRY_PROGRAM_ID = new PublicKey(ValidatorRegistryIDL.address);\nexport const YIELD_ORACLE_PROGRAM_ID = new PublicKey(YieldOracleIDL.address);\n\n// — Protocol constants — tweak as needed:\nexport const MIN_SOL_TO_PARTICIPATE = 1_000_000_000; // 1 SOL in lamports\nexport const MIN_FUNDS_THRESHOLD = 10_000_000_000; // 10 SOL in lamports\nexport const RESERVE_FOR_FEES = 1_000_000_000; // 1 SOL\n\n// — Pre-derived PDA seeds for your convenience — \n// (you can still use your utils.ts helpers instead)\nexport const TREASURY_WALLET_PDA = new PublicKey('9gLj1MRrm66GNYqnMLPGUzyYqYJpVLQgFSbtCQV9Ta4G');\nexport const LIQSOL_MINT_ADDRESS = new PublicKey('B2XtJABkc6eUoYUNgSfZVb3kYckmbh2zxp4rp2hX2Xwa');\nexport const STAKE_VAULT_PDA = new PublicKey('AY83EfU5LXJGDhbLeP45H3tLKisGZgSe2G4mGYfPimqN');\n\n// re-export SPL token constants:\nexport { TOKEN_2022_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID };","// src/solana/utils.ts\nimport { AnchorProvider, Program } from '@coral-xyz/anchor'\nimport { PublicKey } from '@solana/web3.js'\nimport { getAssociatedTokenAddressSync, TOKEN_2022_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID } from '@solana/spl-token'\nimport {\n DEPOSIT_PROGRAM_ID,\n DISTRIBUTION_PROGRAM_ID,\n STAKE_CONTROLLER_PROGRAM_ID,\n VALIDATOR_LEADERBOARD_PROGRAM_ID,\n LIQSOL_MINT_ADDRESS,\n DepositIDL,\n Deposit\n} from './constants'\n\n// -- Program factories ------------------------------------------------------\n/**\n * Create an Anchor Program client for the Deposit program\n */\nexport function getDepositProgram(provider: AnchorProvider): Program<Deposit> {\n // Ensure the IDL has the correct program address\n const idlWithAddress = {\n ...JSON.parse(JSON.stringify(DepositIDL)),\n address: DEPOSIT_PROGRAM_ID.toString(),\n }\n return new Program(idlWithAddress as any, provider) as Program<Deposit>\n}\n\n// (Other program factories can go here if needed)\n\n// -- PDA derivation helpers ------------------------------------------------\nexport function deriveDepositAuthorityPDA(\n programId: PublicKey = DEPOSIT_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('program_authority')],\n programId\n )\n}\n\nexport function deriveLiqsolMintAuthorityPDA(\n programId: PublicKey = LIQSOL_MINT_ADDRESS\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('mint_authority')],\n programId\n )\n}\n\nexport function deriveStakeControllerVaultPDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('vault')],\n STAKE_CONTROLLER_PROGRAM_ID\n )\n}\n\nexport function deriveStakeControllerReservePoolPDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('reserve_pool')],\n STAKE_CONTROLLER_PROGRAM_ID\n )\n}\n\nexport function deriveStakeControllerStatePDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('stake_controller')],\n STAKE_CONTROLLER_PROGRAM_ID\n )\n}\n\nexport function deriveDistributionStatePDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('distribution_state')],\n DISTRIBUTION_PROGRAM_ID\n )\n}\n\nexport function deriveUserRecordPDA(\n user: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('user_record'), user.toBuffer()],\n DISTRIBUTION_PROGRAM_ID\n )\n}\n\nexport function deriveLeaderboardHeadPDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('leaderboard_head')],\n VALIDATOR_LEADERBOARD_PROGRAM_ID\n )\n}\n\nexport function deriveValidatorRecordPDA(\n voteAccount: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('validator_record'), voteAccount.toBuffer()],\n VALIDATOR_LEADERBOARD_PROGRAM_ID\n )\n}\n\nexport function deriveTop10CachePDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('top_10_cache')],\n VALIDATOR_LEADERBOARD_PROGRAM_ID\n )\n}\n\n// -- SPL Token helper -------------------------------------------------------\nexport function getUserLiqsolATA(\n user: PublicKey\n): PublicKey {\n return getAssociatedTokenAddressSync(\n LIQSOL_MINT_ADDRESS,\n user,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n )\n}\n\n// seedToPID(seed: string): PublicKey ","// src/solana/programService.ts\n\nimport { AnchorProvider, Program } from '@coral-xyz/anchor';\nimport { PublicKey } from '@solana/web3.js';\n\n// 1) pull in all your on-chain IDLs (must match lowercase `src/assets/solana/idl`)\nimport depositJson from '../../assets/solana/idl/deposit.json';\nimport distributionJson from '../../assets/solana/idl/distribution.json';\nimport liqSolTokenJson from '../../assets/solana/idl/liq_sol_token.json';\nimport stakeControllerJson from '../../assets/solana/idl/stake_controller.json';\nimport stakeRegistryJson from '../../assets/solana/idl/stake_registry.json';\nimport treasuryJson from '../../assets/solana/idl/treasury.json';\nimport validatorLeaderboardJson from '../../assets/solana/idl/validator_leaderboard.json';\nimport validatorRegistryJson from '../../assets/solana/idl/validator_registry.json';\nimport yieldOracleJson from '../../assets/solana/idl/yield_oracle.json';\n\n// 2) import their companion TS types\nimport type { Deposit } from '../../assets/solana/types/deposit';\nimport type { Distribution } from '../../assets/solana/types/distribution';\nimport type { LiqSolToken } from '../../assets/solana/types/liq_sol_token';\nimport type { StakeController } from '../../assets/solana/types/stake_controller';\nimport type { StakeRegistry } from '../../assets/solana/types/stake_registry';\nimport type { Treasury } from '../../assets/solana/types/treasury';\nimport type { ValidatorLeaderboard } from '../../assets/solana/types/validator_leaderboard';\nimport type { ValidatorRegistry } from '../../assets/solana/types/validator_registry';\nimport type { YieldOracle } from '../../assets/solana/types/yield_oracle';\n\ntype IdlEntry<IDL> = {\n idl: IDL & { address: string };\n address: PublicKey;\n};\n\nexport const PROGRAM_IDLS = {\n deposit: {\n idl: depositJson,\n address: new PublicKey(depositJson.address),\n } as IdlEntry<Deposit>,\n\n distribution: {\n idl: distributionJson,\n address: new PublicKey(distributionJson.address),\n } as IdlEntry<Distribution>,\n\n liqSolToken: {\n idl: liqSolTokenJson,\n address: new PublicKey(liqSolTokenJson.address),\n } as IdlEntry<LiqSolToken>,\n\n stakeController: {\n idl: stakeControllerJson,\n address: new PublicKey(stakeControllerJson.address),\n } as IdlEntry<StakeController>,\n\n stakeRegistry: {\n idl: stakeRegistryJson,\n address: new PublicKey(stakeRegistryJson.address),\n } as IdlEntry<StakeRegistry>,\n\n treasury: {\n idl: treasuryJson,\n address: new PublicKey(treasuryJson.address),\n } as IdlEntry<Treasury>,\n\n validatorLeaderboard: {\n idl: validatorLeaderboardJson,\n address: new PublicKey(validatorLeaderboardJson.address),\n } as IdlEntry<ValidatorLeaderboard>,\n\n validatorRegistry: {\n idl: validatorRegistryJson,\n address: new PublicKey(validatorRegistryJson.address),\n } as IdlEntry<ValidatorRegistry>,\n\n yieldOracle: {\n idl: yieldOracleJson,\n address: new PublicKey(yieldOracleJson.address),\n } as IdlEntry<YieldOracle>,\n};\n\n/**\n * Factory for Anchor Program clients.\n *\n * Anchor v0.28+ reads the program ID from `idl.address`, so\n * we call the 2-arg constructor: `new Program(idl, provider)`.\n */\nexport class SolanaProgramService {\n constructor(private provider: AnchorProvider) { }\n\n /**\n * Returns a typed Anchor Program instance for the given key.\n */\n getProgram<K extends keyof typeof PROGRAM_IDLS>(\n name: K\n ): Program<(typeof PROGRAM_IDLS)[K]['idl']> {\n const entry = PROGRAM_IDLS[name];\n // stamp the correct address into a fresh copy of the IDL\n const idlWithAddr = { ...entry.idl, address: entry.address.toString() };\n // use the two-arg signature: (idl, provider)\n return new Program(idlWithAddr as any, this.provider) as Program<\n (typeof PROGRAM_IDLS)[K]['idl']\n >;\n }\n\n /** List all program keys */\n listProgramNames(): Array<keyof typeof PROGRAM_IDLS> {\n return Object.keys(PROGRAM_IDLS) as Array<keyof typeof PROGRAM_IDLS>;\n }\n\n /** Raw PublicKey of a program */\n getProgramId(name: keyof typeof PROGRAM_IDLS): PublicKey {\n return PROGRAM_IDLS[name].address;\n }\n}","import { AnchorProvider } from '@coral-xyz/anchor';\nimport { BN } from '@coral-xyz/anchor';\nimport {\n PublicKey,\n Transaction,\n SystemProgram,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n SYSVAR_CLOCK_PUBKEY,\n SYSVAR_RENT_PUBKEY,\n SYSVAR_STAKE_HISTORY_PUBKEY,\n StakeProgram,\n ComputeBudgetProgram,\n VersionedTransaction,\n Signer,\n TransactionSignature,\n} from '@solana/web3.js';\nimport {\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n} from '@solana/spl-token';\n\nimport {\n deriveDepositAuthorityPDA,\n deriveLiqsolMintAuthorityPDA,\n deriveStakeControllerVaultPDA,\n deriveStakeControllerReservePoolPDA,\n deriveStakeControllerStatePDA,\n deriveDistributionStatePDA,\n deriveUserRecordPDA,\n getUserLiqsolATA,\n} from '../utils';\nimport {\n LIQSOL_MINT_ADDRESS,\n TREASURY_WALLET_PDA,\n STAKE_CONTROLLER_PROGRAM_ID,\n LIQSOL_TOKEN_PROGRAM_ID,\n YIELD_ORACLE_PROGRAM_ID,\n DISTRIBUTION_PROGRAM_ID,\n MIN_SOL_TO_PARTICIPATE,\n} from '../constants';\nimport { SolanaProgramService } from '../program';\n\n/**\n * DepositClient provides methods for building, simulating, and sending deposit transactions\n * to the Solana blockchain using the Anchor framework. It handles the creation of ephemeral\n * stake accounts, derives necessary PDAs and ATAs, and manages transaction construction\n * with compute budget adjustments. This client is designed to facilitate deposits into\n * the Liqsol staking protocol, ensuring all required accounts and instructions are included.\n *\n * @remarks\n * - Uses AnchorProvider for network interactions.\n * - Enforces minimum deposit requirements.\n * - Supports dry-run simulation for transaction debugging.\n * - Provides high-level helper for building and sending deposit transactions.\n */\nexport class DepositClient {\n private program = new SolanaProgramService(this.provider);\n\n constructor(private provider: AnchorProvider) { }\n\n /** Minimum lamports (1 SOL) */\n static readonly MIN_DEPOSIT = MIN_SOL_TO_PARTICIPATE;\n\n /**\n * Build the deposit transaction (compute-budget bump + deposit Ix).\n * Returns both the Transaction and the ephemeral stake account Pubkey.\n */\n async buildDepositTx(\n user: PublicKey,\n amount: number\n ): Promise<{ transaction: Transaction; ephemeralStakePubkey: PublicKey }> {\n if (amount < MIN_SOL_TO_PARTICIPATE) {\n throw new Error(\n `Minimum deposit is ${MIN_SOL_TO_PARTICIPATE / 1e9} SOL`\n );\n }\n\n // 1) grab your typed Anchor program\n const program = this.program.getProgram('deposit');\n\n // 2) PDAs & ATAs\n const userAta = getUserLiqsolATA(user);\n const [depositAuthPDA] = deriveDepositAuthorityPDA();\n const [mintAuthPDA] = deriveLiqsolMintAuthorityPDA();\n const [vaultPDA] = deriveStakeControllerVaultPDA();\n const [reservePoolPDA] = deriveStakeControllerReservePoolPDA();\n const [controllerStatePDA] = deriveStakeControllerStatePDA();\n const [distStatePDA] = deriveDistributionStatePDA();\n const [userRecordPDA] = deriveUserRecordPDA(user);\n\n // 3) ephemeral stake account\n const seed = Math.floor(Math.random() * 0xffffffff);\n const ephemeralSeed = `ephemeral_${seed}`;\n const ephemeralStakePubkey = await PublicKey.createWithSeed(\n user,\n ephemeralSeed,\n StakeProgram.programId\n );\n\n // 4) build deposit instruction\n const depositIx = await program.methods\n .deposit(new BN(amount), seed)\n .accounts({\n user,\n programAuthority: depositAuthPDA,\n treasuryWallet: TREASURY_WALLET_PDA,\n systemProgram: SystemProgram.programId,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n stakeControllerProgram: STAKE_CONTROLLER_PROGRAM_ID,\n liqsolProgram: LIQSOL_TOKEN_PROGRAM_ID,\n yieldOracleProgram: YIELD_ORACLE_PROGRAM_ID,\n stakeProgram: StakeProgram.programId,\n distributionProgram: DISTRIBUTION_PROGRAM_ID,\n liqsolMint: LIQSOL_MINT_ADDRESS,\n userAta,\n liqsolMintAuthority: mintAuthPDA,\n reservePool: reservePoolPDA,\n vault: vaultPDA,\n ephemeralStake: ephemeralStakePubkey,\n controllerState: controllerStatePDA,\n userRecord: userRecordPDA,\n distributionState: distStatePDA,\n instructionsSysvar: SYSVAR_INSTRUCTIONS_PUBKEY,\n clock: SYSVAR_CLOCK_PUBKEY,\n stakeHistory: SYSVAR_STAKE_HISTORY_PUBKEY,\n rent: SYSVAR_RENT_PUBKEY,\n } as any)\n .instruction();\n\n // 5) prepend compute-budget bump\n const computeIx = ComputeBudgetProgram.setComputeUnitLimit({\n units: 400_000,\n });\n\n const tx = new Transaction().add(computeIx, depositIx);\n return { transaction: tx, ephemeralStakePubkey };\n }\n\n /**\n * Simulate (dry-run) a built transaction.\n * Returns any error plus the total compute-units consumed.\n */\n async simulate(\n tx: Transaction\n ): Promise<{ err: any; unitsConsumed: number }> {\n tx.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n\n const versioned = new VersionedTransaction(tx.compileMessage());\n const sim = await this.provider.connection.simulateTransaction(\n versioned,\n { sigVerify: false }\n );\n return { err: sim.value.err, unitsConsumed: sim.value.unitsConsumed! };\n }\n\n /**\n * High-level “build & send” helper.\n * Returns the confirmed signature.\n */\n async deposit(\n user: PublicKey,\n amount: number,\n signers: Signer[] = []\n ): Promise<TransactionSignature> {\n const { transaction } = await this.buildDepositTx(user, amount);\n\n // set feePayer & recent blockhash\n transaction.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n transaction.recentBlockhash = blockhash;\n\n // send + confirm\n return this.provider.sendAndConfirm(transaction, signers);\n }\n}","// src/solana/clients/DistributionClient.ts\nimport { AnchorProvider, Program, BN, web3 } from '@coral-xyz/anchor';\nimport {\n PublicKey,\n Transaction,\n TransactionInstruction,\n SystemProgram,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from '@solana/spl-token';\nimport {\n DISTRIBUTION_PROGRAM_ID,\n STAKE_CONTROLLER_PROGRAM_ID,\n DistributionIDL,\n Distribution,\n YIELD_ORACLE_PROGRAM_ID,\n LIQSOL_TOKEN_PROGRAM_ID,\n} from '../constants';\nimport {\n deriveDistributionStatePDA,\n deriveUserRecordPDA,\n deriveLiqsolMintAuthorityPDA,\n} from '../utils';\n\nexport class DistributionClient {\n constructor(private provider: AnchorProvider) { }\n\n /** Wrapped Anchor Program for Distribution */\n private get program(): Program<Distribution> {\n const idlWithAddress = {\n ...JSON.parse(JSON.stringify(DistributionIDL)),\n address: DISTRIBUTION_PROGRAM_ID.toString(),\n };\n return new Program(idlWithAddress as any, this.provider) as Program<Distribution>;\n }\n\n /** Derive the PDA for global distribution state */\n deriveStatePDA(): PublicKey {\n return deriveDistributionStatePDA()[0];\n }\n\n /** Derive the PDA for a user’s record */\n deriveUserRecordPDA(user: PublicKey): PublicKey {\n return deriveUserRecordPDA(user)[0];\n }\n\n /** Fetch on-chain distribution state */\n async getState(): Promise<any> {\n return this.program.account.distributionState.fetch(this.deriveStatePDA());\n }\n\n /** Fetch a user’s record or return null if it doesn’t exist */\n async getUserRecord(user: PublicKey): Promise<any | null> {\n try {\n return await this.program.account.userRecord.fetch(\n this.deriveUserRecordPDA(user)\n );\n } catch {\n return null;\n }\n }\n\n /** Build an `initialize` transaction for the distribution program */\n async buildInitializeTransaction(user: PublicKey): Promise<Transaction> {\n const [statePda] = deriveDistributionStatePDA();\n const ix = await this.program.methods\n .initialize()\n .accounts({\n authority: user,\n distributionState: statePda,\n systemProgram: SystemProgram.programId,\n rent: web3.SYSVAR_RENT_PUBKEY,\n } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /** Build an `updateUser` transaction (register or refresh a user record) */\n async buildUpdateUserTransaction(user: PublicKey): Promise<Transaction> {\n const statePda = this.deriveStatePDA();\n const userPda = this.deriveUserRecordPDA(user);\n\n // Fetch state to get the liqSOL mint address\n const state: any = await this.getState();\n const liqsolMint: PublicKey = state.liqsolMint;\n const userAta = getAssociatedTokenAddressSync(\n liqsolMint,\n user,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n const [stakeControllerStatePda] = PublicKey.findProgramAddressSync(\n [Buffer.from('stake_controller')],\n STAKE_CONTROLLER_PROGRAM_ID\n );\n\n const ix = await this.program.methods\n .updateUser()\n .accounts({\n user,\n userAta,\n userRecord: userPda,\n authority: user,\n payer: user,\n distributionState: statePda,\n stakeControllerState: stakeControllerStatePda,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n yieldOracleProgram: YIELD_ORACLE_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /** Build a `withdraw` transaction */\n async buildWithdrawTransaction(user: PublicKey, amount: number): Promise<Transaction> {\n const statePda = this.deriveStatePDA();\n const userPda = this.deriveUserRecordPDA(user);\n\n // Fetch state for the mint\n const state: any = await this.getState();\n const liqsolMint: PublicKey = state.liqsolMint;\n const userAta = getAssociatedTokenAddressSync(\n liqsolMint,\n user,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n const [stakeControllerStatePda] = PublicKey.findProgramAddressSync(\n [Buffer.from('stake_controller')],\n STAKE_CONTROLLER_PROGRAM_ID\n );\n const [controllerAuthPda] = PublicKey.findProgramAddressSync(\n [Buffer.from('stake_authority')],\n STAKE_CONTROLLER_PROGRAM_ID\n );\n\n const ix = await this.program.methods\n .withdraw(new BN(amount))\n .accounts({\n user,\n userAta,\n userRecord: userPda,\n distributionState: statePda,\n liqsolMint,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n stakeControllerProgram: STAKE_CONTROLLER_PROGRAM_ID,\n stakeControllerState: stakeControllerStatePda,\n controllerAuthority: controllerAuthPda,\n yieldOracleProgram: YIELD_ORACLE_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /** Build a `claimRewards` transaction */\n async buildClaimRewardsTransaction(user: PublicKey): Promise<Transaction> {\n const statePda = this.deriveStatePDA();\n const userPda = this.deriveUserRecordPDA(user);\n\n // Fetch state for the mint\n const state: any = await this.getState();\n const liqsolMint: PublicKey = state.liqsolMint;\n const userAta = getAssociatedTokenAddressSync(\n liqsolMint,\n user,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n const [mintAuthPda] = deriveLiqsolMintAuthorityPDA();\n\n const ix = await this.program.methods\n .claimRewards()\n .accounts({\n user,\n userAta,\n userRecord: userPda,\n distributionState: statePda,\n liqsolMint,\n liqsolProgram: LIQSOL_TOKEN_PROGRAM_ID,\n liqsolMintAuthority: mintAuthPda,\n instructionsSysvar: web3.SYSVAR_INSTRUCTIONS_PUBKEY,\n yieldOracleProgram: YIELD_ORACLE_PROGRAM_ID,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /** Send & confirm a single-IX transaction; returns the tx signature */\n async sendTransaction(\n tx: Transaction,\n signers: import('@solana/web3.js').Signer[] = []\n ): Promise<string> {\n tx.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n return this.provider.sendAndConfirm(tx, signers);\n }\n\n /** Simulate a single-IX transaction; returns error (if any) + compute units used */\n async simulateTransaction(\n tx: Transaction\n ): Promise<{ err: any; unitsConsumed: number }> {\n tx.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n const versioned = new VersionedTransaction(tx.compileMessage());\n const sim = await this.provider.connection.simulateTransaction(versioned, {\n sigVerify: false,\n });\n return { err: sim.value.err, unitsConsumed: sim.value.unitsConsumed! };\n }\n}","// src/solana/clients/ValidatorLeaderboardClient.ts\nimport { AnchorProvider, Program, BN } from '@coral-xyz/anchor';\nimport { PublicKey, Transaction, TransactionInstruction, SystemProgram, VersionedTransaction } from '@solana/web3.js';\nimport {\n deriveLeaderboardHeadPDA,\n deriveValidatorRecordPDA,\n deriveTop10CachePDA,\n} from '../utils';\nimport { VALIDATOR_LEADERBOARD_PROGRAM_ID, ValidatorLeaderboard, ValidatorLeaderboardIDL } from '../constants';\n\nexport class ValidatorLeaderboardClient {\n constructor(private provider: AnchorProvider) { }\n\n /**\n * Wrapped Anchor Program for ValidatorLeaderboard\n */\n private get program(): Program<ValidatorLeaderboard> {\n const idlWithAddress = {\n ...JSON.parse(JSON.stringify(ValidatorLeaderboardIDL)),\n address: VALIDATOR_LEADERBOARD_PROGRAM_ID.toString(),\n };\n return new Program(idlWithAddress as any, this.provider) as Program<ValidatorLeaderboard>;\n }\n\n /** Derive the PDA for the leaderboard head */\n deriveHeadPDA(): PublicKey {\n return deriveLeaderboardHeadPDA()[0];\n }\n\n /** Derive the PDA for a given validator record */\n deriveRecordPDA(voteAccount: PublicKey): PublicKey {\n return deriveValidatorRecordPDA(voteAccount)[0];\n }\n\n /**\n * Build the initialize instruction as a Transaction\n */\n async buildInitializeTransaction(authority: PublicKey): Promise<Transaction> {\n const [headPda] = deriveLeaderboardHeadPDA();\n const ix = await this.program.methods\n .initialize()\n .accounts({\n authority,\n leaderboardHead: headPda,\n systemProgram: SystemProgram.programId,\n } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /**\n * Build an updateValidator transaction\n */\n async buildUpdateValidatorTransaction(params: {\n authority: PublicKey;\n registrant: PublicKey;\n voteAccount: PublicKey;\n vpp: number;\n insertAfter?: PublicKey;\n insertBefore?: PublicKey;\n currentPrev?: PublicKey;\n currentNext?: PublicKey;\n }): Promise<Transaction> {\n const { authority, registrant, voteAccount, vpp, insertAfter, insertBefore, currentPrev, currentNext } = params;\n const [headPda] = deriveLeaderboardHeadPDA();\n const [recPda] = deriveValidatorRecordPDA(voteAccount);\n\n const accounts: any = {\n registrant,\n voteAccount,\n validatorRecord: recPda,\n leaderboardHead: headPda,\n systemProgram: SystemProgram.programId,\n ...(insertAfter && { insertAfter }),\n ...(insertBefore && { insertBefore }),\n ...(currentPrev && { currentPrev }),\n ...(currentNext && { currentNext }),\n };\n\n const ix = await this.program.methods\n .updateValidator(new BN(vpp))\n .accounts(accounts)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /**\n * Build an updateTop10Cache transaction\n */\n async buildUpdateTop10CacheTransaction(params: {\n authority: PublicKey;\n top10Validators: PublicKey[];\n }): Promise<Transaction> {\n const { authority, top10Validators } = params;\n if (top10Validators.length !== 10) {\n throw new Error('Must supply exactly 10 validators');\n }\n const [cachePda] = deriveTop10CachePDA();\n const ix = await this.program.methods\n .updateTop10Cache(top10Validators)\n .accounts({ authority, cache: cachePda, systemProgram: SystemProgram.programId } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /**\n * Fetch the cached top 10 validators via a view call\n */\n async getCachedTop10(): Promise<PublicKey[]> {\n const [cachePda] = deriveTop10CachePDA();\n return this.program.methods\n .getCachedTop10()\n .accounts({ cache: cachePda } as any)\n .view();\n }\n\n /**\n * Traverse the on-chain linked list and return the sequence of PublicKeys\n */\n async getLeaderboard(): Promise<PublicKey[]> {\n const [headPda] = deriveLeaderboardHeadPDA();\n let headAccount;\n try {\n headAccount = await this.program.account.leaderboardHead.fetch(headPda);\n } catch {\n return [];\n }\n const result: PublicKey[] = [];\n let cursor: PublicKey = headAccount.nextValidator;\n while (cursor && !cursor.equals(PublicKey.default)) {\n result.push(cursor);\n const rec = await this.program.account.validatorRecord.fetch(cursor);\n cursor = rec.nextValidator;\n }\n return result;\n }\n\n /**\n * Fetch a single validator record or null\n */\n async getRecord(voteAccount: PublicKey): Promise<any | null> {\n const [recPda] = deriveValidatorRecordPDA(voteAccount);\n try {\n return await this.program.account.validatorRecord.fetch(recPda);\n } catch {\n return null;\n }\n }\n\n /**\n * Send & confirm a single-IX Transaction; returns the signature\n */\n async sendTransaction(\n tx: Transaction,\n signers: import('@solana/web3.js').Signer[] = []\n ): Promise<string> {\n tx.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n return this.provider.sendAndConfirm(tx, signers);\n }\n\n /**\n * Simulate a single-IX Transaction; returns any err + compute units consumed\n */\n async simulateTransaction(\n tx: Transaction\n ): Promise<{ err: any; unitsConsumed: number }> {\n tx.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n const versioned = new VersionedTransaction(tx.compileMessage());\n const sim = await this.provider.connection.simulateTransaction(versioned, { sigVerify: false });\n return { err: sim.value.err, unitsConsumed: sim.value.unitsConsumed! };\n }\n}\n","import {\n Connection,\n PublicKey as SolPubKey,\n Transaction,\n VersionedTransaction,\n TransactionSignature,\n Commitment,\n} from '@solana/web3.js';\nimport { AnchorProvider } from '@coral-xyz/anchor';\nimport { BaseSignerWalletAdapter } from '@solana/wallet-adapter-base';\nimport { IStakingClient, SolanaTransaction, StakerConfig } from '../../staker/types';\nimport { KeyType, PublicKey } from '@wireio/core';\nimport { DepositClient } from './clients/deposit.client';\nimport { DistributionClient } from './clients/distribution.client';\nimport { ValidatorLeaderboardClient } from './clients/leaderboard.client';\n\nconst commitment: Commitment = 'confirmed';\n\nexport class SolanaStakingClient implements IStakingClient {\n public pubKey: PublicKey;\n public connection: Connection;\n public anchor: AnchorProvider;\n\n private depositClient: DepositClient;\n private distributionClient: DistributionClient;\n private leaderboardClient: ValidatorLeaderboardClient;\n\n get solPubKey(): SolPubKey {\n return this.anchor.wallet.publicKey;\n }\n\n constructor(private config: StakerConfig) {\n // 1) unwrap & validate wallet adapter\n const adapter = config.provider as BaseSignerWalletAdapter;\n if (!adapter.publicKey) {\n throw new Error('Solana wallet adapter not connected');\n }\n\n // 2) sanity‐check wire ↔ solana pubkey\n const solPub = adapter.publicKey;\n const wirePub = new PublicKey(KeyType.ED, solPub.toBytes());\n if (!wirePub.equals(config.pubKey)) {\n throw new Error('Passed-in pubKey doesn\\'t match adapter.publicKey');\n }\n \n this.pubKey = wirePub;\n this.connection = new Connection(config.network.rpcUrls[0], commitment);\n\n const anchorWallet = {\n publicKey: solPub,\n async signTransaction<T extends SolanaTransaction>(tx: T): Promise<T> {\n return adapter.signTransaction(tx);\n },\n async signAllTransactions<T extends SolanaTransaction>(txs: T[]): Promise<T[]> {\n return Promise.all(txs.map((tx) => adapter.signTransaction(tx)));\n },\n };\n\n this.anchor = new AnchorProvider(\n this.connection,\n anchorWallet,\n { commitment }\n );\n\n // 4) staking clients\n this.depositClient = new DepositClient(this.anchor);\n this.distributionClient = new DistributionClient(this.anchor);\n this.leaderboardClient = new ValidatorLeaderboardClient(this.anchor);\n }\n\n async deposit(amount: number): Promise<string> {\n const tx = await this.depositClient.buildDepositTx(\n new SolPubKey(this.pubKey.data.array),\n amount,\n );\n const signed = await this.signTransaction(tx.transaction);\n return this.sendTransaction(signed);\n }\n\n async signTransaction(tx: SolanaTransaction): Promise<SolanaTransaction> {\n return await this.anchor.wallet.signTransaction(tx);\n }\n\n async sendTransaction(signed: SolanaTransaction): Promise<TransactionSignature> {\n return await this.anchor.sendAndConfirm(signed);\n }\n}","// src/staker/staker.ts\n\nimport { ChainID, Curve, EvmChainID, SolChainID } from '@wireio/core';\nimport { IStakingClient, StakerConfig } from './types';\nimport { SolanaStakingClient } from '../networks/solana/solana';\nimport { EthereumStakingClient } from '../networks/ethereum/ethereum';\n\nexport class Staker {\n private clients: Map<ChainID, IStakingClient> = new Map();\n\n constructor(config: StakerConfig | StakerConfig[]) {\n if (!Array.isArray(config)) config = [config];\n\n config.forEach((cfg) => {\n switch (cfg.network.chainId) {\n case SolChainID.Testnet:\n this.clients.set(SolChainID.Testnet, new SolanaStakingClient(cfg));\n break;\n\n // case EvmChainID.Sepolia:\n // this.clients.set(EvmChainID.Sepolia, new EthereumStakingClient(cfg));\n // break;\n default:\n throw new Error(`Unsupported network curve: ${cfg.network.name}`);\n\n }\n });\n }\n\n deposit(amount: number): Promise<string> {\n if (!this.clients.has(SolChainID.Testnet)) {\n throw new Error('Staker not initialized for Solana Testnet');\n }\n return this.clients.get(SolChainID.Testnet)!.deposit(amount);\n }\n\n // …withdraw, claimRewards, etc…\n}","/**\n * @module EthereumContractService\n * \n * Provides a unified service for interacting with Ethereum smart contracts using ethers.js.\n * \n * This module includes:\n * - ABI imports for ERC20, ERC721, and ERC1155 token standards.\n * - Address book and contract configuration types.\n * - A service class for managing contract instances, interfaces, and utility methods for read/write access.\n * - Utility for decoding custom errors and events using a combined interface of all known ABIs.\n * \n * @remarks\n * - Update the `ADDRESSES` and `CONTRACTS` objects to match your deployment.\n * - The service supports both read-only and write-enabled contract handles, depending on the presence of a signer.\n * - The `omniInterface` property allows decoding of errors and events across all included ABIs.\n * \n * @example\n * ```typescript\n * const service = new EthereumContractService({ provider, signer });\n * const stakeContract = service.getContract('Stake');\n * const address = service.getAddress('Stake');\n * ```\n */\n\nimport ERC20Artifact from '../../assets/ethereum/ABI/token/ERC20Token.sol/ERC20Token.json';\nimport ERC721Artifact from '../../assets/ethereum/ABI/token/ERC721Token.sol/ERC721Token.json';\nimport ERC1155Artifact from '../../assets/ethereum/ABI/token/ERC1155Token.sol/ERC1155Token.json';\nimport { AddressBook, ContractName } from './types';\nimport { Contract, ethers, providers, Signer } from 'ethers';\nimport { JsonFragment } from '@ethersproject/abi';\nimport { ErrorDescription } from '@ethersproject/abi/lib/interface';\n\nexport const ERC20Abi = ERC20Artifact.abi;\nexport const ERC721Abi = ERC721Artifact.abi;\nexport const ERC1155Abi = ERC1155Artifact.abi;\n\n// Update this to be your staking contract address book\nexport const ADDRESSES: AddressBook = {\n Stake: '0xEeaCBa95852324eAc63fE2711aFe0283adf3bC93',\n};\n\nexport type Contracts<T extends string = ContractName> = Record<T, ContractConfig>;\n\nexport type ContractConfig = {\n address: string;\n abi: JsonFragment[];\n}\n\nexport const CONTRACTS: Contracts<ContractName> = {\n Stake: { address: ADDRESSES.Stake, abi: undefined as any }, // Replace with actual ABI artifact when available\n // Stake: { address: ADDRESSES.Stake, abi: Stake.abi },\n}\n\nexport interface ContractOptions {\n /** RPC endpoint or injected EIP-1193 provider */\n provider?: ethers.providers.Provider;\n /** Only required if you need to send txns */\n signer?: Signer;\n}\n\n\nexport class EthereumContractService {\n private provider?: providers.Provider;\n private signer?: Signer;\n\n public readonly contract: { [N in ContractName]: ethers.Contract } = {} as any;\n public readonly iface: { [N in ContractName]: ethers.utils.Interface } = {} as any;\n\n constructor(opts: ContractOptions) {\n this.provider = opts.provider;\n this.signer = opts.signer;\n\n (Object.keys(CONTRACTS) as ContractName[]).forEach((name) => {\n const { address, abi } = CONTRACTS[name];\n this.iface[name] = new ethers.utils.Interface(abi);\n this.contract[name] = new ethers.Contract(address, abi, this.signer ?? this.provider);\n });\n }\n\n /** Get raw address for a contract */\n public getAddress(name: ContractName): string {\n return CONTRACTS[name].address;\n }\n\n /** Utility: get a read-only handle even if signer is present */\n getReadOnly(name: ContractName): Contract {\n const { address, abi } = CONTRACTS[name];\n return new Contract(address, abi, this.provider);\n }\n\n /** Utility: get a write-enabled handle (throws if no signer) */\n getWrite(name: ContractName): Contract {\n if (!this.signer) throw new Error('No signer available for write calls');\n const { address, abi } = CONTRACTS[name];\n return new Contract(address, abi, this.signer);\n }\n\n /** Expose network info */\n async getNetwork() {\n return this.provider?.getNetwork();\n }\n\n /** List all known contract names */\n public listContractNames(): ContractName[] {\n return Object.keys(CONTRACTS) as ContractName[];\n }\n\n /** Get Interface instance for a contract */\n public getInterface(name: ContractName): ethers.utils.Interface {\n const iface = this.iface[name];\n if (!iface) throw new Error(`Interface not initialized for ${name}`);\n return iface;\n }\n\n /** Get live Contract instance */\n public getContract(name: ContractName): ethers.Contract {\n const ctr = this.contract[name];\n if (!ctr) throw new Error(`Contract not initialized for ${name}`);\n return ctr;\n }\n\n /** A unified Interface containing all ABIs (addresses + extra decoding-only)\n * to parse custom errors or events. */\n public get omniInterface(): ethers.utils.Interface {\n const all: any[] = [];\n\n // Add all artifacts to the interface\n const allArtifacts = [\n ERC20Artifact,\n ERC721Artifact,\n ERC1155Artifact,\n // Add more artifacts as needed\n ];\n\n // Add all ABIs to the omnibus interface\n allArtifacts.forEach(artifact => {\n if (artifact && artifact.abi) {\n all.push(...artifact.abi);\n }\n });\n\n // dedupe\n const seen = new Set<string>();\n const dedup: any[] = [];\n for (const item of all) {\n try {\n const frag = ethers.utils.Fragment.from(item);\n const key = `${frag.type}:${frag.format(ethers.utils.FormatTypes.full)}`.toLowerCase();\n if (!seen.has(key)) {\n seen.add(key);\n dedup.push(item);\n }\n } catch { }\n }\n\n return new ethers.utils.Interface(dedup);\n }\n\n /** Decode a revert or custom error payload */\n public parseError(revertData: string): ErrorDescription {\n try {\n return this.omniInterface.parseError(revertData);\n } catch {\n throw new Error(`Unable to parse error data: ${revertData}`);\n }\n }\n}","// src/networks/ethereum/ethereum.ts\n\nimport { ethers } from 'ethers';\nimport { IStakingClient, StakerConfig } from '../../staker/types';\nimport { PublicKey as WirePubKey } from '@wireio/core';\nimport { ERC20Abi } from './contract'; // TODO replace with staking contract ABI\nimport axios from 'axios';\n\n// — replace with your actual staking contract ABI & address —\nconst STAKING_CONTRACT_ADDRESS = '0xYourStakingContractAddress';\n\nexport class EthereumStakingClient implements IStakingClient {\n public readonly pubKey: WirePubKey;\n private readonly provider: ethers.providers.Web3Provider;\n private readonly signer: ethers.Signer;\n private readonly contract: ethers.Contract;\n\n constructor(private config: StakerConfig) {\n // 1) unwrap & validate Ethers provider\n if (!ethers.providers.Web3Provider.isProvider(config.provider as any)) {\n throw new Error('Expected a Web3Provider for Ethereum');\n }\n this.provider = config.provider as ethers.providers.Web3Provider;\n\n // 2) signer\n this.signer = this.provider.getSigner();\n this.pubKey = config.pubKey as WirePubKey;\n\n // 4) instantiate your contract wrapper\n this.contract = new ethers.Contract(\n STAKING_CONTRACT_ADDRESS,\n ERC20Abi,\n this.signer\n );\n }\n\n /** Submit a deposit; returns the transaction hash */\n async deposit(amount: number): Promise<string> {\n // build & send in one go\n const txResponse = await this.contract.deposit(\n ethers.BigNumber.from(amount),\n {\n // if your contract needs ETH value:\n // value: ethers.BigNumber.from(amount),\n }\n );\n\n // wait for on-chain confirmation (optional)\n await txResponse.wait();\n return txResponse.hash;\n }\n\n /** (Optional) dry-run via eth_call */\n async simulateDeposit(amount: number): Promise<any> {\n return this.provider.call({\n to: STAKING_CONTRACT_ADDRESS,\n data: this.contract.interface.encodeFunctionData('deposit', [\n ethers.BigNumber.from(amount)\n ]),\n });\n }\n\n // TODO: implement withdraw, claimRewards, etc.\n}","export const CONTRACT_NAMES = [\n 'Stake',\n] as const;\n\nexport type ContractName = typeof CONTRACT_NAMES[number];\nexport type AddressBook = Record<ContractName, string>;"],"names":["PublicKey","DepositIDL","LiqSolTokenIDL","StakeControllerIDL","StakeRegistryIDL","TreasuryIDL","ValidatorRegistryIDL","YieldOracleIDL","__spreadProps","Program","getAssociatedTokenAddressSync","TOKEN_2022_PROGRAM_ID","ASSOCIATED_TOKEN_PROGRAM_ID","distributionJson","validatorLeaderboardJson","__async","StakeProgram","BN","SystemProgram","SYSVAR_INSTRUCTIONS_PUBKEY","SYSVAR_CLOCK_PUBKEY","SYSVAR_STAKE_HISTORY_PUBKEY","SYSVAR_RENT_PUBKEY","ComputeBudgetProgram","Transaction","VersionedTransaction","web3","KeyType","Connection","AnchorProvider","SolPubKey","SolChainID","ethers","Contract"],"mappings":";;;;;;;;AAMa,MAAA,EAAA,GAAK,CAAC,IAAyB,KAAA;AACxC,EAAA,OAAO,UAAU,IAAI,CAAA,CAAA,CAAA,CAAA;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC0CO,MAAM,kBAAqB,GAAA,IAAIA,iBAAU,CAAAC,WAAA,CAAW,OAAO,EAAA;AAC3D,MAAM,uBAA0B,GAAA,IAAID,iBAAU,CAAA,eAAA,CAAgB,OAAO,EAAA;AACrE,MAAM,uBAA0B,GAAA,IAAIA,iBAAU,CAAAE,eAAA,CAAe,OAAO,EAAA;AACpE,MAAM,2BAA8B,GAAA,IAAIF,iBAAU,CAAAG,mBAAA,CAAmB,OAAO,EAAA;AAC5E,MAAM,yBAA4B,GAAA,IAAIH,iBAAU,CAAAI,iBAAA,CAAiB,OAAO,EAAA;AACxE,MAAM,mBAAsB,GAAA,IAAIJ,iBAAU,CAAAK,YAAA,CAAY,OAAO,EAAA;AAC7D,MAAM,gCAAmC,GAAA,IAAIL,iBAAU,CAAA,uBAAA,CAAwB,OAAO,EAAA;AACtF,MAAM,6BAAgC,GAAA,IAAIA,iBAAU,CAAAM,qBAAA,CAAqB,OAAO,EAAA;AAChF,MAAM,uBAA0B,GAAA,IAAIN,iBAAU,CAAAO,eAAA,CAAe,OAAO,EAAA;AAGpE,MAAM,sBAAyB,GAAA,IAAA;AAC/B,MAAM,mBAAsB,GAAA,KAAA;AAC5B,MAAM,gBAAmB,GAAA,IAAA;AAInB,MAAA,mBAAA,GAAsB,IAAIP,iBAAA,CAAU,8CAA8C,EAAA;AAClF,MAAA,mBAAA,GAAsB,IAAIA,iBAAA,CAAU,8CAA8C,EAAA;AAClF,MAAA,eAAA,GAAkB,IAAIA,iBAAA,CAAU,8CAA8C;;;;;;;;;;;;;;;;;;;;;ACnDpF,SAAS,kBAAkB,QAA4C,EAAA;AAE1E,EAAM,MAAA,cAAA,GAAiBQ,qCAChB,IAAK,CAAA,KAAA,CAAM,KAAK,SAAU,CAAAP,WAAU,CAAC,CADrB,CAAA,EAAA;AAAA,IAEnB,OAAA,EAAS,mBAAmB,QAAS,EAAA;AAAA,GACzC,CAAA,CAAA;AACA,EAAO,OAAA,IAAIQ,cAAQ,CAAA,cAAA,EAAuB,QAAQ,CAAA,CAAA;AACtD,CAAA;AAKgB,SAAA,yBAAA,CACZ,YAAuB,kBACJ,EAAA;AACnB,EAAA,OAAOT,iBAAU,CAAA,sBAAA;AAAA,IACb,CAAC,MAAA,CAAO,IAAK,CAAA,mBAAmB,CAAC,CAAA;AAAA,IACjC,SAAA;AAAA,GACJ,CAAA;AACJ,CAAA;AAEgB,SAAA,4BAAA,CACZ,YAAuB,mBACJ,EAAA;AACnB,EAAA,OAAOA,iBAAU,CAAA,sBAAA;AAAA,IACb,CAAC,MAAA,CAAO,IAAK,CAAA,gBAAgB,CAAC,CAAA;AAAA,IAC9B,SAAA;AAAA,GACJ,CAAA;AACJ,CAAA;AAEO,SAAS,6BAAqD,GAAA;AACjE,EAAA,OAAOA,iBAAU,CAAA,sBAAA;AAAA,IACb,CAAC,MAAA,CAAO,IAAK,CAAA,OAAO,CAAC,CAAA;AAAA,IACrB,2BAAA;AAAA,GACJ,CAAA;AACJ,CAAA;AAEO,SAAS,mCAA2D,GAAA;AACvE,EAAA,OAAOA,iBAAU,CAAA,sBAAA;AAAA,IACb,CAAC,MAAA,CAAO,IAAK,CAAA,cAAc,CAAC,CAAA;AAAA,IAC5B,2BAAA;AAAA,GACJ,CAAA;AACJ,CAAA;AAEO,SAAS,6BAAqD,GAAA;AACjE,EAAA,OAAOA,iBAAU,CAAA,sBAAA;AAAA,IACb,CAAC,MAAA,CAAO,IAAK,CAAA,kBAAkB,CAAC,CAAA;AAAA,IAChC,2BAAA;AAAA,GACJ,CAAA;AACJ,CAAA;AAEO,SAAS,0BAAkD,GAAA;AAC9D,EAAA,OAAOA,iBAAU,CAAA,sBAAA;AAAA,IACb,CAAC,MAAA,CAAO,IAAK,CAAA,oBAAoB,CAAC,CAAA;AAAA,IAClC,uBAAA;AAAA,GACJ,CAAA;AACJ,CAAA;AAEO,SAAS,oBACZ,IACmB,EAAA;AACnB,EAAA,OAAOA,iBAAU,CAAA,sBAAA;AAAA,IACb,CAAC,MAAO,CAAA,IAAA,CAAK,aAAa,CAAG,EAAA,IAAA,CAAK,UAAU,CAAA;AAAA,IAC5C,uBAAA;AAAA,GACJ,CAAA;AACJ,CAAA;AAEO,SAAS,wBAAgD,GAAA;AAC5D,EAAA,OAAOA,iBAAU,CAAA,sBAAA;AAAA,IACb,CAAC,MAAA,CAAO,IAAK,CAAA,kBAAkB,CAAC,CAAA;AAAA,IAChC,gCAAA;AAAA,GACJ,CAAA;AACJ,CAAA;AAEO,SAAS,yBACZ,WACmB,EAAA;AACnB,EAAA,OAAOA,iBAAU,CAAA,sBAAA;AAAA,IACb,CAAC,MAAO,CAAA,IAAA,CAAK,kBAAkB,CAAG,EAAA,WAAA,CAAY,UAAU,CAAA;AAAA,IACxD,gCAAA;AAAA,GACJ,CAAA;AACJ,CAAA;AAEO,SAAS,mBAA2C,GAAA;AACvD,EAAA,OAAOA,iBAAU,CAAA,sBAAA;AAAA,IACb,CAAC,MAAA,CAAO,IAAK,CAAA,cAAc,CAAC,CAAA;AAAA,IAC5B,gCAAA;AAAA,GACJ,CAAA;AACJ,CAAA;AAGO,SAAS,iBACZ,IACS,EAAA;AACT,EAAO,OAAAU,sCAAA;AAAA,IACH,mBAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACAC,8BAAA;AAAA,IACAC,oCAAA;AAAA,GACJ,CAAA;AACJ;;;;;;;;;;;;;;;;;;;;;ACvFO,MAAM,YAAe,GAAA;AAAA,EACxB,OAAS,EAAA;AAAA,IACL,GAAK,EAAA,WAAA;AAAA,IACL,OAAS,EAAA,IAAIZ,iBAAU,CAAA,WAAA,CAAY,OAAO,CAAA;AAAA,GAC9C;AAAA,EAEA,YAAc,EAAA;AAAA,IACV,GAAK,EAAAa,eAAA;AAAA,IACL,OAAS,EAAA,IAAIb,iBAAU,CAAAa,eAAA,CAAiB,OAAO,CAAA;AAAA,GACnD;AAAA,EAEA,WAAa,EAAA;AAAA,IACT,GAAK,EAAA,eAAA;AAAA,IACL,OAAS,EAAA,IAAIb,iBAAU,CAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,GAClD;AAAA,EAEA,eAAiB,EAAA;AAAA,IACb,GAAK,EAAA,mBAAA;AAAA,IACL,OAAS,EAAA,IAAIA,iBAAU,CAAA,mBAAA,CAAoB,OAAO,CAAA;AAAA,GACtD;AAAA,EAEA,aAAe,EAAA;AAAA,IACX,GAAK,EAAA,iBAAA;AAAA,IACL,OAAS,EAAA,IAAIA,iBAAU,CAAA,iBAAA,CAAkB,OAAO,CAAA;AAAA,GACpD;AAAA,EAEA,QAAU,EAAA;AAAA,IACN,GAAK,EAAA,YAAA;AAAA,IACL,OAAS,EAAA,IAAIA,iBAAU,CAAA,YAAA,CAAa,OAAO,CAAA;AAAA,GAC/C;AAAA,EAEA,oBAAsB,EAAA;AAAA,IAClB,GAAK,EAAAc,uBAAA;AAAA,IACL,OAAS,EAAA,IAAId,iBAAU,CAAAc,uBAAA,CAAyB,OAAO,CAAA;AAAA,GAC3D;AAAA,EAEA,iBAAmB,EAAA;AAAA,IACf,GAAK,EAAA,qBAAA;AAAA,IACL,OAAS,EAAA,IAAId,iBAAU,CAAA,qBAAA,CAAsB,OAAO,CAAA;AAAA,GACxD;AAAA,EAEA,WAAa,EAAA;AAAA,IACT,GAAK,EAAA,eAAA;AAAA,IACL,OAAS,EAAA,IAAIA,iBAAU,CAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,GAClD;AACJ,CAAA,CAAA;AAQO,MAAM,oBAAqB,CAAA;AAAA,EAC9B,YAAoB,QAA0B,EAAA;AAA1B,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA,CAAA;AAAA,GAA4B;AAAA,EAKhD,WACI,IACwC,EAAA;AACxC,IAAM,MAAA,KAAA,GAAQ,aAAa,IAAI,CAAA,CAAA;AAE/B,IAAM,MAAA,WAAA,GAAcQ,qCAAK,KAAM,CAAA,GAAA,CAAA,EAAX,EAAgB,OAAS,EAAA,KAAA,CAAM,OAAQ,CAAA,QAAA,EAAW,EAAA,CAAA,CAAA;AAEtE,IAAA,OAAO,IAAIC,cAAA,CAAQ,WAAoB,EAAA,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,GAGxD;AAAA,EAGA,gBAAqD,GAAA;AACjD,IAAO,OAAA,MAAA,CAAO,KAAK,YAAY,CAAA,CAAA;AAAA,GACnC;AAAA,EAGA,aAAa,IAA4C,EAAA;AACrD,IAAO,OAAA,YAAA,CAAa,IAAI,CAAE,CAAA,OAAA,CAAA;AAAA,GAC9B;AACJ;;;;;;;;;;;;;;;;;;;;;;ACzDO,MAAM,aAAc,CAAA;AAAA,EAGvB,YAAoB,QAA0B,EAAA;AAA1B,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA,CAAA;AAFpB,IAAA,IAAA,CAAQ,OAAU,GAAA,IAAI,oBAAqB,CAAA,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,GAER;AAAA,EAS1C,cAAA,CACF,MACA,MACsE,EAAA;AAAA,IAAA,OAAAM,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACtE,MAAA,IAAI,SAAS,sBAAwB,EAAA;AACjC,QAAA,MAAM,IAAI,KAAA;AAAA,UACN,CAAA,mBAAA,EAAsB,yBAAyB,GAAG,CAAA,IAAA,CAAA;AAAA,SACtD,CAAA;AAAA,OACJ;AAGA,MAAA,MAAM,OAAU,GAAA,IAAA,CAAK,OAAQ,CAAA,UAAA,CAAW,SAAS,CAAA,CAAA;AAGjD,MAAM,MAAA,OAAA,GAAU,iBAAiB,IAAI,CAAA,CAAA;AACrC,MAAM,MAAA,CAAC,cAAc,CAAA,GAAI,yBAA0B,EAAA,CAAA;AACnD,MAAM,MAAA,CAAC,WAAW,CAAA,GAAI,4BAA6B,EAAA,CAAA;AACnD,MAAM,MAAA,CAAC,QAAQ,CAAA,GAAI,6BAA8B,EAAA,CAAA;AACjD,MAAM,MAAA,CAAC,cAAc,CAAA,GAAI,mCAAoC,EAAA,CAAA;AAC7D,MAAM,MAAA,CAAC,kBAAkB,CAAA,GAAI,6BAA8B,EAAA,CAAA;AAC3D,MAAM,MAAA,CAAC,YAAY,CAAA,GAAI,0BAA2B,EAAA,CAAA;AAClD,MAAA,MAAM,CAAC,aAAa,CAAI,GAAA,mBAAA,CAAoB,IAAI,CAAA,CAAA;AAGhD,MAAA,MAAM,OAAO,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,MAAA,KAAW,UAAU,CAAA,CAAA;AAClD,MAAM,MAAA,aAAA,GAAgB,aAAa,IAAI,CAAA,CAAA,CAAA;AACvC,MAAM,MAAA,oBAAA,GAAuB,MAAMf,iBAAU,CAAA,cAAA;AAAA,QACzC,IAAA;AAAA,QACA,aAAA;AAAA,QACAgB,oBAAa,CAAA,SAAA;AAAA,OACjB,CAAA;AAGA,MAAM,MAAA,SAAA,GAAY,MAAM,OAAA,CAAQ,OAC3B,CAAA,OAAA,CAAQ,IAAIC,SAAA,CAAG,MAAM,CAAA,EAAG,IAAI,CAAA,CAC5B,QAAS,CAAA;AAAA,QACN,IAAA;AAAA,QACA,gBAAkB,EAAA,cAAA;AAAA,QAClB,cAAgB,EAAA,mBAAA;AAAA,QAChB,eAAeC,qBAAc,CAAA,SAAA;AAAA,QAC7B,YAAc,EAAAP,8BAAA;AAAA,QACd,sBAAwB,EAAAC,oCAAA;AAAA,QACxB,sBAAwB,EAAA,2BAAA;AAAA,QACxB,aAAe,EAAA,uBAAA;AAAA,QACf,kBAAoB,EAAA,uBAAA;AAAA,QACpB,cAAcI,oBAAa,CAAA,SAAA;AAAA,QAC3B,mBAAqB,EAAA,uBAAA;AAAA,QACrB,UAAY,EAAA,mBAAA;AAAA,QACZ,OAAA;AAAA,QACA,mBAAqB,EAAA,WAAA;AAAA,QACrB,WAAa,EAAA,cAAA;AAAA,QACb,KAAO,EAAA,QAAA;AAAA,QACP,cAAgB,EAAA,oBAAA;AAAA,QAChB,eAAiB,EAAA,kBAAA;AAAA,QACjB,UAAY,EAAA,aAAA;AAAA,QACZ,iBAAmB,EAAA,YAAA;AAAA,QACnB,kBAAoB,EAAAG,kCAAA;AAAA,QACpB,KAAO,EAAAC,2BAAA;AAAA,QACP,YAAc,EAAAC,mCAAA;AAAA,QACd,IAAM,EAAAC,0BAAA;AAAA,OACF,EACP,WAAY,EAAA,CAAA;AAGjB,MAAM,MAAA,SAAA,GAAYC,6BAAqB,mBAAoB,CAAA;AAAA,QACvD,KAAO,EAAA,GAAA;AAAA,OACV,CAAA,CAAA;AAED,MAAA,MAAM,KAAK,IAAIC,mBAAA,EAAc,CAAA,GAAA,CAAI,WAAW,SAAS,CAAA,CAAA;AACrD,MAAO,OAAA,EAAE,WAAa,EAAA,EAAA,EAAI,oBAAqB,EAAA,CAAA;AAAA,KACnD,CAAA,CAAA;AAAA,GAAA;AAAA,EAMM,SACF,EAC4C,EAAA;AAAA,IAAA,OAAAT,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC5C,MAAG,EAAA,CAAA,QAAA,GAAW,IAAK,CAAA,QAAA,CAAS,MAAO,CAAA,SAAA,CAAA;AACnC,MAAA,MAAM,EAAE,SAAU,EAAA,GAAI,MAAM,IAAK,CAAA,QAAA,CAAS,WAAW,kBAAmB,EAAA,CAAA;AACxE,MAAA,EAAA,CAAG,eAAkB,GAAA,SAAA,CAAA;AAErB,MAAA,MAAM,SAAY,GAAA,IAAIU,4BAAqB,CAAA,EAAA,CAAG,gBAAgB,CAAA,CAAA;AAC9D,MAAA,MAAM,GAAM,GAAA,MAAM,IAAK,CAAA,QAAA,CAAS,UAAW,CAAA,mBAAA;AAAA,QACvC,SAAA;AAAA,QACA,EAAE,WAAW,KAAM,EAAA;AAAA,OACvB,CAAA;AACA,MAAO,OAAA,EAAE,KAAK,GAAI,CAAA,KAAA,CAAM,KAAK,aAAe,EAAA,GAAA,CAAI,MAAM,aAAe,EAAA,CAAA;AAAA,KACzE,CAAA,CAAA;AAAA,GAAA;AAAA,EAMM,OAAA,CACF,IACA,EAE6B,EAAA;AAAA,IAAA,OAAAV,SAAA,CAAA,IAAA,EAAA,SAAA,EAAA,WAH7B,IACA,EAAA,MAAA,EACA,OAAoB,GAAA,EACS,EAAA;AAC7B,MAAA,MAAM,EAAE,WAAY,EAAA,GAAI,MAAM,IAAK,CAAA,cAAA,CAAe,MAAM,MAAM,CAAA,CAAA;AAG9D,MAAY,WAAA,CAAA,QAAA,GAAW,IAAK,CAAA,QAAA,CAAS,MAAO,CAAA,SAAA,CAAA;AAC5C,MAAA,MAAM,EAAE,SAAU,EAAA,GAAI,MAAM,IAAK,CAAA,QAAA,CAAS,WAAW,kBAAmB,EAAA,CAAA;AACxE,MAAA,WAAA,CAAY,eAAkB,GAAA,SAAA,CAAA;AAG9B,MAAA,OAAO,IAAK,CAAA,QAAA,CAAS,cAAe,CAAA,WAAA,EAAa,OAAO,CAAA,CAAA;AAAA,KAC5D,CAAA,CAAA;AAAA,GAAA;AACJ,CAAA;AA1Ha,aAAA,CAMO,WAAc,GAAA,sBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjC3B,MAAM,kBAAmB,CAAA;AAAA,EAC5B,YAAoB,QAA0B,EAAA;AAA1B,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA,CAAA;AAAA,GAA4B;AAAA,EAGhD,IAAY,OAAiC,GAAA;AACzC,IAAM,MAAA,cAAA,GAAiBP,qCAChB,IAAK,CAAA,KAAA,CAAM,KAAK,SAAU,CAAA,eAAe,CAAC,CAD1B,CAAA,EAAA;AAAA,MAEnB,OAAA,EAAS,wBAAwB,QAAS,EAAA;AAAA,KAC9C,CAAA,CAAA;AACA,IAAA,OAAO,IAAIC,cAAA,CAAQ,cAAuB,EAAA,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,GAC3D;AAAA,EAGA,cAA4B,GAAA;AACxB,IAAO,OAAA,0BAAA,GAA6B,CAAC,CAAA,CAAA;AAAA,GACzC;AAAA,EAGA,oBAAoB,IAA4B,EAAA;AAC5C,IAAO,OAAA,mBAAA,CAAoB,IAAI,CAAA,CAAE,CAAC,CAAA,CAAA;AAAA,GACtC;AAAA,EAGM,QAAyB,GAAA;AAAA,IAAA,OAAAM,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC3B,MAAA,OAAO,KAAK,OAAQ,CAAA,OAAA,CAAQ,kBAAkB,KAAM,CAAA,IAAA,CAAK,gBAAgB,CAAA,CAAA;AAAA,KAC7E,CAAA,CAAA;AAAA,GAAA;AAAA,EAGM,cAAc,IAAsC,EAAA;AAAA,IAAA,OAAAA,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACtD,MAAI,IAAA;AACA,QAAA,OAAO,MAAM,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,UAAW,CAAA,KAAA;AAAA,UACzC,IAAA,CAAK,oBAAoB,IAAI,CAAA;AAAA,SACjC,CAAA;AAAA,OACI,CAAA,OAAA,CAAA,EAAA;AACJ,QAAO,OAAA,IAAA,CAAA;AAAA,OACX;AAAA,KACJ,CAAA,CAAA;AAAA,GAAA;AAAA,EAGM,2BAA2B,IAAuC,EAAA;AAAA,IAAA,OAAAA,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACpE,MAAM,MAAA,CAAC,QAAQ,CAAA,GAAI,0BAA2B,EAAA,CAAA;AAC9C,MAAA,MAAM,KAAK,MAAM,IAAA,CAAK,QAAQ,OACzB,CAAA,UAAA,GACA,QAAS,CAAA;AAAA,QACN,SAAW,EAAA,IAAA;AAAA,QACX,iBAAmB,EAAA,QAAA;AAAA,QACnB,eAAeG,qBAAc,CAAA,SAAA;AAAA,QAC7B,MAAMQ,WAAK,CAAA,kBAAA;AAAA,OACP,EACP,WAAY,EAAA,CAAA;AAEjB,MAAA,OAAO,IAAIF,mBAAA,EAAc,CAAA,GAAA,CAAI,EAAE,CAAA,CAAA;AAAA,KACnC,CAAA,CAAA;AAAA,GAAA;AAAA,EAGM,2BAA2B,IAAuC,EAAA;AAAA,IAAA,OAAAT,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACpE,MAAM,MAAA,QAAA,GAAW,KAAK,cAAe,EAAA,CAAA;AACrC,MAAM,MAAA,OAAA,GAAU,IAAK,CAAA,mBAAA,CAAoB,IAAI,CAAA,CAAA;AAG7C,MAAM,MAAA,KAAA,GAAa,MAAM,IAAA,CAAK,QAAS,EAAA,CAAA;AACvC,MAAA,MAAM,aAAwB,KAAM,CAAA,UAAA,CAAA;AACpC,MAAA,MAAM,OAAU,GAAAL,sCAAA;AAAA,QACZ,UAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACAC,8BAAA;AAAA,QACAC,oCAAA;AAAA,OACJ,CAAA;AAEA,MAAM,MAAA,CAAC,uBAAuB,CAAA,GAAIZ,iBAAU,CAAA,sBAAA;AAAA,QACxC,CAAC,MAAA,CAAO,IAAK,CAAA,kBAAkB,CAAC,CAAA;AAAA,QAChC,2BAAA;AAAA,OACJ,CAAA;AAEA,MAAA,MAAM,KAAK,MAAM,IAAA,CAAK,QAAQ,OACzB,CAAA,UAAA,GACA,QAAS,CAAA;AAAA,QACN,IAAA;AAAA,QACA,OAAA;AAAA,QACA,UAAY,EAAA,OAAA;AAAA,QACZ,SAAW,EAAA,IAAA;AAAA,QACX,KAAO,EAAA,IAAA;AAAA,QACP,iBAAmB,EAAA,QAAA;AAAA,QACnB,oBAAsB,EAAA,uBAAA;AAAA,QACtB,YAAc,EAAAW,8BAAA;AAAA,QACd,kBAAoB,EAAA,uBAAA;AAAA,QACpB,eAAeO,qBAAc,CAAA,SAAA;AAAA,OACzB,EACP,WAAY,EAAA,CAAA;AAEjB,MAAA,OAAO,IAAIM,mBAAA,EAAc,CAAA,GAAA,CAAI,EAAE,CAAA,CAAA;AAAA,KACnC,CAAA,CAAA;AAAA,GAAA;AAAA,EAGM,wBAAA,CAAyB,MAAiB,MAAsC,EAAA;AAAA,IAAA,OAAAT,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAClF,MAAM,MAAA,QAAA,GAAW,KAAK,cAAe,EAAA,CAAA;AACrC,MAAM,MAAA,OAAA,GAAU,IAAK,CAAA,mBAAA,CAAoB,IAAI,CAAA,CAAA;AAG7C,MAAM,MAAA,KAAA,GAAa,MAAM,IAAA,CAAK,QAAS,EAAA,CAAA;AACvC,MAAA,MAAM,aAAwB,KAAM,CAAA,UAAA,CAAA;AACpC,MAAA,MAAM,OAAU,GAAAL,sCAAA;AAAA,QACZ,UAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACAC,8BAAA;AAAA,QACAC,oCAAA;AAAA,OACJ,CAAA;AAEA,MAAM,MAAA,CAAC,uBAAuB,CAAA,GAAIZ,iBAAU,CAAA,sBAAA;AAAA,QACxC,CAAC,MAAA,CAAO,IAAK,CAAA,kBAAkB,CAAC,CAAA;AAAA,QAChC,2BAAA;AAAA,OACJ,CAAA;AACA,MAAM,MAAA,CAAC,iBAAiB,CAAA,GAAIA,iBAAU,CAAA,sBAAA;AAAA,QAClC,CAAC,MAAA,CAAO,IAAK,CAAA,iBAAiB,CAAC,CAAA;AAAA,QAC/B,2BAAA;AAAA,OACJ,CAAA;AAEA,MAAM,MAAA,EAAA,GAAK,MAAM,IAAA,CAAK,OAAQ,CAAA,OAAA,CACzB,QAAS,CAAA,IAAIiB,SAAG,CAAA,MAAM,CAAC,CAAA,CACvB,QAAS,CAAA;AAAA,QACN,IAAA;AAAA,QACA,OAAA;AAAA,QACA,UAAY,EAAA,OAAA;AAAA,QACZ,iBAAmB,EAAA,QAAA;AAAA,QACnB,UAAA;AAAA,QACA,YAAc,EAAAN,8BAAA;AAAA,QACd,sBAAwB,EAAA,2BAAA;AAAA,QACxB,oBAAsB,EAAA,uBAAA;AAAA,QACtB,mBAAqB,EAAA,iBAAA;AAAA,QACrB,kBAAoB,EAAA,uBAAA;AAAA,QACpB,eAAeO,qBAAc,CAAA,SAAA;AAAA,OACzB,EACP,WAAY,EAAA,CAAA;AAEjB,MAAA,OAAO,IAAIM,mBAAA,EAAc,CAAA,GAAA,CAAI,EAAE,CAAA,CAAA;AAAA,KACnC,CAAA,CAAA;AAAA,GAAA;AAAA,EAGM,6BAA6B,IAAuC,EAAA;AAAA,IAAA,OAAAT,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACtE,MAAM,MAAA,QAAA,GAAW,KAAK,cAAe,EAAA,CAAA;AACrC,MAAM,MAAA,OAAA,GAAU,IAAK,CAAA,mBAAA,CAAoB,IAAI,CAAA,CAAA;AAG7C,MAAM,MAAA,KAAA,GAAa,MAAM,IAAA,CAAK,QAAS,EAAA,CAAA;AACvC,MAAA,MAAM,aAAwB,KAAM,CAAA,UAAA,CAAA;AACpC,MAAA,MAAM,OAAU,GAAAL,sCAAA;AAAA,QACZ,UAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACAC,8BAAA;AAAA,QACAC,oCAAA;AAAA,OACJ,CAAA;AACA,MAAM,MAAA,CAAC,WAAW,CAAA,GAAI,4BAA6B,EAAA,CAAA;AAEnD,MAAA,MAAM,KAAK,MAAM,IAAA,CAAK,QAAQ,OACzB,CAAA,YAAA,GACA,QAAS,CAAA;AAAA,QACN,IAAA;AAAA,QACA,OAAA;AAAA,QACA,UAAY,EAAA,OAAA;AAAA,QACZ,iBAAmB,EAAA,QAAA;AAAA,QACnB,UAAA;AAAA,QACA,aAAe,EAAA,uBAAA;AAAA,QACf,mBAAqB,EAAA,WAAA;AAAA,QACrB,oBAAoBc,WAAK,CAAA,0BAAA;AAAA,QACzB,kBAAoB,EAAA,uBAAA;AAAA,QACpB,YAAc,EAAAf,8BAAA;AAAA,QACd,sBAAwB,EAAAC,oCAAA;AAAA,QACxB,eAAeM,qBAAc,CAAA,SAAA;AAAA,OACzB,EACP,WAAY,EAAA,CAAA;AAEjB,MAAA,OAAO,IAAIM,mBAAA,EAAc,CAAA,GAAA,CAAI,EAAE,CAAA,CAAA;AAAA,KACnC,CAAA,CAAA;AAAA,GAAA;AAAA,EAGM,gBACF,EAEe,EAAA;AAAA,IAFf,OAAAT,SAAA,CAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EACA,OAA8C,GAAA,EAC/B,EAAA;AACf,MAAG,EAAA,CAAA,QAAA,GAAW,IAAK,CAAA,QAAA,CAAS,MAAO,CAAA,SAAA,CAAA;AACnC,MAAA,MAAM,EAAE,SAAU,EAAA,GAAI,MAAM,IAAK,CAAA,QAAA,CAAS,WAAW,kBAAmB,EAAA,CAAA;AACxE,MAAA,EAAA,CAAG,eAAkB,GAAA,SAAA,CAAA;AACrB,MAAA,OAAO,IAAK,CAAA,QAAA,CAAS,cAAe,CAAA,EAAA,EAAI,OAAO,CAAA,CAAA;AAAA,KACnD,CAAA,CAAA;AAAA,GAAA;AAAA,EAGM,oBACF,EAC4C,EAAA;AAAA,IAAA,OAAAA,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC5C,MAAG,EAAA,CAAA,QAAA,GAAW,IAAK,CAAA,QAAA,CAAS,MAAO,CAAA,SAAA,CAAA;AACnC,MAAA,MAAM,EAAE,SAAU,EAAA,GAAI,MAAM,IAAK,CAAA,QAAA,CAAS,WAAW,kBAAmB,EAAA,CAAA;AACxE,MAAA,EAAA,CAAG,eAAkB,GAAA,SAAA,CAAA;AACrB,MAAA,MAAM,SAAY,GAAA,IAAIU,4BAAqB,CAAA,EAAA,CAAG,gBAAgB,CAAA,CAAA;AAC9D,MAAA,MAAM,MAAM,MAAM,IAAA,CAAK,QAAS,CAAA,UAAA,CAAW,oBAAoB,SAAW,EAAA;AAAA,QACtE,SAAW,EAAA,KAAA;AAAA,OACd,CAAA,CAAA;AACD,MAAO,OAAA,EAAE,KAAK,GAAI,CAAA,KAAA,CAAM,KAAK,aAAe,EAAA,GAAA,CAAI,MAAM,aAAe,EAAA,CAAA;AAAA,KACzE,CAAA,CAAA;AAAA,GAAA;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3NO,MAAM,0BAA2B,CAAA;AAAA,EACpC,YAAoB,QAA0B,EAAA;AAA1B,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA,CAAA;AAAA,GAA4B;AAAA,EAKhD,IAAY,OAAyC,GAAA;AACjD,IAAM,MAAA,cAAA,GAAiB,iCAChB,IAAK,CAAA,KAAA,CAAM,KAAK,SAAU,CAAA,uBAAuB,CAAC,CADlC,CAAA,EAAA;AAAA,MAEnB,OAAA,EAAS,iCAAiC,QAAS,EAAA;AAAA,KACvD,CAAA,CAAA;AACA,IAAA,OAAO,IAAIhB,cAAA,CAAQ,cAAuB,EAAA,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,GAC3D;AAAA,EAGA,aAA2B,GAAA;AACvB,IAAO,OAAA,wBAAA,GAA2B,CAAC,CAAA,CAAA;AAAA,GACvC;AAAA,EAGA,gBAAgB,WAAmC,EAAA;AAC/C,IAAO,OAAA,wBAAA,CAAyB,WAAW,CAAA,CAAE,CAAC,CAAA,CAAA;AAAA,GAClD;AAAA,EAKM,2BAA2B,SAA4C,EAAA;AAAA,IAAA,OAAAM,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACzE,MAAM,MAAA,CAAC,OAAO,CAAA,GAAI,wBAAyB,EAAA,CAAA;AAC3C,MAAA,MAAM,KAAK,MAAM,IAAA,CAAK,QAAQ,OACzB,CAAA,UAAA,GACA,QAAS,CAAA;AAAA,QACN,SAAA;AAAA,QACA,eAAiB,EAAA,OAAA;AAAA,QACjB,eAAeG,qBAAc,CAAA,SAAA;AAAA,OACzB,EACP,WAAY,EAAA,CAAA;AAEjB,MAAA,OAAO,IAAIM,mBAAA,EAAc,CAAA,GAAA,CAAI,EAAE,CAAA,CAAA;AAAA,KACnC,CAAA,CAAA;AAAA,GAAA;AAAA,EAKM,gCAAgC,MASb,EAAA;AAAA,IAAA,OAAAT,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACrB,MAAM,MAAA,EAAE,WAAW,UAAY,EAAA,WAAA,EAAa,KAAK,WAAa,EAAA,YAAA,EAAc,WAAa,EAAA,WAAA,EAAgB,GAAA,MAAA,CAAA;AACzG,MAAM,MAAA,CAAC,OAAO,CAAA,GAAI,wBAAyB,EAAA,CAAA;AAC3C,MAAA,MAAM,CAAC,MAAM,CAAI,GAAA,wBAAA,CAAyB,WAAW,CAAA,CAAA;AAErD,MAAA,MAAM,QAAgB,GAAA,cAAA,CAAA,cAAA,CAAA,cAAA,CAAA,cAAA,CAAA;AAAA,QAClB,UAAA;AAAA,QACA,WAAA;AAAA,QACA,eAAiB,EAAA,MAAA;AAAA,QACjB,eAAiB,EAAA,OAAA;AAAA,QACjB,eAAeG,qBAAc,CAAA,SAAA;AAAA,OAAA,EACzB,WAAe,IAAA,EAAE,WAAY,EAAA,CAAA,EAC7B,gBAAgB,EAAE,YAAA,EAClB,CAAA,EAAA,WAAA,IAAe,EAAE,WAAA,EACjB,CAAA,EAAA,WAAA,IAAe,EAAE,WAAY,EAAA,CAAA,CAAA;AAGrC,MAAA,MAAM,EAAK,GAAA,MAAM,IAAK,CAAA,OAAA,CAAQ,QACzB,eAAgB,CAAA,IAAID,SAAG,CAAA,GAAG,CAAC,CAAA,CAC3B,QAAS,CAAA,QAAQ,EACjB,WAAY,EAAA,CAAA;AAEjB,MAAA,OAAO,IAAIO,mBAAA,EAAc,CAAA,GAAA,CAAI,EAAE,CAAA,CAAA;AAAA,KACnC,CAAA,CAAA;AAAA,GAAA;AAAA,EAKM,iCAAiC,MAGd,EAAA;AAAA,IAAA,OAAAT,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACrB,MAAM,MAAA,EAAE,SAAW,EAAA,eAAA,EAAoB,GAAA,MAAA,CAAA;AACvC,MAAI,IAAA,eAAA,CAAgB,WAAW,EAAI,EAAA;AAC/B,QAAM,MAAA,IAAI,MAAM,mCAAmC,CAAA,CAAA;AAAA,OACvD;AACA,MAAM,MAAA,CAAC,QAAQ,CAAA,GAAI,mBAAoB,EAAA,CAAA;AACvC,MAAA,MAAM,KAAK,MAAM,IAAA,CAAK,QAAQ,OACzB,CAAA,gBAAA,CAAiB,eAAe,CAChC,CAAA,QAAA,CAAS,EAAE,SAAA,EAAW,OAAO,QAAU,EAAA,aAAA,EAAeG,sBAAc,SAAU,EAAQ,EACtF,WAAY,EAAA,CAAA;AAEjB,MAAA,OAAO,IAAIM,mBAAA,EAAc,CAAA,GAAA,CAAI,EAAE,CAAA,CAAA;AAAA,KACnC,CAAA,CAAA;AAAA,GAAA;AAAA,EAKM,cAAuC,GAAA;AAAA,IAAA,OAAAT,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACzC,MAAM,MAAA,CAAC,QAAQ,CAAA,GAAI,mBAAoB,EAAA,CAAA;AACvC,MAAO,OAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CACf,cAAe,EAAA,CACf,QAAS,CAAA,EAAE,KAAO,EAAA,QAAA,EAAiB,CAAA,CACnC,IAAK,EAAA,CAAA;AAAA,KACd,CAAA,CAAA;AAAA,GAAA;AAAA,EAKM,cAAuC,GAAA;AAAA,IAAA,OAAAA,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACzC,MAAM,MAAA,CAAC,OAAO,CAAA,GAAI,wBAAyB,EAAA,CAAA;AAC3C,MAAI,IAAA,WAAA,CAAA;AACJ,MAAI,IAAA;AACA,QAAA,WAAA,GAAc,MAAM,IAAK,CAAA,OAAA,CAAQ,OAAQ,CAAA,eAAA,CAAgB,MAAM,OAAO,CAAA,CAAA;AAAA,OAClE,CAAA,OAAA,CAAA,EAAA;AACJ,QAAA,OAAO,EAAC,CAAA;AAAA,OACZ;AACA,MAAA,MAAM,SAAsB,EAAC,CAAA;AAC7B,MAAA,IAAI,SAAoB,WAAY,CAAA,aAAA,CAAA;AACpC,MAAA,OAAO,UAAU,CAAC,MAAA,CAAO,MAAO,CAAAf,iBAAA,CAAU,OAAO,CAAG,EAAA;AAChD,QAAA,MAAA,CAAO,KAAK,MAAM,CAAA,CAAA;AAClB,QAAA,MAAM,MAAM,MAAM,IAAA,CAAK,QAAQ,OAAQ,CAAA,eAAA,CAAgB,MAAM,MAAM,CAAA,CAAA;AACnE,QAAA,MAAA,GAAS,GAAI,CAAA,aAAA,CAAA;AAAA,OACjB;AACA,MAAO,OAAA,MAAA,CAAA;AAAA,KACX,CAAA,CAAA;AAAA,GAAA;AAAA,EAKM,UAAU,WAA6C,EAAA;AAAA,IAAA,OAAAe,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACzD,MAAA,MAAM,CAAC,MAAM,CAAI,GAAA,wBAAA,CAAyB,WAAW,CAAA,CAAA;AACrD,MAAI,IAAA;AACA,QAAA,OAAO,MAAM,IAAK,CAAA,OAAA,CAAQ,OAAQ,CAAA,eAAA,CAAgB,MAAM,MAAM,CAAA,CAAA;AAAA,OAC1D,CAAA,OAAA,CAAA,EAAA;AACJ,QAAO,OAAA,IAAA,CAAA;AAAA,OACX;AAAA,KACJ,CAAA,CAAA;AAAA,GAAA;AAAA,EAKM,gBACF,EAEe,EAAA;AAAA,IAFf,OAAAA,SAAA,CAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EACA,OAA8C,GAAA,EAC/B,EAAA;AACf,MAAG,EAAA,CAAA,QAAA,GAAW,IAAK,CAAA,QAAA,CAAS,MAAO,CAAA,SAAA,CAAA;AACnC,MAAA,MAAM,EAAE,SAAU,EAAA,GAAI,MAAM,IAAK,CAAA,QAAA,CAAS,WAAW,kBAAmB,EAAA,CAAA;AACxE,MAAA,EAAA,CAAG,eAAkB,GAAA,SAAA,CAAA;AACrB,MAAA,OAAO,IAAK,CAAA,QAAA,CAAS,cAAe,CAAA,EAAA,EAAI,OAAO,CAAA,CAAA;AAAA,KACnD,CAAA,CAAA;AAAA,GAAA;AAAA,EAKM,oBACF,EAC4C,EAAA;AAAA,IAAA,OAAAA,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC5C,MAAG,EAAA,CAAA,QAAA,GAAW,IAAK,CAAA,QAAA,CAAS,MAAO,CAAA,SAAA,CAAA;AACnC,MAAA,MAAM,EAAE,SAAU,EAAA,GAAI,MAAM,IAAK,CAAA,QAAA,CAAS,WAAW,kBAAmB,EAAA,CAAA;AACxE,MAAA,EAAA,CAAG,eAAkB,GAAA,SAAA,CAAA;AACrB,MAAA,MAAM,SAAY,GAAA,IAAIU,4BAAqB,CAAA,EAAA,CAAG,gBAAgB,CAAA,CAAA;AAC9D,MAAM,MAAA,GAAA,GAAM,MAAM,IAAA,CAAK,QAAS,CAAA,UAAA,CAAW,oBAAoB,SAAW,EAAA,EAAE,SAAW,EAAA,KAAA,EAAO,CAAA,CAAA;AAC9F,MAAO,OAAA,EAAE,KAAK,GAAI,CAAA,KAAA,CAAM,KAAK,aAAe,EAAA,GAAA,CAAI,MAAM,aAAe,EAAA,CAAA;AAAA,KACzE,CAAA,CAAA;AAAA,GAAA;AACJ;;;;;;;;;;;;;;;;;;;;;;AClKA,MAAM,UAAyB,GAAA,WAAA,CAAA;AAExB,MAAM,mBAA8C,CAAA;AAAA,EAavD,YAAoB,MAAsB,EAAA;AAAtB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AAEhB,IAAA,MAAM,UAAU,MAAO,CAAA,QAAA,CAAA;AACvB,IAAI,IAAA,CAAC,QAAQ,SAAW,EAAA;AACpB,MAAM,MAAA,IAAI,MAAM,qCAAqC,CAAA,CAAA;AAAA,KACzD;AAGA,IAAA,MAAM,SAAS,OAAQ,CAAA,SAAA,CAAA;AACvB,IAAA,MAAM,UAAU,IAAIzB,cAAA,CAAU2B,aAAQ,EAAI,EAAA,MAAA,CAAO,SAAS,CAAA,CAAA;AAC1D,IAAA,IAAI,CAAC,OAAA,CAAQ,MAAO,CAAA,MAAA,CAAO,MAAM,CAAG,EAAA;AAChC,MAAM,MAAA,IAAI,MAAM,kDAAmD,CAAA,CAAA;AAAA,KACvE;AAEA,IAAA,IAAA,CAAK,MAAS,GAAA,OAAA,CAAA;AACd,IAAK,IAAA,CAAA,UAAA,GAAa,IAAIC,kBAAW,CAAA,MAAA,CAAO,QAAQ,OAAQ,CAAA,CAAC,GAAG,UAAU,CAAA,CAAA;AAEtE,IAAA,MAAM,YAAe,GAAA;AAAA,MACjB,SAAW,EAAA,MAAA;AAAA,MACL,gBAA6C,EAAmB,EAAA;AAAA,QAAA,OAAAb,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAClE,UAAO,OAAA,OAAA,CAAQ,gBAAgB,EAAE,CAAA,CAAA;AAAA,SACrC,CAAA,CAAA;AAAA,OAAA;AAAA,MACM,oBAAiD,GAAwB,EAAA;AAAA,QAAA,OAAAA,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC3E,UAAO,OAAA,OAAA,CAAQ,GAAI,CAAA,GAAA,CAAI,GAAI,CAAA,CAAC,OAAO,OAAQ,CAAA,eAAA,CAAgB,EAAE,CAAC,CAAC,CAAA,CAAA;AAAA,SACnE,CAAA,CAAA;AAAA,OAAA;AAAA,KACJ,CAAA;AAEA,IAAA,IAAA,CAAK,SAAS,IAAIc,qBAAA;AAAA,MACd,IAAK,CAAA,UAAA;AAAA,MACL,YAAA;AAAA,MACA,EAAE,UAAW,EAAA;AAAA,KACjB,CAAA;AAGA,IAAA,IAAA,CAAK,aAAgB,GAAA,IAAI,aAAc,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAClD,IAAA,IAAA,CAAK,kBAAqB,GAAA,IAAI,kBAAmB,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAC5D,IAAA,IAAA,CAAK,iBAAoB,GAAA,IAAI,0BAA2B,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,GACvE;AAAA,EAzCA,IAAI,SAAuB,GAAA;AACvB,IAAO,OAAA,IAAA,CAAK,OAAO,MAAO,CAAA,SAAA,CAAA;AAAA,GAC9B;AAAA,EAyCM,QAAQ,MAAiC,EAAA;AAAA,IAAA,OAAAd,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC3C,MAAM,MAAA,EAAA,GAAK,MAAM,IAAA,CAAK,aAAc,CAAA,cAAA;AAAA,QAChC,IAAIe,iBAAA,CAAU,IAAK,CAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,QACpC,MAAA;AAAA,OACJ,CAAA;AACA,MAAA,MAAM,MAAS,GAAA,MAAM,IAAK,CAAA,eAAA,CAAgB,GAAG,WAAW,CAAA,CAAA;AACxD,MAAO,OAAA,IAAA,CAAK,gBAAgB,MAAM,CAAA,CAAA;AAAA,KACtC,CAAA,CAAA;AAAA,GAAA;AAAA,EAEM,gBAAgB,EAAmD,EAAA;AAAA,IAAA,OAAAf,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACrE,MAAA,OAAO,MAAM,IAAA,CAAK,MAAO,CAAA,MAAA,CAAO,gBAAgB,EAAE,CAAA,CAAA;AAAA,KACtD,CAAA,CAAA;AAAA,GAAA;AAAA,EAEM,gBAAgB,MAA0D,EAAA;AAAA,IAAA,OAAAA,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC5E,MAAA,OAAO,MAAM,IAAA,CAAK,MAAO,CAAA,cAAA,CAAe,MAAM,CAAA,CAAA;AAAA,KAClD,CAAA,CAAA;AAAA,GAAA;AACJ;;AC/EO,MAAM,MAAO,CAAA;AAAA,EAGhB,YAAY,MAAuC,EAAA;AAFnD,IAAQ,IAAA,CAAA,OAAA,QAA4C,GAAI,EAAA,CAAA;AAGpD,IAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,MAAM,CAAG,EAAA,MAAA,GAAS,CAAC,MAAM,CAAA,CAAA;AAE5C,IAAO,MAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACpB,MAAQ,QAAA,GAAA,CAAI,QAAQ,OAAS;AAAA,QACzB,KAAKgB,eAAW,CAAA,OAAA;AACZ,UAAA,IAAA,CAAK,QAAQ,GAAI,CAAAA,eAAA,CAAW,SAAS,IAAI,mBAAA,CAAoB,GAAG,CAAC,CAAA,CAAA;AACjE,UAAA,MAAA;AAAA,QAKR;AACI,UAAA,MAAM,IAAI,KAAM,CAAA,CAAA,2BAAA,EAA8B,GAAI,CAAA,OAAA,CAAQ,IAAI,CAAE,CAAA,CAAA,CAAA;AAAA,OAEpE;AAAA,KACH,CAAA,CAAA;AAAA,GACL;AAAA,EAEA,QAAQ,MAAiC,EAAA;AACrC,IAAA,IAAI,CAAC,IAAK,CAAA,OAAA,CAAQ,GAAI,CAAAA,eAAA,CAAW,OAAO,CAAG,EAAA;AACvC,MAAM,MAAA,IAAI,MAAM,2CAA2C,CAAA,CAAA;AAAA,KAC/D;AACA,IAAA,OAAO,KAAK,OAAQ,CAAA,GAAA,CAAIA,gBAAW,OAAO,CAAA,CAAG,QAAQ,MAAM,CAAA,CAAA;AAAA,GAC/D;AAGJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLO,MAAM,WAAW,aAAc,CAAA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"}
|
package/lib/stake.m.js
CHANGED
|
@@ -5381,7 +5381,7 @@ class SolanaStakingClient {
|
|
|
5381
5381
|
const solPub = adapter.publicKey;
|
|
5382
5382
|
const wirePub = new PublicKey$1(KeyType.ED, solPub.toBytes());
|
|
5383
5383
|
if (!wirePub.equals(config.pubKey)) {
|
|
5384
|
-
throw new Error("Passed-in pubKey doesn
|
|
5384
|
+
throw new Error("Passed-in pubKey doesn't match adapter.publicKey");
|
|
5385
5385
|
}
|
|
5386
5386
|
this.pubKey = wirePub;
|
|
5387
5387
|
this.connection = new Connection(config.network.rpcUrls[0], commitment);
|
|
@@ -5394,14 +5394,17 @@ class SolanaStakingClient {
|
|
|
5394
5394
|
return Promise.all(txs.map((tx) => adapter.signTransaction(tx)));
|
|
5395
5395
|
}
|
|
5396
5396
|
};
|
|
5397
|
-
this.
|
|
5397
|
+
this.anchor = new AnchorProvider(
|
|
5398
5398
|
this.connection,
|
|
5399
5399
|
anchorWallet,
|
|
5400
5400
|
{ commitment }
|
|
5401
5401
|
);
|
|
5402
|
-
this.depositClient = new DepositClient(this.
|
|
5403
|
-
this.distributionClient = new DistributionClient(this.
|
|
5404
|
-
this.leaderboardClient = new ValidatorLeaderboardClient(this.
|
|
5402
|
+
this.depositClient = new DepositClient(this.anchor);
|
|
5403
|
+
this.distributionClient = new DistributionClient(this.anchor);
|
|
5404
|
+
this.leaderboardClient = new ValidatorLeaderboardClient(this.anchor);
|
|
5405
|
+
}
|
|
5406
|
+
get solPubKey() {
|
|
5407
|
+
return this.anchor.wallet.publicKey;
|
|
5405
5408
|
}
|
|
5406
5409
|
async deposit(amount) {
|
|
5407
5410
|
const tx = await this.depositClient.buildDepositTx(
|
|
@@ -5412,10 +5415,10 @@ class SolanaStakingClient {
|
|
|
5412
5415
|
return this.sendTransaction(signed);
|
|
5413
5416
|
}
|
|
5414
5417
|
async signTransaction(tx) {
|
|
5415
|
-
return await this.
|
|
5418
|
+
return await this.anchor.wallet.signTransaction(tx);
|
|
5416
5419
|
}
|
|
5417
5420
|
async sendTransaction(signed) {
|
|
5418
|
-
return await this.
|
|
5421
|
+
return await this.anchor.sendAndConfirm(signed);
|
|
5419
5422
|
}
|
|
5420
5423
|
}
|
|
5421
5424
|
|