{"version":3,"sources":["../src/version.ts","../src/walletAdapter.ts","../src/helper.ts","../src/constant.ts","../src/idl/solana_vault.ts","../src/solana.util.ts"],"sourcesContent":["declare global {\n  interface Window {\n      __ORDERLY_VERSION__?: {\n          [key: string]: string;\n      };\n  }\n}\nif (typeof window !== \"undefined\") {\n  window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n  window.__ORDERLY_VERSION__[\"@orderly.network/default-solana-adapter\"] = \"3.1.7\";\n}\n\nexport default \"3.1.7\";\n","import * as ed from \"@noble/ed25519\";\nimport { getAccount } from \"@solana/spl-token\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport {\n  clusterApiUrl,\n  Connection,\n  PublicKey,\n  Transaction,\n  TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { encode as bs58encode } from \"bs58\";\nimport { bytesToHex } from \"ethereum-cryptography/utils\";\nimport {\n  AddOrderlyKeyInputs,\n  BaseWalletAdapter,\n  Message,\n  RegisterAccountInputs,\n  SettleInputs,\n  SignatureDomain,\n  SimpleDI,\n  WithdrawInputs,\n  Account,\n  MessageFactor,\n  DexRequestInputs,\n  InternalTransferInputs,\n} from \"@orderly.network/core\";\nimport {\n  API,\n  MaxUint256,\n  ChainNamespace,\n  isNativeTokenChecker,\n} from \"@orderly.network/types\";\nimport {\n  addOrderlyKeyMessage,\n  checkIsLedgerWallet,\n  deposit,\n  getDepositQuoteFee,\n  registerAccountMessage,\n  settleMessage,\n  internalTransferMessage,\n  withdrawMessage,\n  dexRequestMessage,\n} from \"./helper\";\nimport { getTokenAccounts } from \"./solana.util\";\nimport { SolanaAdapterOption, SolanaWalletProvider } from \"./types\";\n\nclass DefaultSolanaWalletAdapter extends BaseWalletAdapter<SolanaAdapterOption> {\n  chainNamespace: ChainNamespace = ChainNamespace.solana;\n\n  private _address!: string;\n  private _chainId!: number;\n  private _provider!: SolanaWalletProvider;\n  private _connection!: Connection;\n\n  constructor() {\n    super();\n  }\n\n  get address(): string {\n    return this._address;\n  }\n\n  get chainId(): number {\n    return this._chainId;\n  }\n\n  set chainId(chainId: number) {\n    this._chainId = chainId;\n  }\n\n  get connection(): Connection {\n    if (this._connection) {\n      return this._connection;\n    }\n    if (this._provider.rpcUrl) {\n      this._connection = new Connection(this._provider.rpcUrl, {\n        commitment: \"confirmed\",\n      });\n      return this._connection;\n    }\n    if (this._provider.network === WalletAdapterNetwork.Devnet) {\n      this._connection = new Connection(clusterApiUrl(this._provider.network), {\n        commitment: \"confirmed\",\n      });\n      return this._connection;\n    }\n\n    const account = SimpleDI.get<Account>(\"account\");\n    const url = \"/v1/solana-rpc-proxy\";\n    this._connection = new Connection(`${account.apiBaseUrl}${url}`, {\n      commitment: \"confirmed\",\n      fetchMiddleware: async (info, init, fetch) => {\n        const payload: MessageFactor = {\n          url,\n          method: init?.method as \"GET\" | \"POST\" | \"PUT\" | \"DELETE\",\n          data: JSON.parse(init?.body as string),\n        };\n        // console.log('payload', payload);\n        const signature = await this.signMessageByOrderlyKey(payload);\n        for (const key of Object.keys(signature)) {\n          (init?.headers as any)[key] = signature[\n            key as keyof typeof signature\n          ] as string;\n        }\n        return fetch(info, init);\n      },\n    });\n    return this._connection;\n  }\n\n  private setConfig(config: SolanaAdapterOption) {\n    this._address = config.address;\n    this._chainId = config.chain.id;\n    if (config.provider) {\n      this._provider = config.provider;\n    }\n  }\n\n  private lifecycleName(name: string, data: any) {\n    console.log(\"lifecycle\", name, data);\n  }\n\n  active(config: SolanaAdapterOption): void {\n    this.setConfig(config);\n    this.lifecycleName(\"active\", config);\n  }\n\n  deactivate(): void {\n    this.lifecycleName(\"deactivate\", {});\n  }\n\n  update(config: SolanaAdapterOption): void {\n    this.lifecycleName(\"update\", config);\n    this.setConfig(config);\n  }\n\n  generateSecretKey(): string {\n    let privKey, secretKey;\n    do {\n      privKey = ed.utils.randomPrivateKey();\n      secretKey = bs58encode(privKey);\n    } while (secretKey.length !== 44);\n\n    return secretKey;\n  }\n\n  uint8ArrayToHexString(uint8Array: Uint8Array): string {\n    return Array.from(uint8Array)\n      .map((byte) => byte.toString(16).padStart(2, \"0\"))\n      .join(\"\");\n  }\n\n  async signMessage(message: Uint8Array): Promise<string> {\n    const isLedger = checkIsLedgerWallet(this._address);\n    // test ledger wallet\n    // if (!isLedger) {\n    //   console.log(\"-- test error\");\n    //   throw new Error(\n    //     \"xxx Signing off chain messages with Ledger is not yet supported\"\n    //   );\n    // }\n\n    if (isLedger) {\n      const transaction = new Transaction();\n\n      transaction.add(\n        new TransactionInstruction({\n          keys: [],\n          programId: new PublicKey(\n            \"ComputeBudget111111111111111111111111111111\",\n          ),\n          data: new Uint8Array([3, 0, 0, 0, 0, 0, 0, 0, 0]) as any,\n        }),\n      );\n\n      transaction.add(\n        new TransactionInstruction({\n          keys: [],\n          programId: new PublicKey(\n            \"ComputeBudget111111111111111111111111111111\",\n          ),\n          data: new Uint8Array([2, 0, 0, 0, 0]) as any,\n        }),\n      );\n\n      transaction.add(\n        new TransactionInstruction({\n          keys: [],\n          programId: new PublicKey(\n            \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\",\n          ),\n          data: message as any,\n        }),\n      );\n\n      const userPublicKey = new PublicKey(this.address);\n\n      transaction.feePayer = userPublicKey;\n\n      const zeroHash = new Uint8Array(32).fill(0);\n      transaction.recentBlockhash = new PublicKey(zeroHash).toString();\n\n      const signedTransaction =\n        await this._provider.signTransaction(transaction);\n\n      const signature = signedTransaction.signatures[0].signature;\n      if (signature) {\n        return this.uint8ArrayToHexString(signature as any);\n      } else {\n        console.log(\"-- sign message error\", signature);\n        throw new Error(\"Unsupported signature\");\n      }\n    }\n    const signRes = await this._provider.signMessage(message);\n    return \"0x\" + bytesToHex(signRes);\n  }\n\n  async generateRegisterAccountMessage(\n    inputs: RegisterAccountInputs,\n  ): Promise<Message> {\n    const [message, toSignatureMessage] = registerAccountMessage({\n      ...inputs,\n      chainId: this.chainId,\n    });\n\n    const signature = await this.signMessage(toSignatureMessage as Uint8Array);\n\n    return {\n      message: {\n        ...message,\n        chainType: \"SOL\",\n      },\n      signatured: signature,\n    };\n  }\n\n  async generateWithdrawMessage(\n    inputs: WithdrawInputs,\n  ): Promise<Message & { domain: SignatureDomain }> {\n    const [message, toSignatureMessage] = withdrawMessage({\n      ...inputs,\n      chainId: this.chainId,\n    });\n    const signature = await this.signMessage(toSignatureMessage as Uint8Array);\n\n    return {\n      message: {\n        ...message,\n        chainType: \"SOL\",\n      },\n      domain: {\n        name: \"\",\n        version: \"\",\n        chainId: this.chainId,\n        verifyingContract: inputs.verifyContract!,\n      },\n      signatured: signature,\n    };\n  }\n\n  async generateInternalTransferMessage(\n    inputs: InternalTransferInputs,\n  ): Promise<Message & { domain: SignatureDomain }> {\n    const [message, toSignatureMessage] = internalTransferMessage({\n      ...inputs,\n      chainId: this.chainId,\n    });\n    const signature = await this.signMessage(toSignatureMessage as Uint8Array);\n\n    return {\n      message: {\n        ...message,\n        chainType: \"SOL\",\n      },\n      domain: {\n        name: \"\",\n        version: \"\",\n        chainId: this.chainId,\n        verifyingContract: inputs.verifyContract!,\n      },\n      signatured: signature,\n    };\n  }\n\n  async generateAddOrderlyKeyMessage(\n    inputs: AddOrderlyKeyInputs,\n  ): Promise<Message> {\n    const [message, toSignatureMessage] = addOrderlyKeyMessage({\n      ...inputs,\n      chainId: this.chainId,\n    });\n    const signature = await this.signMessage(toSignatureMessage as Uint8Array);\n\n    return {\n      message: {\n        ...message,\n        chainType: \"SOL\",\n      },\n      signatured: signature,\n    };\n  }\n\n  async generateSettleMessage(\n    inputs: SettleInputs,\n  ): Promise<Message & { domain: SignatureDomain }> {\n    const [message, toSignatureMessage] = settleMessage({\n      ...inputs,\n      chainId: this.chainId,\n    });\n    const signature = await this.signMessage(toSignatureMessage as Uint8Array);\n    return {\n      message: {\n        ...message,\n        chainType: \"SOL\",\n      },\n      domain: {\n        name: \"\",\n        version: \"\",\n        chainId: this.chainId,\n        verifyingContract: inputs.verifyContract!,\n      },\n      signatured: signature,\n    };\n  }\n\n  async generateDexRequestMessage(inputs: DexRequestInputs): Promise<\n    Message & {\n      domain: SignatureDomain;\n    }\n  > {\n    const [message, toSignatureMessage] = await dexRequestMessage({\n      ...inputs,\n      chainId: this.chainId,\n    });\n\n    // use signMessage method to sign, instead of signTypedData\n    const signature = await this.signMessage(toSignatureMessage as Uint8Array);\n\n    return {\n      message: {\n        ...inputs,\n        chainType: \"SOL\",\n      },\n      signatured: signature,\n      domain: inputs.domain,\n    };\n  }\n\n  async getBalance(): Promise<bigint> {\n    const publicKey = new PublicKey(this.address);\n    const lamports = await this.connection.getBalance(publicKey);\n    return BigInt(lamports);\n  }\n\n  async getBalances(addresses: string[]) {\n    const userPublicKey = new PublicKey(this._address);\n    const connection = this.connection;\n\n    // Check which addresses are native SOL vs SPL tokens\n    const isNativeToken = addresses.map((address) =>\n      isNativeTokenChecker(address),\n    );\n\n    // Get native SOL balance once (if any address is SOL)\n    const hasNativeSOL = addresses.some((address) =>\n      isNativeTokenChecker(address),\n    );\n    let nativeSolBalance: bigint | null = null;\n    if (hasNativeSOL) {\n      nativeSolBalance = await this.getBalance();\n    }\n\n    // Get SPL token accounts for non-SOL addresses\n    const splTokenAddresses = addresses.filter(\n      (address) => !isNativeTokenChecker(address),\n    );\n\n    let splTokenBalances: bigint[] = [];\n\n    if (splTokenAddresses.length > 0) {\n      const tokenPublicKeys = splTokenAddresses.map(\n        (address) => new PublicKey(address),\n      );\n      const userTokenAccounts = tokenPublicKeys.map((tokenPublicKey) =>\n        getTokenAccounts(tokenPublicKey, userPublicKey),\n      );\n\n      // Fetch each token account individually to handle missing accounts gracefully\n      splTokenBalances = await Promise.all(\n        userTokenAccounts.map(async (account) => {\n          try {\n            const tokenAccount = await getAccount(\n              connection,\n              account,\n              \"confirmed\",\n            );\n            return tokenAccount.amount;\n          } catch (err: any) {\n            if (err?.name === \"TokenAccountNotFoundError\") {\n              return 0n;\n            }\n            throw err;\n          }\n        }),\n      );\n    }\n\n    // Combine results in original order\n    const results: bigint[] = [];\n    let splIndex = 0;\n    for (let i = 0; i < addresses.length; i++) {\n      if (isNativeToken[i]) {\n        results.push(nativeSolBalance!);\n      } else {\n        results.push(splTokenBalances[splIndex]);\n        splIndex++;\n      }\n    }\n\n    return results;\n  }\n\n  async getBalanceByAddress(address: string): Promise<bigint> {\n    const tokenPublicKey = new PublicKey(address);\n    const userPublicKey = new PublicKey(this._address);\n    const userTokenAccount = getTokenAccounts(tokenPublicKey, userPublicKey);\n    const connection = this.connection;\n\n    const tokenAmount = await getAccount(\n      connection,\n      userTokenAccount,\n      \"confirmed\",\n    );\n    return tokenAmount.amount;\n  }\n\n  async call(\n    address: string,\n    method: string,\n    params: any[],\n    options?: {\n      abi: any;\n    },\n  ) {\n    if (method === \"balanceOf\") {\n      return this.getBalanceByAddress(address);\n    }\n    if (method === \"allowance\") {\n      // sol does not require allowance\n      return MaxUint256;\n    }\n    return BigInt(0);\n  }\n\n  async sendTransaction(\n    contractAddress: string,\n    method: string,\n    payload: {\n      from: string;\n      to?: string;\n      data: any[];\n      value?: bigint;\n    },\n    options: {\n      abi: any;\n    },\n  ) {\n    console.log(\"-- solanan sendTransaction\", {\n      contractAddress,\n      method,\n      payload,\n      options,\n    });\n    if (method === \"deposit\") {\n      return deposit({\n        vaultAddress: contractAddress,\n        userAddress: this._address,\n        connection: this.connection,\n        depositData: payload.data[0],\n        sendTransaction: this._provider.sendTransaction,\n      });\n    }\n  }\n\n  async callOnChain(\n    chain: API.NetworkInfos,\n    address: string,\n    method: string,\n    params: any[],\n    options: {\n      abi: any;\n    },\n  ): Promise<any> {\n    console.log(\"-- params \", {\n      chain,\n      address,\n      method,\n      params,\n    });\n    if (method === \"getDepositFee\") {\n      return getDepositQuoteFee({\n        vaultAddress: address,\n        userAddress: this._address,\n        connection: this.connection,\n        depositData: params[1],\n      });\n    }\n    return 0;\n  }\n\n  async estimateGasFee(\n    contractAddress: string,\n    method: string,\n    payload: {\n      from: string;\n      to?: string;\n      data: any[];\n      value?: bigint;\n    },\n  ): Promise<bigint> {\n    return BigInt(0);\n  }\n\n  async pollTransactionReceiptWithBackoff(\n    txHash: string,\n    baseInterval?: number,\n    maxInterval?: number,\n    maxRetries?: number,\n  ): Promise<any> {\n    return Promise.resolve({ status: 1 });\n  }\n}\n\nexport { DefaultSolanaWalletAdapter };\n","import { BN, Program } from \"@coral-xyz/anchor\";\nimport type { WalletAdapterProps } from \"@solana/wallet-adapter-base\";\nimport {\n  ComputeBudgetProgram,\n  Connection,\n  PublicKey,\n  SystemProgram,\n  TransactionMessage,\n  VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { decode as bs58Decode } from \"bs58\";\nimport { Hash } from \"crypto\";\nimport { keccak256 } from \"ethereum-cryptography/keccak\";\nimport { bytesToHex, hexToBytes } from \"ethereum-cryptography/utils\";\nimport { AbiCoder, solidityPackedKeccak256 } from \"ethers\";\nimport {\n  utils as CoreUtils,\n  AddOrderlyKeyInputs,\n  RegisterAccountInputs,\n  type SettleInputs,\n  type SignatureDomain,\n  type WithdrawInputs,\n  InternalTransferInputs,\n} from \"@orderly.network/core\";\nimport { DexRequestInputs } from \"@orderly.network/core\";\nimport {\n  DEFAUL_ORDERLY_KEY_SCOPE,\n  LedgerWalletKey,\n} from \"@orderly.network/types\";\nimport {\n  ENDPOINT_PROGRAM_ID,\n  EXECUTOR_PROGRAM_ID,\n  PRICE_FEED_PROGRAM_ID,\n  SEND_LIB_PROGRAM_ID,\n  TREASURY_PROGRAM_ID,\n} from \"./constant\";\nimport { IDL as VaultIDL, SolanaVault } from \"./idl/solana_vault\";\nimport {\n  appendDvnDepositRemainingAccounts,\n  appendDvnQuoteRemainingAccounts,\n  getBrokerPDA,\n  getDefaultSendConfigPda,\n  getDefaultSendLibConfigPda,\n  getDstEID,\n  getEndorcedOptionsPda,\n  getEndpointSettingPda,\n  getEventAuthorityPda,\n  getExecutorConfigPda,\n  getLookupTableAccount,\n  getLookupTableAddress,\n  getMessageLibInfoPda,\n  getMessageLibPda,\n  getNoncePda,\n  getOAppConfigPda,\n  getPeerAddress,\n  getPeerPda,\n  getPriceFeedPda,\n  getSendConfigPda,\n  getSendLibConfigPda,\n  getSendLibInfoPda,\n  getSendLibPda,\n  getTokenPDA,\n  getUlnEventAuthorityPda,\n  getUlnSettingPda,\n  getTokenAccounts,\n  getVaultAuthorityPda,\n  getSolVaultPda,\n} from \"./solana.util\";\n\nexport function addOrderlyKeyMessage(\n  inputs: AddOrderlyKeyInputs & { chainId: number },\n) {\n  const {\n    publicKey,\n    brokerId,\n    expiration = 365,\n    timestamp = Date.now(),\n    scope,\n    tag,\n    chainId,\n    subAccountId,\n  } = inputs;\n  const message = {\n    brokerId: brokerId,\n    chainType: \"SOL\",\n    orderlyKey: publicKey,\n    scope: scope || DEFAUL_ORDERLY_KEY_SCOPE,\n    chainId,\n    timestamp,\n    expiration: timestamp + 1000 * 60 * 60 * 24 * expiration,\n    ...(typeof tag !== \"undefined\" ? { tag } : {}),\n    ...(typeof subAccountId !== \"undefined\" ? { subAccountId } : {}),\n  };\n\n  const brokerIdHash = solidityPackedKeccak256([\"string\"], [message.brokerId]);\n\n  const orderlyKeyHash = solidityPackedKeccak256(\n    [\"string\"],\n    [message.orderlyKey],\n  );\n  const scopeHash = solidityPackedKeccak256([\"string\"], [message.scope]);\n  const abicoder = AbiCoder.defaultAbiCoder();\n  const msgToSign = keccak256(\n    hexToBytes(\n      abicoder.encode(\n        [\"bytes32\", \"bytes32\", \"bytes32\", \"uint256\", \"uint256\", \"uint256\"],\n        [\n          brokerIdHash,\n          orderlyKeyHash,\n          scopeHash,\n          message.chainId,\n          message.timestamp,\n          message.expiration,\n        ],\n      ),\n    ),\n  );\n  const msgToSignHex = bytesToHex(msgToSign);\n  const msgToSignTextEncoded: Uint8Array = new TextEncoder().encode(\n    msgToSignHex,\n  );\n  return [message, msgToSignTextEncoded];\n}\n\nexport function registerAccountMessage(\n  inputs: RegisterAccountInputs & {\n    chainId: number;\n  },\n) {\n  const { chainId, registrationNonce, brokerId, timestamp } = inputs;\n\n  const message = {\n    brokerId,\n    chainId,\n    timestamp,\n    registrationNonce,\n  };\n  const brokerIdHash = solidityPackedKeccak256([\"string\"], [message.brokerId]);\n  const abicoder = AbiCoder.defaultAbiCoder();\n  const msgToSign = keccak256(\n    hexToBytes(\n      abicoder.encode(\n        [\"bytes32\", \"uint256\", \"uint256\", \"uint256\"],\n        [\n          brokerIdHash,\n          message.chainId,\n          message.timestamp,\n          message.registrationNonce,\n        ],\n      ),\n    ),\n  );\n  const msgToSignHex = bytesToHex(msgToSign);\n  const msgToSignTextEncoded: Uint8Array = new TextEncoder().encode(\n    msgToSignHex,\n  );\n  return [message, msgToSignTextEncoded];\n}\n\nexport function internalTransferMessage(\n  inputs: InternalTransferInputs & {\n    chainId: number;\n  },\n) {\n  const { chainId, receiver, token, amount, nonce } = inputs;\n  const message = {\n    chainId,\n    receiver,\n    token,\n    amount,\n    transferNonce: nonce,\n    chainType: \"SOL\",\n  };\n\n  const tokenSymbolHash = solidityPackedKeccak256([\"string\"], [message.token]);\n\n  const abicoder = AbiCoder.defaultAbiCoder();\n  // StaticStruct staticStruct = new StaticStruct(\n  //   new Bytes32(Numeric.hexStringToByteArray(receiver)),\n  //   new Bytes32(Numeric.hexStringToByteArray(Hash.sha3(TypeEncoder.encodePacked(new Utf8String(token))))),\n  //   new Uint256(amount),\n  //   new Uint64(transferNonce),\n  //   new Uint256(Long.parseLong(chainId))\n  // );\n  const msgToSign = keccak256(\n    hexToBytes(\n      abicoder.encode(\n        [\"bytes32\", \"bytes32\", \"uint256\", \"uint64\", \"uint256\"],\n        [\n          message.receiver,\n          tokenSymbolHash,\n          message.amount,\n          message.transferNonce,\n          chainId,\n        ],\n      ),\n    ),\n  );\n  const msgToSignHex = bytesToHex(msgToSign);\n  const msgToSignTextEncoded: Uint8Array = new TextEncoder().encode(\n    msgToSignHex,\n  );\n  return [message, msgToSignTextEncoded];\n}\n\nexport async function dexRequestMessage(\n  inputs: DexRequestInputs & {\n    domain: SignatureDomain;\n    chainId: number;\n  },\n) {\n  const {\n    payloadType,\n    nonce,\n    receiver,\n    amount,\n    vaultId,\n    token,\n    dexBrokerId,\n    chainId,\n  } = inputs;\n\n  const message = {\n    payloadType,\n    nonce,\n    receiver,\n    amount,\n    vaultId,\n    token,\n    dexBrokerId,\n    chainId,\n  };\n\n  let receiverBytes: Uint8Array;\n  receiverBytes = bs58Decode(receiver);\n  const receiverBytes32 = new Uint8Array(32);\n  receiverBytes32.set(receiverBytes);\n\n  const vaultIdHex = vaultId;\n  const vaultIdBytes = hexToBytes(vaultIdHex);\n\n  const tokenHash = keccak256(new TextEncoder().encode(token));\n  const dexBrokerIdHash = keccak256(new TextEncoder().encode(dexBrokerId));\n  const abicoder = AbiCoder.defaultAbiCoder();\n  const msgToSign = keccak256(\n    hexToBytes(\n      abicoder.encode(\n        [\n          \"uint8\", // payloadType\n          \"uint256\", // nonce\n          \"bytes32\", // receiver (Base58 decoded)\n          \"uint256\", // amount\n          \"bytes32\", // vaultId\n          \"bytes32\", // token hash\n          \"bytes32\", // dexBrokerId hash\n          \"uint256\", // chainId\n        ],\n        [\n          payloadType,\n          nonce,\n          receiverBytes,\n          amount,\n          vaultIdBytes,\n          tokenHash,\n          dexBrokerIdHash,\n          chainId,\n        ],\n      ),\n    ),\n  );\n\n  const msgToSignHex = bytesToHex(msgToSign);\n  const msgToSignTextEncoded: Uint8Array = new TextEncoder().encode(\n    msgToSignHex,\n  );\n\n  return [message, msgToSignTextEncoded];\n}\n\nexport function withdrawMessage(\n  inputs: WithdrawInputs & {\n    chainId: number;\n  },\n) {\n  const { chainId, receiver, token, amount, nonce, brokerId } = inputs;\n  const timestamp = Date.now();\n\n  const message = {\n    brokerId,\n    chainId,\n    receiver,\n    token: token,\n    amount: amount,\n    withdrawNonce: nonce,\n    timestamp,\n    chainType: \"SOL\",\n  };\n\n  const brokerIdHash = solidityPackedKeccak256([\"string\"], [message.brokerId]);\n  const tokenSymbolHash = solidityPackedKeccak256([\"string\"], [message.token]);\n  const salt = keccak256(Buffer.from(\"Orderly Network\"));\n  const abicoder = AbiCoder.defaultAbiCoder();\n\n  const msgToSign = keccak256(\n    hexToBytes(\n      abicoder.encode(\n        [\n          \"bytes32\",\n          \"bytes32\",\n          \"uint256\",\n          \"bytes32\",\n          \"uint256\",\n          \"uint64\",\n          \"uint64\",\n          \"bytes32\",\n        ],\n        [\n          brokerIdHash,\n          tokenSymbolHash,\n          chainId,\n          bs58Decode(message.receiver),\n          message.amount,\n          message.withdrawNonce,\n          timestamp,\n          salt,\n        ],\n      ),\n    ),\n  );\n  const msgToSignHex = bytesToHex(msgToSign);\n  const msgToSignTextEncoded: Uint8Array = new TextEncoder().encode(\n    msgToSignHex,\n  );\n  return [message, msgToSignTextEncoded];\n}\n\nexport function settleMessage(\n  inputs: SettleInputs & {\n    chainId: number;\n  },\n) {\n  const { settlePnlNonce, brokerId, chainId, timestamp } = inputs;\n\n  const message = {\n    brokerId: brokerId,\n    chainId: chainId,\n    timestamp: timestamp,\n    chainType: \"SOL\",\n    settleNonce: settlePnlNonce,\n  };\n  const brokerIdHash = solidityPackedKeccak256([\"string\"], [brokerId]);\n\n  const abicoder = AbiCoder.defaultAbiCoder();\n  const msgToSign = keccak256(\n    hexToBytes(\n      abicoder.encode(\n        [\"bytes32\", \"uint256\", \"uint64\", \"uint64\"],\n        [brokerIdHash, message.chainId, message.settleNonce, message.timestamp],\n      ),\n    ),\n  );\n  const msgToSignHex = bytesToHex(msgToSign);\n  const msgToSignTextEncoded: Uint8Array = new TextEncoder().encode(\n    msgToSignHex,\n  );\n  return [message, msgToSignTextEncoded];\n}\n\nexport enum MsgType {\n  Deposit = 0,\n  // Add other message types if needed\n}\n\nexport interface LzMessage {\n  msgType: MsgType;\n  payload: Buffer;\n}\n\nexport function encodeLzMessage(message: LzMessage): Buffer {\n  const msgTypeBuffer = Buffer.alloc(1);\n  msgTypeBuffer.writeUInt8(message.msgType);\n  return Buffer.concat([msgTypeBuffer, message.payload]);\n}\n\nexport async function getDepositQuoteFee({\n  vaultAddress,\n  userAddress,\n  connection,\n  depositData,\n}: {\n  vaultAddress: string;\n  userAddress: string;\n  connection: Connection;\n  depositData: {\n    tokenHash: string;\n    brokerHash: string;\n    accountId: string;\n    tokenAddress: string;\n    tokenAmount: string;\n  };\n}) {\n  console.log(\"-- vaultAddress\", vaultAddress);\n  const appProgramId = new PublicKey(vaultAddress);\n  const DST_EID = getDstEID(appProgramId);\n\n  const program = new Program<SolanaVault>(VaultIDL, appProgramId, {\n    connection,\n  });\n  const userPublicKey = new PublicKey(userAddress);\n\n  const oappConfigPDA = getOAppConfigPda(appProgramId);\n  const peerPDA = getPeerPda(appProgramId, oappConfigPDA, DST_EID);\n  const endorcedPDA = getEndorcedOptionsPda(\n    appProgramId,\n    oappConfigPDA,\n    DST_EID,\n  );\n  const sendLibConfigPDA = getSendLibConfigPda(oappConfigPDA, DST_EID);\n  const defaultSendLibPDA = getDefaultSendLibConfigPda(DST_EID);\n\n  const endpointSettingPDA = getEndpointSettingPda();\n  const noncePDA = getNoncePda(appProgramId, oappConfigPDA, DST_EID);\n  const sendConfigPDA = getSendConfigPda(oappConfigPDA, DST_EID);\n  const defaultSendConfigPDA = getDefaultSendConfigPda(DST_EID);\n  const executorConfigPDA = getExecutorConfigPda();\n  const priceFeedPDA = getPriceFeedPda();\n\n  const messageLibPDA = getMessageLibPda(SEND_LIB_PROGRAM_ID);\n  const messageLibInfoPDA = getMessageLibInfoPda(messageLibPDA);\n  const vaultAuthorityPDA = getVaultAuthorityPda(appProgramId);\n\n  const depositParams = getDepositParams(userAddress, depositData);\n\n  // deposit fee\n  const quoteFee = await program.methods\n    .oappQuote(depositParams)\n    .accounts({\n      oappConfig: oappConfigPDA,\n      peer: peerPDA,\n      enforcedOptions: endorcedPDA,\n      vaultAuthority: vaultAuthorityPDA,\n    })\n    .remainingAccounts([\n      // ENDPOINT solana/programs/programs/uln/src/instructions/endpoint/send.rs\n      {\n        pubkey: ENDPOINT_PROGRAM_ID,\n        isWritable: false,\n        isSigner: false,\n      },\n      {\n        pubkey: SEND_LIB_PROGRAM_ID,\n        isWritable: false,\n        isSigner: false,\n      },\n      {\n        pubkey: sendLibConfigPDA, // send_library_config\n        isWritable: false,\n        isSigner: false,\n      },\n      {\n        pubkey: defaultSendLibPDA, // default_send_library_config\n        isWritable: false,\n        isSigner: false,\n      },\n      {\n        pubkey: messageLibInfoPDA, // send_library_info\n        isWritable: false,\n        isSigner: false,\n      },\n      {\n        pubkey: endpointSettingPDA, // endpoint settings\n        isWritable: false,\n        isSigner: false,\n      },\n      {\n        pubkey: noncePDA, // nonce\n        isWritable: false,\n        isSigner: false,\n      },\n      {\n        pubkey: messageLibPDA,\n        isWritable: false,\n        isSigner: false,\n      },\n      {\n        pubkey: sendConfigPDA,\n        isWritable: false,\n        isSigner: false,\n      },\n      {\n        pubkey: defaultSendConfigPDA,\n        isWritable: false,\n        isSigner: false,\n      },\n      {\n        pubkey: EXECUTOR_PROGRAM_ID,\n        isWritable: false,\n        isSigner: false,\n      },\n      {\n        pubkey: executorConfigPDA,\n        isWritable: false,\n        isSigner: false,\n      },\n      {\n        pubkey: PRICE_FEED_PROGRAM_ID,\n        isWritable: false,\n        isSigner: false,\n      },\n      {\n        pubkey: priceFeedPDA,\n        isWritable: false,\n        isSigner: false,\n      },\n      ...appendDvnQuoteRemainingAccounts(appProgramId, priceFeedPDA),\n    ])\n    .instruction();\n\n  const lastBlockHash = await connection.getLatestBlockhash();\n\n  const lookupTableAddress = getLookupTableAddress(appProgramId);\n  const lookupTableAccount = await getLookupTableAccount(\n    connection,\n    lookupTableAddress,\n  );\n  if (!lookupTableAccount) {\n    console.log(\"-- lookup table account error\");\n    throw new Error(\"-- lookup table account error\");\n  }\n  const ixQuoteComputeBudget = ComputeBudgetProgram.setComputeUnitLimit({\n    units: 600_000,\n  });\n  const feeMsg = new TransactionMessage({\n    payerKey: userPublicKey,\n    recentBlockhash: lastBlockHash.blockhash,\n    instructions: [ixQuoteComputeBudget, quoteFee],\n  }).compileToV0Message([lookupTableAccount]);\n\n  const feeTx = new VersionedTransaction(feeMsg);\n\n  const feeRes = await connection.simulateTransaction(feeTx);\n\n  console.log(\"-- feeRes\", feeRes);\n  if (feeRes.value.err) {\n    const errorInfo =\n      typeof feeRes.value.err === \"object\"\n        ? JSON.stringify(feeRes.value.err)\n        : feeRes.value.err;\n\n    if (errorInfo.toString().includes(\"AccountNotFound\")) {\n      throw new Error(\"Error: Account gas is insufficient.\");\n    }\n\n    throw new Error(`Error: ${errorInfo}`);\n  }\n  const returnPrefix = `Program return: ${program.programId} `;\n  const returnLogEntry = feeRes.value.logs!.find((log) =>\n    log.startsWith(returnPrefix),\n  );\n  if (!returnLogEntry) {\n    throw new Error(\"Error: get deposit fee error\");\n  }\n\n  // Slice out the prefix to get the base64 return data\n  const encodedReturnData = returnLogEntry.slice(returnPrefix.length);\n\n  // Convert the Base64 return data\n  const decodedBuffer = Buffer.from(encodedReturnData, \"base64\");\n\n  return decodedBuffer.readBigUInt64LE(0);\n}\nconst getDepositParams = (\n  userAddress: string,\n  depositData: {\n    tokenHash: string;\n    brokerHash: string;\n    accountId: string;\n    tokenAddress: string;\n    tokenAmount: string;\n  },\n) => {\n  const brokerHash = depositData.brokerHash;\n  const codedBrokerHash = Array.from(Buffer.from(brokerHash.slice(2), \"hex\"));\n\n  const tokenHash = depositData.tokenHash;\n  const codedTokenHash = Array.from(Buffer.from(tokenHash.slice(2), \"hex\"));\n\n  const solAccountId = depositData.accountId;\n  const codedAccountId = Array.from(Buffer.from(solAccountId.slice(2), \"hex\"));\n  const userPublicKey = new PublicKey(userAddress);\n\n  return {\n    accountId: codedAccountId,\n    brokerHash: codedBrokerHash,\n    tokenHash: codedTokenHash,\n    userAddress: Array.from(userPublicKey.toBuffer()),\n    tokenAmount: new BN(depositData.tokenAmount),\n  };\n};\n\nexport async function deposit({\n  vaultAddress,\n  userAddress,\n  connection,\n  sendTransaction,\n  depositData,\n}: {\n  vaultAddress: string;\n  userAddress: string;\n  connection: Connection;\n  sendTransaction: WalletAdapterProps[\"sendTransaction\"];\n  depositData: {\n    tokenHash: string;\n    brokerHash: string;\n    accountId: string;\n    tokenAddress: string;\n    tokenAmount: string;\n  };\n}) {\n  const brokerHash = depositData.brokerHash;\n  const tokenHash = depositData.tokenHash;\n\n  const SOL_HASH = CoreUtils.parseTokenHash(\"SOL\");\n  const isSolDeposit = tokenHash.toLowerCase() === SOL_HASH.toLowerCase();\n\n  console.log(\"-- vault address\", vaultAddress);\n  const appProgramId = new PublicKey(vaultAddress);\n  const program = new Program<SolanaVault>(VaultIDL, appProgramId, {\n    connection,\n  });\n  // If is not SOL deposit, tokenAddress is the token address\n  // else, tokenAddress is the USDC address\n  const token = new PublicKey(depositData.tokenAddress);\n  const userPublicKey = new PublicKey(userAddress);\n  const userTokenAccount = getTokenAccounts(token, userPublicKey);\n  const vaultAuthorityPda = getVaultAuthorityPda(appProgramId);\n  const vaultTokenAccount = getTokenAccounts(token, vaultAuthorityPda);\n  const allowedBrokerPDA = getBrokerPDA(appProgramId, brokerHash);\n  const allowedTokenPDA = getTokenPDA(appProgramId, tokenHash);\n  const oappConfigPDA = getOAppConfigPda(appProgramId);\n  console.log(\"-- oappconfig pda\", oappConfigPDA.toBase58());\n  const DST_EID = getDstEID(appProgramId);\n  // const lzPDA = getLzReceiveTypesPda(appProgramId, oappConfigPDA);\n  const peerPDA = getPeerPda(appProgramId, oappConfigPDA, DST_EID);\n  const endorcedPDA = getEndorcedOptionsPda(\n    appProgramId,\n    oappConfigPDA,\n    DST_EID,\n  );\n  const sendLibPDA = getSendLibPda();\n  const sendLibConfigPDA = getSendLibConfigPda(oappConfigPDA, DST_EID);\n  const defaultSendLibPDA = getDefaultSendLibConfigPda(DST_EID);\n  const sendLibInfoPDA = getSendLibInfoPda(sendLibPDA);\n\n  const endpointSettingPDA = getEndpointSettingPda();\n  const noncePDA = getNoncePda(appProgramId, oappConfigPDA, DST_EID);\n  const eventAuthorityPDA = getEventAuthorityPda();\n  const ulnSettingPDA = getUlnSettingPda();\n  const sendConfigPDA = getSendConfigPda(oappConfigPDA, DST_EID);\n  const defaultSendConfigPDA = getDefaultSendConfigPda(DST_EID);\n  const ulnEventAuthorityPDA = getUlnEventAuthorityPda();\n  const executorConfigPDA = getExecutorConfigPda();\n  const priceFeedPDA = getPriceFeedPda();\n\n  const vaultDepositParams = getDepositParams(userAddress, depositData);\n\n  const buildSendRemainingAccounts = () => [\n    // ENDPOINT solana/programs/programs/uln/src/instructions/endpoint/send.rs\n    {\n      isSigner: false,\n      isWritable: false,\n      pubkey: ENDPOINT_PROGRAM_ID,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      // 0\n      pubkey: oappConfigPDA,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      pubkey: SEND_LIB_PROGRAM_ID,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      // 7\n      pubkey: sendLibConfigPDA,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      // 9\n      pubkey: defaultSendLibPDA,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      // 8\n      pubkey: sendLibInfoPDA,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      // 14\n      pubkey: endpointSettingPDA,\n    },\n    {\n      isSigner: false,\n      isWritable: true,\n      // 15\n      pubkey: noncePDA,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      // 3\n      pubkey: eventAuthorityPDA,\n    },\n    // ULN solana/programs/programs/uln/src/instructions/endpoint/send.rs\n    {\n      isSigner: false,\n      isWritable: false,\n      pubkey: ENDPOINT_PROGRAM_ID,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      // 13\n      pubkey: ulnSettingPDA,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      // 10\n      pubkey: sendConfigPDA,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      // 11\n      pubkey: defaultSendConfigPDA,\n    },\n    {\n      isSigner: true,\n      isWritable: false,\n      pubkey: userPublicKey,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      pubkey: TREASURY_PROGRAM_ID,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      pubkey: SystemProgram.programId,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      // 12\n      pubkey: ulnEventAuthorityPDA,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      pubkey: SEND_LIB_PROGRAM_ID,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      pubkey: EXECUTOR_PROGRAM_ID,\n    },\n    {\n      isSigner: false,\n      isWritable: true,\n      // 16\n      pubkey: executorConfigPDA,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      pubkey: PRICE_FEED_PROGRAM_ID,\n    },\n    {\n      isSigner: false,\n      isWritable: false,\n      // 17\n      pubkey: priceFeedPDA,\n    },\n    ...appendDvnDepositRemainingAccounts(appProgramId, priceFeedPDA),\n  ];\n\n  const fee = await getDepositQuoteFee({\n    vaultAddress,\n    userAddress,\n    connection,\n    depositData,\n  });\n\n  const sendParam = {\n    nativeFee: new BN(fee.toString()),\n    lzTokenFee: new BN(0),\n  };\n\n  // const sendParam = {\n  //     nativeFee: new BN(1_000_000_000),\n  //     lzTokenFee:new BN(0),\n  //\n  // }\n  console.log(\"--- value params\", {\n    vaultDepositParams,\n    sendParam,\n  });\n  const ixDepositEntry = isSolDeposit\n    ? await program.methods\n        .depositSol(vaultDepositParams, sendParam)\n        .accounts({\n          solVault: getSolVaultPda(appProgramId),\n          vaultAuthority: vaultAuthorityPda,\n          user: userPublicKey,\n          peer: peerPDA,\n          enforcedOptions: endorcedPDA,\n          oappConfig: oappConfigPDA,\n          allowedBroker: allowedBrokerPDA,\n          allowedToken: allowedTokenPDA,\n        })\n        .remainingAccounts(buildSendRemainingAccounts())\n        .instruction()\n    : await program.methods\n        .deposit(vaultDepositParams, sendParam)\n        .accounts({\n          userTokenAccount: userTokenAccount,\n          vaultAuthority: vaultAuthorityPda,\n          vaultTokenAccount: vaultTokenAccount,\n          depositToken: token,\n          user: userPublicKey,\n          peer: peerPDA,\n          enforcedOptions: endorcedPDA,\n          oappConfig: oappConfigPDA,\n          allowedBroker: allowedBrokerPDA,\n          allowedToken: allowedTokenPDA,\n        })\n        .remainingAccounts(buildSendRemainingAccounts())\n        .instruction();\n\n  const lookupTableAddress = getLookupTableAddress(appProgramId);\n  const lookupTableAccount = await getLookupTableAccount(\n    connection,\n    lookupTableAddress,\n  );\n  if (!lookupTableAccount) {\n    console.log(\"-- lookup table account error\");\n    return;\n  }\n\n  const ixAddComputeBudget = ComputeBudgetProgram.setComputeUnitLimit({\n    units: 800_000,\n  });\n\n  const lastBlockHash = await connection.getLatestBlockhash();\n  const msg = new TransactionMessage({\n    payerKey: userPublicKey,\n    recentBlockhash: lastBlockHash.blockhash,\n    instructions: [ixDepositEntry, ixAddComputeBudget],\n  }).compileToV0Message([lookupTableAccount]);\n\n  const tx = new VersionedTransaction(msg);\n\n  const res = await sendTransaction(tx, connection);\n  console.log(\"res\", res);\n  return res;\n}\n\nexport function checkIsLedgerWallet(userAddress: string): boolean {\n  const info = window.localStorage.getItem(LedgerWalletKey);\n  if (!info) {\n    return false;\n  }\n  const addressArr = JSON.parse(info ?? \"[]\");\n  console.log(\"-- addressArr\", addressArr);\n  if (addressArr.includes(userAddress)) {\n    return true;\n  }\n  return false;\n}\n","import { addressToBytes32 } from \"@layerzerolabs/lz-v2-utilities\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nexport const ENDPOINT_PROGRAM_ID = new PublicKey(\n  \"76y77prsiCMvXMjuoZ5VRrhG5qYBrUMYTE5WgHqgjEn6\",\n);\nexport const SEND_LIB_PROGRAM_ID = new PublicKey(\n  \"7a4WjyR8VZ7yZz5XJAKm39BUGn5iT9CKcv2pmG9tdXVH\",\n);\nexport const EXECUTOR_PROGRAM_ID = new PublicKey(\n  \"6doghB248px58JSSwG4qejQ46kFMW4AMj7vzJnWZHNZn\",\n);\nexport const PRICE_FEED_PROGRAM_ID = new PublicKey(\n  \"8ahPGPjEbpgGaZx2NV1iG5Shj7TDwvsjkEDcGWjt94TP\",\n);\nexport const RECEIVE_LIB_PROGRAM_ID = SEND_LIB_PROGRAM_ID;\nexport const TREASURY_PROGRAM_ID = SEND_LIB_PROGRAM_ID;\nexport const DVN_PROGRAM_ID = new PublicKey(\n  \"HtEYV4xB4wvsj5fgTkcfuChYpvGYzgzwvNhgDZQNh7wW\",\n);\n/** Same program as `DVN_PROGRAM_ID`; aligns with solana-vault ULN 3-DVN scripts. */\nexport const LZ_DVN_PROGRAM_ID = DVN_PROGRAM_ID;\nexport const CANARY_DVN_PROGRAM_ID = new PublicKey(\n  \"5KAALa8AEEKnW6p6AacdnqNDmGMpfhwR7AEyWs1gUvsT\",\n);\nexport const NEVERMIND_DVN_PROGRAM_ID = new PublicKey(\n  \"4fs6aL12L18K5giDy9Dgxgrb3aNRYiuRV2a7JPPj3e7F\",\n);\n/** LZ DVN config PDA; must match `getDvnConfigPda()` derivation in solana.util. */\nexport const LZ_DVN_PDA = new PublicKey(\n  \"4VDjp6XQaxoZf5RGwiPU9NR1EXSZn2TP4ATMmiSzLfhb\",\n);\nexport const CANARY_DVN_PDA = new PublicKey(\n  \"7jMeX5mzXnSSKYd8DxBDP4xMnkNFZZZm5W28FWUTbwU3\",\n);\nexport const NEVERMIND_DVN_PDA = new PublicKey(\n  \"GPjyWr8vCotGuFubDpTxDxy9Vj1ZeEN4F2dwRmFiaGab\",\n);\nexport const VAULT_AUTHORITY_SEED = \"VaultAuthority\";\nexport const BROKER_SEED = \"Broker\";\nexport const TOKEN_SEED = \"Token\";\nexport const SOL_VAULT_SEED = \"SolVault\";\n// fro dev\n// export const PEER_ADDRESS = addressToBytes32('0x9Dc724b24146BeDD2dA28b8C4B74126169B8f312');\n// for qa\nexport const DEV_PEER_ADDRESS = addressToBytes32(\n  \"0x9Dc724b24146BeDD2dA28b8C4B74126169B8f312\",\n);\nexport const QA_PEER_ADDRESS = addressToBytes32(\n  \"0x45b6C6266A7A2170617d8A27A50C642fd68b91c4\",\n);\nexport const STAGING_PEER_ADDRESS = addressToBytes32(\n  \"0x5Bf771A65d057e778C5f0Ed52A0003316f94322D\",\n);\nexport const MAINNET_PEER_ADDRESS = addressToBytes32(\n  \"0xCecAe061aa078e13b5e70D5F9eCee90a3F2B6AeA\",\n);\n\nexport const DEV_DST_EID = 40200;\nexport const MAIN_DST_EID = 30213;\n\nexport const DEV_LOOKUP_TABLE_ADDRESS = new PublicKey(\n  \"BWp8HaYYhiNHekt3zgQhqoCrRftneGxxfgKmCZ6svHN\",\n);\nexport const QA_LOOKUP_TABLE_ADDRESS = new PublicKey(\n  \"BswrQQoPKAFojTuJutZcBMtigAgTghEH4M8ofn3EG2X2\",\n);\nexport const STAGING_LOOKUP_TABLE_ADDRESS = new PublicKey(\n  \"BbGKfxuPwDmu58BjPpd7PMG69TqnZjSpKaLDMgf9E9Dr\",\n);\nexport const MAINNET_LOOKUP_TABLE_ADDRESS = new PublicKey(\n  \"8iq7xCQt3bLdRRn4A46d5GuaXYinBoiAhbe2sUmZVzwg\",\n);\n\nexport const DEV_OAPP_PROGRAM_ID = new PublicKey(\n  \"EYJq9eU4GMRUriUJBgGoZ8YLQBXcWaciXuSsEXE7ieQS\",\n);\nexport const QA_OAPP_PROGRAM_ID = new PublicKey(\n  \"5zBjLor7vEraAt4zp2H82sy9MSqFoDnNa1Lx6EYKTYRZ\",\n);\nexport const STAGING_OAPP_PROGRAM_ID = new PublicKey(\n  \"9shwxWDUNhtwkHocsUAmrNAQfBH2DHh4njdAEdHZZkF2\",\n);\nexport const MAINNET_OAPP_PROGRAM_ID = new PublicKey(\n  \"ErBmAD61mGFKvrFNaTJuxoPwqrS8GgtwtqJTJVjFWx9Q\",\n);\n","export type SolanaVault = {\n  version: \"0.1.0\";\n  name: \"solana_vault\";\n  instructions: [\n    {\n      name: \"setVault\";\n      accounts: [\n        {\n          name: \"admin\";\n          isMut: true;\n          isSigner: true;\n        },\n        {\n          name: \"vaultAuthority\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"oappConfig\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"systemProgram\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"SetVaultParams\";\n          };\n        },\n      ];\n    },\n    {\n      name: \"deposit\";\n      accounts: [\n        {\n          name: \"user\";\n          isMut: true;\n          isSigner: true;\n        },\n        {\n          name: \"userTokenAccount\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"vaultAuthority\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"vaultTokenAccount\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"depositToken\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"peer\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"enforcedOptions\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"oappConfig\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"allowedBroker\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"allowedToken\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"tokenProgram\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"associatedTokenProgram\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"systemProgram\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"depositParams\";\n          type: {\n            defined: \"DepositParams\";\n          };\n        },\n        {\n          name: \"oappParams\";\n          type: {\n            defined: \"OAppSendParams\";\n          };\n        },\n      ];\n      returns: {\n        defined: \"MessagingReceipt\";\n      };\n    },\n    {\n      name: \"depositSol\";\n      accounts: [\n        {\n          name: \"user\";\n          isMut: true;\n          isSigner: true;\n        },\n        {\n          name: \"vaultAuthority\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"solVault\";\n          isMut: true;\n          isSigner: false;\n          docs: [\"CHECKED: sol_vault is used for SOL deposit\"];\n        },\n        {\n          name: \"peer\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"enforcedOptions\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"oappConfig\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"allowedBroker\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"allowedToken\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"systemProgram\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"depositParams\";\n          type: {\n            defined: \"DepositParams\";\n          };\n        },\n        {\n          name: \"oappParams\";\n          type: {\n            defined: \"OAppSendParams\";\n          };\n        },\n      ];\n      returns: {\n        defined: \"MessagingReceipt\";\n      };\n    },\n    {\n      name: \"initOapp\";\n      accounts: [\n        {\n          name: \"payer\";\n          isMut: true;\n          isSigner: true;\n        },\n        {\n          name: \"oappConfig\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"lzReceiveTypes\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"accountList\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"systemProgram\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"InitOAppParams\";\n          };\n        },\n      ];\n    },\n    {\n      name: \"setAccountList\";\n      accounts: [\n        {\n          name: \"admin\";\n          isMut: true;\n          isSigner: true;\n        },\n        {\n          name: \"oappConfig\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"lzReceiveTypes\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"accountsList\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"systemProgram\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"SetAccountListParams\";\n          };\n        },\n      ];\n    },\n    {\n      name: \"setManagerRole\";\n      accounts: [\n        {\n          name: \"owner\";\n          isMut: true;\n          isSigner: true;\n        },\n        {\n          name: \"vaultAuthority\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"managerRole\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"systemProgram\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"SetManagerRoleParams\";\n          };\n        },\n      ];\n    },\n    {\n      name: \"setBroker\";\n      accounts: [\n        {\n          name: \"brokerManager\";\n          isMut: true;\n          isSigner: true;\n        },\n        {\n          name: \"allowedBroker\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"managerRole\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"systemProgram\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"SetBrokerParams\";\n          };\n        },\n      ];\n    },\n    {\n      name: \"setWithdrawBroker\";\n      accounts: [\n        {\n          name: \"brokerManager\";\n          isMut: true;\n          isSigner: true;\n        },\n        {\n          name: \"withdrawBroker\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"managerRole\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"systemProgram\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"SetWithdrawBrokerParams\";\n          };\n        },\n      ];\n    },\n    {\n      name: \"setToken\";\n      accounts: [\n        {\n          name: \"tokenManager\";\n          isMut: true;\n          isSigner: true;\n        },\n        {\n          name: \"allowedToken\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"managerRole\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"mintAccount\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"systemProgram\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"SetTokenParams\";\n          };\n        },\n      ];\n    },\n    {\n      name: \"setWithdrawToken\";\n      accounts: [\n        {\n          name: \"tokenManager\";\n          isMut: true;\n          isSigner: true;\n        },\n        {\n          name: \"withdrawToken\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"managerRole\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"mintAccount\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"systemProgram\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"SetWithdrawTokenParams\";\n          };\n        },\n      ];\n    },\n    {\n      name: \"setOrderDelivery\";\n      accounts: [\n        {\n          name: \"owner\";\n          isMut: true;\n          isSigner: true;\n        },\n        {\n          name: \"vaultAuthority\";\n          isMut: true;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"SetOrderDeliveryParams\";\n          };\n        },\n      ];\n    },\n    {\n      name: \"oappQuote\";\n      accounts: [\n        {\n          name: \"oappConfig\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"peer\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"enforcedOptions\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"vaultAuthority\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"DepositParams\";\n          };\n        },\n      ];\n      returns: {\n        defined: \"MessagingFee\";\n      };\n    },\n    {\n      name: \"lzReceive\";\n      accounts: [\n        {\n          name: \"payer\";\n          isMut: true;\n          isSigner: true;\n        },\n        {\n          name: \"peer\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"oappConfig\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"withdrawBrokerPda\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"withdrawTokenPda\";\n          isMut: false;\n          isSigner: false;\n          docs: [\"CHECK\"];\n        },\n        {\n          name: \"tokenMint\";\n          isMut: false;\n          isSigner: false;\n          docs: [\"CHECK\"];\n        },\n        {\n          name: \"receiver\";\n          isMut: true;\n          isSigner: false;\n          docs: [\"CHECK\"];\n        },\n        {\n          name: \"receiverTokenAccount\";\n          isMut: true;\n          isSigner: false;\n          docs: [\"UNCHECKED\"];\n        },\n        {\n          name: \"vaultAuthority\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"vaultTokenAccount\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"tokenProgram\";\n          isMut: false;\n          isSigner: false;\n          docs: [\"CHECKED: sol_vault is used for SOL withdrawal\"];\n        },\n        {\n          name: \"associatedTokenProgram\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"systemProgram\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"eventAuthority\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"program\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"OAppLzReceiveParams\";\n          };\n        },\n      ];\n    },\n    {\n      name: \"lzReceiveTypes\";\n      accounts: [\n        {\n          name: \"oappConfig\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"accountList\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"OAppLzReceiveParams\";\n          };\n        },\n      ];\n      returns: {\n        vec: {\n          defined: \"oapp::endpoint_cpi::LzAccount\";\n        };\n      };\n    },\n    {\n      name: \"setRateLimit\";\n      accounts: [\n        {\n          name: \"admin\";\n          isMut: false;\n          isSigner: true;\n        },\n        {\n          name: \"peer\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"oappConfig\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"SetRateLimitParams\";\n          };\n        },\n      ];\n    },\n    {\n      name: \"setDelegate\";\n      accounts: [\n        {\n          name: \"admin\";\n          isMut: false;\n          isSigner: true;\n        },\n        {\n          name: \"oappConfig\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"SetDelegateParams\";\n          };\n        },\n      ];\n    },\n    {\n      name: \"transferAdmin\";\n      accounts: [\n        {\n          name: \"admin\";\n          isMut: false;\n          isSigner: true;\n        },\n        {\n          name: \"oappConfig\";\n          isMut: true;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"TransferAdminParams\";\n          };\n        },\n      ];\n    },\n    {\n      name: \"setPeer\";\n      accounts: [\n        {\n          name: \"admin\";\n          isMut: true;\n          isSigner: true;\n        },\n        {\n          name: \"peer\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"oappConfig\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"systemProgram\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"SetPeerParams\";\n          };\n        },\n      ];\n    },\n    {\n      name: \"setEnforcedOptions\";\n      accounts: [\n        {\n          name: \"admin\";\n          isMut: true;\n          isSigner: true;\n        },\n        {\n          name: \"enforcedOptions\";\n          isMut: true;\n          isSigner: false;\n        },\n        {\n          name: \"oappConfig\";\n          isMut: false;\n          isSigner: false;\n        },\n        {\n          name: \"systemProgram\";\n          isMut: false;\n          isSigner: false;\n        },\n      ];\n      args: [\n        {\n          name: \"params\";\n          type: {\n            defined: \"SetEnforcedOptionsParams\";\n          };\n        },\n      ];\n    },\n  ];\n  accounts: [\n    {\n      name: \"enforcedOptions\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"send\";\n            type: \"bytes\";\n          },\n          {\n            name: \"sendAndCall\";\n            type: \"bytes\";\n          },\n          {\n            name: \"bump\";\n            type: \"u8\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"oAppConfig\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"endpointProgram\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"bump\";\n            type: \"u8\";\n          },\n          {\n            name: \"admin\";\n            type: \"publicKey\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"oAppLzReceiveTypesAccounts\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"oappConfig\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"accountList\";\n            type: \"publicKey\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"accountList\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"bump\";\n            type: \"u8\";\n          },\n          {\n            name: \"woofiProPda\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"withdrawUsdcPda\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"usdcMint\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"withdrawUsdtPda\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"usdtMint\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"withdrawWsolPda\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"wsolMint\";\n            type: \"publicKey\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"peer\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"address\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"rateLimiter\";\n            type: {\n              option: {\n                defined: \"RateLimiter\";\n              };\n            };\n          },\n          {\n            name: \"bump\";\n            type: \"u8\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"allowedBroker\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"brokerHash\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"allowed\";\n            type: \"bool\";\n          },\n          {\n            name: \"bump\";\n            type: \"u8\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"allowedToken\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"mintAccount\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"tokenHash\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"tokenDecimals\";\n            type: \"u8\";\n          },\n          {\n            name: \"allowed\";\n            type: \"bool\";\n          },\n          {\n            name: \"bump\";\n            type: \"u8\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"managerRole\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"roleHash\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"allowed\";\n            type: \"bool\";\n          },\n          {\n            name: \"bump\";\n            type: \"u8\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"vaultAuthority\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"bump\";\n            docs: [\"Bump seed for the vault authority PDA\"];\n            type: \"u8\";\n          },\n          {\n            name: \"owner\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"depositNonce\";\n            type: \"u64\";\n          },\n          {\n            name: \"orderDelivery\";\n            type: \"bool\";\n          },\n          {\n            name: \"inboundNonce\";\n            type: \"u64\";\n          },\n          {\n            name: \"dstEid\";\n            type: \"u32\";\n          },\n          {\n            name: \"solChainId\";\n            type: \"u128\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"withdrawBroker\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"brokerHash\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"brokerIndex\";\n            type: \"u16\";\n          },\n          {\n            name: \"allowed\";\n            type: \"bool\";\n          },\n          {\n            name: \"bump\";\n            type: \"u8\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"withdrawToken\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"mintAccount\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"tokenHash\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"tokenDecimals\";\n            type: \"u8\";\n          },\n          {\n            name: \"tokenIndex\";\n            type: \"u8\";\n          },\n          {\n            name: \"allowed\";\n            type: \"bool\";\n          },\n          {\n            name: \"bump\";\n            type: \"u8\";\n          },\n        ];\n      };\n    },\n  ];\n  types: [\n    {\n      name: \"VaultDepositParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"accountId\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"brokerHash\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"userAddress\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"tokenHash\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"srcChainId\";\n            type: \"u128\";\n          },\n          {\n            name: \"tokenAmount\";\n            type: \"u128\";\n          },\n          {\n            name: \"srcChainDepositNonce\";\n            type: \"u64\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"LzMessage\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"msgType\";\n            type: \"u8\";\n          },\n          {\n            name: \"payload\";\n            type: \"bytes\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"AccountWithdrawSol\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"sender\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"receiver\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"brokerIndex\";\n            type: \"u16\";\n          },\n          {\n            name: \"tokenIndex\";\n            type: \"u8\";\n          },\n          {\n            name: \"tokenAmount\";\n            type: \"u64\";\n          },\n          {\n            name: \"fee\";\n            type: \"u64\";\n          },\n          {\n            name: \"chainId\";\n            type: \"u64\";\n          },\n          {\n            name: \"withdrawNonce\";\n            type: \"u64\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"VaultWithdrawParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"accountId\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"sender\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"receiver\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"brokerHash\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"tokenHash\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"tokenAmount\";\n            type: \"u64\";\n          },\n          {\n            name: \"fee\";\n            type: \"u128\";\n          },\n          {\n            name: \"chainId\";\n            type: \"u128\";\n          },\n          {\n            name: \"withdrawNonce\";\n            type: \"u64\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"InitOAppParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"admin\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"accountList\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"endpointProgram\";\n            type: {\n              option: \"publicKey\";\n            };\n          },\n        ];\n      };\n    },\n    {\n      name: \"OAppLzReceiveParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"srcEid\";\n            type: \"u32\";\n          },\n          {\n            name: \"sender\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"nonce\";\n            type: \"u64\";\n          },\n          {\n            name: \"guid\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"message\";\n            type: \"bytes\";\n          },\n          {\n            name: \"extraData\";\n            type: \"bytes\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"MessagingFee\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"nativeFee\";\n            type: \"u64\";\n          },\n          {\n            name: \"lzTokenFee\";\n            type: \"u64\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"SetAccountListParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"woofiProPda\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"withdrawUsdcPda\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"usdcMint\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"withdrawUsdtPda\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"usdtMint\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"withdrawWsolPda\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"wsolMint\";\n            type: \"publicKey\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"SetDelegateParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"delegate\";\n            type: \"publicKey\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"SetEnforcedOptionsParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"dstEid\";\n            type: \"u32\";\n          },\n          {\n            name: \"send\";\n            type: \"bytes\";\n          },\n          {\n            name: \"sendAndCall\";\n            type: \"bytes\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"SetPeerParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"dstEid\";\n            type: \"u32\";\n          },\n          {\n            name: \"peer\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n        ];\n      };\n    },\n    {\n      name: \"SetRateLimitParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"dstEid\";\n            type: \"u32\";\n          },\n          {\n            name: \"refillPerSecond\";\n            type: {\n              option: \"u64\";\n            };\n          },\n          {\n            name: \"capacity\";\n            type: {\n              option: \"u64\";\n            };\n          },\n          {\n            name: \"enabled\";\n            type: \"bool\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"TransferAdminParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"admin\";\n            type: \"publicKey\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"DepositParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"accountId\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"brokerHash\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"tokenHash\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"userAddress\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"tokenAmount\";\n            type: \"u64\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"OAppSendParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"nativeFee\";\n            type: \"u64\";\n          },\n          {\n            name: \"lzTokenFee\";\n            type: \"u64\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"SetBrokerParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"brokerManagerRole\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"brokerHash\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"allowed\";\n            type: \"bool\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"SetManagerRoleParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"roleHash\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"managerAddress\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"allowed\";\n            type: \"bool\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"SetOrderDeliveryParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"orderDelivery\";\n            type: \"bool\";\n          },\n          {\n            name: \"nonce\";\n            type: \"u64\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"SetTokenParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"tokenManagerRole\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"mintAccount\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"tokenHash\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"allowed\";\n            type: \"bool\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"SetVaultParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"owner\";\n            type: \"publicKey\";\n          },\n          {\n            name: \"depositNonce\";\n            type: \"u64\";\n          },\n          {\n            name: \"orderDelivery\";\n            type: \"bool\";\n          },\n          {\n            name: \"inboundNonce\";\n            type: \"u64\";\n          },\n          {\n            name: \"dstEid\";\n            type: \"u32\";\n          },\n          {\n            name: \"solChainId\";\n            type: \"u128\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"SetWithdrawBrokerParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"brokerManagerRole\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"brokerHash\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"brokerIndex\";\n            type: \"u16\";\n          },\n          {\n            name: \"allowed\";\n            type: \"bool\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"SetWithdrawTokenParams\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"tokenManagerRole\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"tokenHash\";\n            type: {\n              array: [\"u8\", 32];\n            };\n          },\n          {\n            name: \"tokenIndex\";\n            type: \"u8\";\n          },\n          {\n            name: \"allowed\";\n            type: \"bool\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"RateLimiter\";\n      type: {\n        kind: \"struct\";\n        fields: [\n          {\n            name: \"capacity\";\n            type: \"u64\";\n          },\n          {\n            name: \"tokens\";\n            type: \"u64\";\n          },\n          {\n            name: \"refillPerSecond\";\n            type: \"u64\";\n          },\n          {\n            name: \"lastRefillTime\";\n            type: \"u64\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"OAppError\";\n      type: {\n        kind: \"enum\";\n        variants: [\n          {\n            name: \"Unauthorized\";\n          },\n          {\n            name: \"InvalidSender\";\n          },\n          {\n            name: \"InvalidReceiver\";\n          },\n          {\n            name: \"InvalidOptions\";\n          },\n          {\n            name: \"InvalidEndpointProgram\";\n          },\n          {\n            name: \"RateLimitExceeded\";\n          },\n          {\n            name: \"WithdrawFailed\";\n          },\n          {\n            name: \"InvalidInboundNonce\";\n          },\n          {\n            name: \"InvalidReceiverTokenAccount\";\n          },\n          {\n            name: \"InvalidAdminTokenAccount\";\n          },\n          {\n            name: \"InvalidMessageType\";\n          },\n          {\n            name: \"InvalidTokenIndex\";\n          },\n        ];\n      };\n    },\n    {\n      name: \"MsgType\";\n      type: {\n        kind: \"enum\";\n        variants: [\n          {\n            name: \"Deposit\";\n          },\n          {\n            name: \"Withdraw\";\n          },\n          {\n            name: \"RebalanceBurn\";\n          },\n          {\n            name: \"RebalanceMint\";\n          },\n        ];\n      };\n    },\n  ];\n  events: [\n    {\n      name: \"SetAllowedBroker\";\n      fields: [\n        {\n          name: \"brokerHash\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n      ];\n    },\n    {\n      name: \"ResetAllowedBroker\";\n      fields: [\n        {\n          name: \"brokerHash\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n      ];\n    },\n    {\n      name: \"SetAllowedToken\";\n      fields: [\n        {\n          name: \"tokenHash\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"mintAccount\";\n          type: \"publicKey\";\n          index: false;\n        },\n      ];\n    },\n    {\n      name: \"ResetAllowedToken\";\n      fields: [\n        {\n          name: \"tokenHash\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"mintAccount\";\n          type: \"publicKey\";\n          index: false;\n        },\n      ];\n    },\n    {\n      name: \"SetWithdrawTokenIndex\";\n      fields: [\n        {\n          name: \"tokenIndex\";\n          type: \"u8\";\n          index: false;\n        },\n        {\n          name: \"tokenHash\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"mintAccount\";\n          type: \"publicKey\";\n          index: false;\n        },\n      ];\n    },\n    {\n      name: \"ResetWithdrawTokenIndex\";\n      fields: [\n        {\n          name: \"tokenIndex\";\n          type: \"u8\";\n          index: false;\n        },\n        {\n          name: \"tokenHash\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"mintAccount\";\n          type: \"publicKey\";\n          index: false;\n        },\n      ];\n    },\n    {\n      name: \"SetWithdrawBrokerEvent\";\n      fields: [\n        {\n          name: \"brokerHash\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"brokerIndex\";\n          type: \"u16\";\n          index: false;\n        },\n      ];\n    },\n    {\n      name: \"ResetWithdrawBrokerEvent\";\n      fields: [\n        {\n          name: \"brokerHash\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"brokerIndex\";\n          type: \"u16\";\n          index: false;\n        },\n      ];\n    },\n    {\n      name: \"SetManager\";\n      fields: [\n        {\n          name: \"roleHash\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"managerAddress\";\n          type: \"publicKey\";\n          index: false;\n        },\n        {\n          name: \"allowed\";\n          type: \"bool\";\n          index: false;\n        },\n      ];\n    },\n    {\n      name: \"Deposited\";\n      fields: [\n        {\n          name: \"user\";\n          type: \"publicKey\";\n          index: false;\n        },\n        {\n          name: \"amount\";\n          type: \"u64\";\n          index: false;\n        },\n      ];\n    },\n    {\n      name: \"Withdrawn\";\n      fields: [\n        {\n          name: \"user\";\n          type: \"publicKey\";\n          index: false;\n        },\n        {\n          name: \"amount\";\n          type: \"u64\";\n          index: false;\n        },\n      ];\n    },\n    {\n      name: \"CreatedATA\";\n      fields: [\n        {\n          name: \"accountId\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"receiver\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"receiverTokenAccount\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"withdrawNonce\";\n          type: \"u64\";\n          index: false;\n        },\n      ];\n    },\n    {\n      name: \"VaultDeposited\";\n      fields: [\n        {\n          name: \"accountId\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"brokerHash\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"userAddress\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"tokenHash\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"srcChainId\";\n          type: \"u128\";\n          index: false;\n        },\n        {\n          name: \"tokenAmount\";\n          type: \"u64\";\n          index: false;\n        },\n        {\n          name: \"srcChainDepositNonce\";\n          type: \"u64\";\n          index: false;\n        },\n      ];\n    },\n    {\n      name: \"VaultWithdrawn\";\n      fields: [\n        {\n          name: \"accountId\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"sender\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"receiver\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"brokerHash\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"tokenHash\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"tokenAmount\";\n          type: \"u64\";\n          index: false;\n        },\n        {\n          name: \"fee\";\n          type: \"u128\";\n          index: false;\n        },\n        {\n          name: \"chainId\";\n          type: \"u128\";\n          index: false;\n        },\n        {\n          name: \"withdrawNonce\";\n          type: \"u64\";\n          index: false;\n        },\n      ];\n    },\n    {\n      name: \"FrozenWithdrawn\";\n      fields: [\n        {\n          name: \"accountId\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"sender\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"receiver\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"brokerHash\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"tokenHash\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"tokenAmount\";\n          type: \"u64\";\n          index: false;\n        },\n        {\n          name: \"fee\";\n          type: \"u128\";\n          index: false;\n        },\n        {\n          name: \"chainId\";\n          type: \"u128\";\n          index: false;\n        },\n        {\n          name: \"withdrawNonce\";\n          type: \"u64\";\n          index: false;\n        },\n      ];\n    },\n    {\n      name: \"OAppSent\";\n      fields: [\n        {\n          name: \"guid\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"dstEid\";\n          type: \"u32\";\n          index: false;\n        },\n      ];\n    },\n    {\n      name: \"OAppReceived\";\n      fields: [\n        {\n          name: \"guid\";\n          type: {\n            array: [\"u8\", 32];\n          };\n          index: false;\n        },\n        {\n          name: \"srcEid\";\n          type: \"u32\";\n          index: false;\n        },\n      ];\n    },\n  ];\n  errors: [\n    {\n      code: 6000;\n      name: \"InsufficientFunds\";\n      msg: \"Deposited funds are insufficient for withdrawal\";\n    },\n    {\n      code: 6001;\n      name: \"UserInfoBelongsToAnotherUser\";\n      msg: \"User info pda belongs to another user\";\n    },\n    {\n      code: 6002;\n      name: \"BrokerNotAllowed\";\n      msg: \"Broker is not allowed\";\n    },\n    {\n      code: 6003;\n      name: \"TokenNotAllowed\";\n      msg: \"Token is not allowed\";\n    },\n    {\n      code: 6004;\n      name: \"InvalidAccountId\";\n      msg: \"AccountId is invalid\";\n    },\n    {\n      code: 6005;\n      name: \"InvalidVaultOwner\";\n      msg: \"Vault owner is not the same as the payer\";\n    },\n    {\n      code: 6006;\n      name: \"ManagerRoleNotAllowed\";\n      msg: \"Manager role is not allowed\";\n    },\n  ];\n};\n\nexport const IDL: SolanaVault = {\n  version: \"0.1.0\",\n  name: \"solana_vault\",\n  instructions: [\n    {\n      name: \"setVault\",\n      accounts: [\n        {\n          name: \"admin\",\n          isMut: true,\n          isSigner: true,\n        },\n        {\n          name: \"vaultAuthority\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"oappConfig\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"systemProgram\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"SetVaultParams\",\n          },\n        },\n      ],\n    },\n    {\n      name: \"deposit\",\n      accounts: [\n        {\n          name: \"user\",\n          isMut: true,\n          isSigner: true,\n        },\n        {\n          name: \"userTokenAccount\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"vaultAuthority\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"vaultTokenAccount\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"depositToken\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"peer\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"enforcedOptions\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"oappConfig\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"allowedBroker\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"allowedToken\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"tokenProgram\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"associatedTokenProgram\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"systemProgram\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"depositParams\",\n          type: {\n            defined: \"DepositParams\",\n          },\n        },\n        {\n          name: \"oappParams\",\n          type: {\n            defined: \"OAppSendParams\",\n          },\n        },\n      ],\n      returns: {\n        defined: \"MessagingReceipt\",\n      },\n    },\n    {\n      name: \"depositSol\",\n      accounts: [\n        {\n          name: \"user\",\n          isMut: true,\n          isSigner: true,\n        },\n        {\n          name: \"vaultAuthority\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"solVault\",\n          isMut: true,\n          isSigner: false,\n          docs: [\"CHECKED: sol_vault is used for SOL deposit\"],\n        },\n        {\n          name: \"peer\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"enforcedOptions\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"oappConfig\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"allowedBroker\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"allowedToken\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"systemProgram\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"depositParams\",\n          type: {\n            defined: \"DepositParams\",\n          },\n        },\n        {\n          name: \"oappParams\",\n          type: {\n            defined: \"OAppSendParams\",\n          },\n        },\n      ],\n      returns: {\n        defined: \"MessagingReceipt\",\n      },\n    },\n    {\n      name: \"initOapp\",\n      accounts: [\n        {\n          name: \"payer\",\n          isMut: true,\n          isSigner: true,\n        },\n        {\n          name: \"oappConfig\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"lzReceiveTypes\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"accountList\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"systemProgram\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"InitOAppParams\",\n          },\n        },\n      ],\n    },\n    {\n      name: \"setAccountList\",\n      accounts: [\n        {\n          name: \"admin\",\n          isMut: true,\n          isSigner: true,\n        },\n        {\n          name: \"oappConfig\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"lzReceiveTypes\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"accountsList\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"systemProgram\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"SetAccountListParams\",\n          },\n        },\n      ],\n    },\n    {\n      name: \"setManagerRole\",\n      accounts: [\n        {\n          name: \"owner\",\n          isMut: true,\n          isSigner: true,\n        },\n        {\n          name: \"vaultAuthority\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"managerRole\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"systemProgram\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"SetManagerRoleParams\",\n          },\n        },\n      ],\n    },\n    {\n      name: \"setBroker\",\n      accounts: [\n        {\n          name: \"brokerManager\",\n          isMut: true,\n          isSigner: true,\n        },\n        {\n          name: \"allowedBroker\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"managerRole\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"systemProgram\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"SetBrokerParams\",\n          },\n        },\n      ],\n    },\n    {\n      name: \"setWithdrawBroker\",\n      accounts: [\n        {\n          name: \"brokerManager\",\n          isMut: true,\n          isSigner: true,\n        },\n        {\n          name: \"withdrawBroker\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"managerRole\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"systemProgram\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"SetWithdrawBrokerParams\",\n          },\n        },\n      ],\n    },\n    {\n      name: \"setToken\",\n      accounts: [\n        {\n          name: \"tokenManager\",\n          isMut: true,\n          isSigner: true,\n        },\n        {\n          name: \"allowedToken\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"managerRole\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"mintAccount\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"systemProgram\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"SetTokenParams\",\n          },\n        },\n      ],\n    },\n    {\n      name: \"setWithdrawToken\",\n      accounts: [\n        {\n          name: \"tokenManager\",\n          isMut: true,\n          isSigner: true,\n        },\n        {\n          name: \"withdrawToken\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"managerRole\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"mintAccount\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"systemProgram\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"SetWithdrawTokenParams\",\n          },\n        },\n      ],\n    },\n    {\n      name: \"setOrderDelivery\",\n      accounts: [\n        {\n          name: \"owner\",\n          isMut: true,\n          isSigner: true,\n        },\n        {\n          name: \"vaultAuthority\",\n          isMut: true,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"SetOrderDeliveryParams\",\n          },\n        },\n      ],\n    },\n    {\n      name: \"oappQuote\",\n      accounts: [\n        {\n          name: \"oappConfig\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"peer\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"enforcedOptions\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"vaultAuthority\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"DepositParams\",\n          },\n        },\n      ],\n      returns: {\n        defined: \"MessagingFee\",\n      },\n    },\n    {\n      name: \"lzReceive\",\n      accounts: [\n        {\n          name: \"payer\",\n          isMut: true,\n          isSigner: true,\n        },\n        {\n          name: \"peer\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"oappConfig\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"withdrawBrokerPda\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"withdrawTokenPda\",\n          isMut: false,\n          isSigner: false,\n          docs: [\"CHECK\"],\n        },\n        {\n          name: \"tokenMint\",\n          isMut: false,\n          isSigner: false,\n          docs: [\"CHECK\"],\n        },\n        {\n          name: \"receiver\",\n          isMut: true,\n          isSigner: false,\n          docs: [\"CHECK\"],\n        },\n        {\n          name: \"receiverTokenAccount\",\n          isMut: true,\n          isSigner: false,\n          docs: [\"UNCHECKED\"],\n        },\n        {\n          name: \"vaultAuthority\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"vaultTokenAccount\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"tokenProgram\",\n          isMut: false,\n          isSigner: false,\n          docs: [\"CHECKED: sol_vault is used for SOL withdrawal\"],\n        },\n        {\n          name: \"associatedTokenProgram\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"systemProgram\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"eventAuthority\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"program\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"OAppLzReceiveParams\",\n          },\n        },\n      ],\n    },\n    {\n      name: \"lzReceiveTypes\",\n      accounts: [\n        {\n          name: \"oappConfig\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"accountList\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"OAppLzReceiveParams\",\n          },\n        },\n      ],\n      returns: {\n        vec: {\n          defined: \"oapp::endpoint_cpi::LzAccount\",\n        },\n      },\n    },\n    {\n      name: \"setRateLimit\",\n      accounts: [\n        {\n          name: \"admin\",\n          isMut: false,\n          isSigner: true,\n        },\n        {\n          name: \"peer\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"oappConfig\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"SetRateLimitParams\",\n          },\n        },\n      ],\n    },\n    {\n      name: \"setDelegate\",\n      accounts: [\n        {\n          name: \"admin\",\n          isMut: false,\n          isSigner: true,\n        },\n        {\n          name: \"oappConfig\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"SetDelegateParams\",\n          },\n        },\n      ],\n    },\n    {\n      name: \"transferAdmin\",\n      accounts: [\n        {\n          name: \"admin\",\n          isMut: false,\n          isSigner: true,\n        },\n        {\n          name: \"oappConfig\",\n          isMut: true,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"TransferAdminParams\",\n          },\n        },\n      ],\n    },\n    {\n      name: \"setPeer\",\n      accounts: [\n        {\n          name: \"admin\",\n          isMut: true,\n          isSigner: true,\n        },\n        {\n          name: \"peer\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"oappConfig\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"systemProgram\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"SetPeerParams\",\n          },\n        },\n      ],\n    },\n    {\n      name: \"setEnforcedOptions\",\n      accounts: [\n        {\n          name: \"admin\",\n          isMut: true,\n          isSigner: true,\n        },\n        {\n          name: \"enforcedOptions\",\n          isMut: true,\n          isSigner: false,\n        },\n        {\n          name: \"oappConfig\",\n          isMut: false,\n          isSigner: false,\n        },\n        {\n          name: \"systemProgram\",\n          isMut: false,\n          isSigner: false,\n        },\n      ],\n      args: [\n        {\n          name: \"params\",\n          type: {\n            defined: \"SetEnforcedOptionsParams\",\n          },\n        },\n      ],\n    },\n  ],\n  accounts: [\n    {\n      name: \"enforcedOptions\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"send\",\n            type: \"bytes\",\n          },\n          {\n            name: \"sendAndCall\",\n            type: \"bytes\",\n          },\n          {\n            name: \"bump\",\n            type: \"u8\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"oAppConfig\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"endpointProgram\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"bump\",\n            type: \"u8\",\n          },\n          {\n            name: \"admin\",\n            type: \"publicKey\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"oAppLzReceiveTypesAccounts\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"oappConfig\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"accountList\",\n            type: \"publicKey\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"accountList\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"bump\",\n            type: \"u8\",\n          },\n          {\n            name: \"woofiProPda\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"withdrawUsdcPda\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"usdcMint\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"withdrawUsdtPda\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"usdtMint\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"withdrawWsolPda\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"wsolMint\",\n            type: \"publicKey\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"peer\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"address\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"rateLimiter\",\n            type: {\n              option: {\n                defined: \"RateLimiter\",\n              },\n            },\n          },\n          {\n            name: \"bump\",\n            type: \"u8\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"allowedBroker\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"brokerHash\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"allowed\",\n            type: \"bool\",\n          },\n          {\n            name: \"bump\",\n            type: \"u8\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"allowedToken\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"mintAccount\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"tokenHash\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"tokenDecimals\",\n            type: \"u8\",\n          },\n          {\n            name: \"allowed\",\n            type: \"bool\",\n          },\n          {\n            name: \"bump\",\n            type: \"u8\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"managerRole\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"roleHash\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"allowed\",\n            type: \"bool\",\n          },\n          {\n            name: \"bump\",\n            type: \"u8\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"vaultAuthority\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"bump\",\n            docs: [\"Bump seed for the vault authority PDA\"],\n            type: \"u8\",\n          },\n          {\n            name: \"owner\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"depositNonce\",\n            type: \"u64\",\n          },\n          {\n            name: \"orderDelivery\",\n            type: \"bool\",\n          },\n          {\n            name: \"inboundNonce\",\n            type: \"u64\",\n          },\n          {\n            name: \"dstEid\",\n            type: \"u32\",\n          },\n          {\n            name: \"solChainId\",\n            type: \"u128\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"withdrawBroker\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"brokerHash\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"brokerIndex\",\n            type: \"u16\",\n          },\n          {\n            name: \"allowed\",\n            type: \"bool\",\n          },\n          {\n            name: \"bump\",\n            type: \"u8\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"withdrawToken\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"mintAccount\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"tokenHash\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"tokenDecimals\",\n            type: \"u8\",\n          },\n          {\n            name: \"tokenIndex\",\n            type: \"u8\",\n          },\n          {\n            name: \"allowed\",\n            type: \"bool\",\n          },\n          {\n            name: \"bump\",\n            type: \"u8\",\n          },\n        ],\n      },\n    },\n  ],\n  types: [\n    {\n      name: \"VaultDepositParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"accountId\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"brokerHash\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"userAddress\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"tokenHash\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"srcChainId\",\n            type: \"u128\",\n          },\n          {\n            name: \"tokenAmount\",\n            type: \"u128\",\n          },\n          {\n            name: \"srcChainDepositNonce\",\n            type: \"u64\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"LzMessage\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"msgType\",\n            type: \"u8\",\n          },\n          {\n            name: \"payload\",\n            type: \"bytes\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"AccountWithdrawSol\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"sender\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"receiver\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"brokerIndex\",\n            type: \"u16\",\n          },\n          {\n            name: \"tokenIndex\",\n            type: \"u8\",\n          },\n          {\n            name: \"tokenAmount\",\n            type: \"u64\",\n          },\n          {\n            name: \"fee\",\n            type: \"u64\",\n          },\n          {\n            name: \"chainId\",\n            type: \"u64\",\n          },\n          {\n            name: \"withdrawNonce\",\n            type: \"u64\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"VaultWithdrawParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"accountId\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"sender\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"receiver\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"brokerHash\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"tokenHash\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"tokenAmount\",\n            type: \"u64\",\n          },\n          {\n            name: \"fee\",\n            type: \"u128\",\n          },\n          {\n            name: \"chainId\",\n            type: \"u128\",\n          },\n          {\n            name: \"withdrawNonce\",\n            type: \"u64\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"InitOAppParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"admin\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"accountList\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"endpointProgram\",\n            type: {\n              option: \"publicKey\",\n            },\n          },\n        ],\n      },\n    },\n    {\n      name: \"OAppLzReceiveParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"srcEid\",\n            type: \"u32\",\n          },\n          {\n            name: \"sender\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"nonce\",\n            type: \"u64\",\n          },\n          {\n            name: \"guid\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"message\",\n            type: \"bytes\",\n          },\n          {\n            name: \"extraData\",\n            type: \"bytes\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"MessagingFee\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"nativeFee\",\n            type: \"u64\",\n          },\n          {\n            name: \"lzTokenFee\",\n            type: \"u64\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"SetAccountListParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"woofiProPda\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"withdrawUsdcPda\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"usdcMint\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"withdrawUsdtPda\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"usdtMint\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"withdrawWsolPda\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"wsolMint\",\n            type: \"publicKey\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"SetDelegateParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"delegate\",\n            type: \"publicKey\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"SetEnforcedOptionsParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"dstEid\",\n            type: \"u32\",\n          },\n          {\n            name: \"send\",\n            type: \"bytes\",\n          },\n          {\n            name: \"sendAndCall\",\n            type: \"bytes\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"SetPeerParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"dstEid\",\n            type: \"u32\",\n          },\n          {\n            name: \"peer\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n        ],\n      },\n    },\n    {\n      name: \"SetRateLimitParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"dstEid\",\n            type: \"u32\",\n          },\n          {\n            name: \"refillPerSecond\",\n            type: {\n              option: \"u64\",\n            },\n          },\n          {\n            name: \"capacity\",\n            type: {\n              option: \"u64\",\n            },\n          },\n          {\n            name: \"enabled\",\n            type: \"bool\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"TransferAdminParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"admin\",\n            type: \"publicKey\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"DepositParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"accountId\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"brokerHash\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"tokenHash\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"userAddress\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"tokenAmount\",\n            type: \"u64\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"OAppSendParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"nativeFee\",\n            type: \"u64\",\n          },\n          {\n            name: \"lzTokenFee\",\n            type: \"u64\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"SetBrokerParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"brokerManagerRole\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"brokerHash\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"allowed\",\n            type: \"bool\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"SetManagerRoleParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"roleHash\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"managerAddress\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"allowed\",\n            type: \"bool\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"SetOrderDeliveryParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"orderDelivery\",\n            type: \"bool\",\n          },\n          {\n            name: \"nonce\",\n            type: \"u64\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"SetTokenParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"tokenManagerRole\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"mintAccount\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"tokenHash\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"allowed\",\n            type: \"bool\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"SetVaultParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"owner\",\n            type: \"publicKey\",\n          },\n          {\n            name: \"depositNonce\",\n            type: \"u64\",\n          },\n          {\n            name: \"orderDelivery\",\n            type: \"bool\",\n          },\n          {\n            name: \"inboundNonce\",\n            type: \"u64\",\n          },\n          {\n            name: \"dstEid\",\n            type: \"u32\",\n          },\n          {\n            name: \"solChainId\",\n            type: \"u128\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"SetWithdrawBrokerParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"brokerManagerRole\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"brokerHash\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"brokerIndex\",\n            type: \"u16\",\n          },\n          {\n            name: \"allowed\",\n            type: \"bool\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"SetWithdrawTokenParams\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"tokenManagerRole\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"tokenHash\",\n            type: {\n              array: [\"u8\", 32],\n            },\n          },\n          {\n            name: \"tokenIndex\",\n            type: \"u8\",\n          },\n          {\n            name: \"allowed\",\n            type: \"bool\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"RateLimiter\",\n      type: {\n        kind: \"struct\",\n        fields: [\n          {\n            name: \"capacity\",\n            type: \"u64\",\n          },\n          {\n            name: \"tokens\",\n            type: \"u64\",\n          },\n          {\n            name: \"refillPerSecond\",\n            type: \"u64\",\n          },\n          {\n            name: \"lastRefillTime\",\n            type: \"u64\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"OAppError\",\n      type: {\n        kind: \"enum\",\n        variants: [\n          {\n            name: \"Unauthorized\",\n          },\n          {\n            name: \"InvalidSender\",\n          },\n          {\n            name: \"InvalidReceiver\",\n          },\n          {\n            name: \"InvalidOptions\",\n          },\n          {\n            name: \"InvalidEndpointProgram\",\n          },\n          {\n            name: \"RateLimitExceeded\",\n          },\n          {\n            name: \"WithdrawFailed\",\n          },\n          {\n            name: \"InvalidInboundNonce\",\n          },\n          {\n            name: \"InvalidReceiverTokenAccount\",\n          },\n          {\n            name: \"InvalidAdminTokenAccount\",\n          },\n          {\n            name: \"InvalidMessageType\",\n          },\n          {\n            name: \"InvalidTokenIndex\",\n          },\n        ],\n      },\n    },\n    {\n      name: \"MsgType\",\n      type: {\n        kind: \"enum\",\n        variants: [\n          {\n            name: \"Deposit\",\n          },\n          {\n            name: \"Withdraw\",\n          },\n          {\n            name: \"RebalanceBurn\",\n          },\n          {\n            name: \"RebalanceMint\",\n          },\n        ],\n      },\n    },\n  ],\n  events: [\n    {\n      name: \"SetAllowedBroker\",\n      fields: [\n        {\n          name: \"brokerHash\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n      ],\n    },\n    {\n      name: \"ResetAllowedBroker\",\n      fields: [\n        {\n          name: \"brokerHash\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n      ],\n    },\n    {\n      name: \"SetAllowedToken\",\n      fields: [\n        {\n          name: \"tokenHash\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"mintAccount\",\n          type: \"publicKey\",\n          index: false,\n        },\n      ],\n    },\n    {\n      name: \"ResetAllowedToken\",\n      fields: [\n        {\n          name: \"tokenHash\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"mintAccount\",\n          type: \"publicKey\",\n          index: false,\n        },\n      ],\n    },\n    {\n      name: \"SetWithdrawTokenIndex\",\n      fields: [\n        {\n          name: \"tokenIndex\",\n          type: \"u8\",\n          index: false,\n        },\n        {\n          name: \"tokenHash\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"mintAccount\",\n          type: \"publicKey\",\n          index: false,\n        },\n      ],\n    },\n    {\n      name: \"ResetWithdrawTokenIndex\",\n      fields: [\n        {\n          name: \"tokenIndex\",\n          type: \"u8\",\n          index: false,\n        },\n        {\n          name: \"tokenHash\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"mintAccount\",\n          type: \"publicKey\",\n          index: false,\n        },\n      ],\n    },\n    {\n      name: \"SetWithdrawBrokerEvent\",\n      fields: [\n        {\n          name: \"brokerHash\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"brokerIndex\",\n          type: \"u16\",\n          index: false,\n        },\n      ],\n    },\n    {\n      name: \"ResetWithdrawBrokerEvent\",\n      fields: [\n        {\n          name: \"brokerHash\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"brokerIndex\",\n          type: \"u16\",\n          index: false,\n        },\n      ],\n    },\n    {\n      name: \"SetManager\",\n      fields: [\n        {\n          name: \"roleHash\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"managerAddress\",\n          type: \"publicKey\",\n          index: false,\n        },\n        {\n          name: \"allowed\",\n          type: \"bool\",\n          index: false,\n        },\n      ],\n    },\n    {\n      name: \"Deposited\",\n      fields: [\n        {\n          name: \"user\",\n          type: \"publicKey\",\n          index: false,\n        },\n        {\n          name: \"amount\",\n          type: \"u64\",\n          index: false,\n        },\n      ],\n    },\n    {\n      name: \"Withdrawn\",\n      fields: [\n        {\n          name: \"user\",\n          type: \"publicKey\",\n          index: false,\n        },\n        {\n          name: \"amount\",\n          type: \"u64\",\n          index: false,\n        },\n      ],\n    },\n    {\n      name: \"CreatedATA\",\n      fields: [\n        {\n          name: \"accountId\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"receiver\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"receiverTokenAccount\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"withdrawNonce\",\n          type: \"u64\",\n          index: false,\n        },\n      ],\n    },\n    {\n      name: \"VaultDeposited\",\n      fields: [\n        {\n          name: \"accountId\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"brokerHash\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"userAddress\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"tokenHash\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"srcChainId\",\n          type: \"u128\",\n          index: false,\n        },\n        {\n          name: \"tokenAmount\",\n          type: \"u64\",\n          index: false,\n        },\n        {\n          name: \"srcChainDepositNonce\",\n          type: \"u64\",\n          index: false,\n        },\n      ],\n    },\n    {\n      name: \"VaultWithdrawn\",\n      fields: [\n        {\n          name: \"accountId\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"sender\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"receiver\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"brokerHash\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"tokenHash\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"tokenAmount\",\n          type: \"u64\",\n          index: false,\n        },\n        {\n          name: \"fee\",\n          type: \"u128\",\n          index: false,\n        },\n        {\n          name: \"chainId\",\n          type: \"u128\",\n          index: false,\n        },\n        {\n          name: \"withdrawNonce\",\n          type: \"u64\",\n          index: false,\n        },\n      ],\n    },\n    {\n      name: \"FrozenWithdrawn\",\n      fields: [\n        {\n          name: \"accountId\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"sender\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"receiver\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"brokerHash\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"tokenHash\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"tokenAmount\",\n          type: \"u64\",\n          index: false,\n        },\n        {\n          name: \"fee\",\n          type: \"u128\",\n          index: false,\n        },\n        {\n          name: \"chainId\",\n          type: \"u128\",\n          index: false,\n        },\n        {\n          name: \"withdrawNonce\",\n          type: \"u64\",\n          index: false,\n        },\n      ],\n    },\n    {\n      name: \"OAppSent\",\n      fields: [\n        {\n          name: \"guid\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"dstEid\",\n          type: \"u32\",\n          index: false,\n        },\n      ],\n    },\n    {\n      name: \"OAppReceived\",\n      fields: [\n        {\n          name: \"guid\",\n          type: {\n            array: [\"u8\", 32],\n          },\n          index: false,\n        },\n        {\n          name: \"srcEid\",\n          type: \"u32\",\n          index: false,\n        },\n      ],\n    },\n  ],\n  errors: [\n    {\n      code: 6000,\n      name: \"InsufficientFunds\",\n      msg: \"Deposited funds are insufficient for withdrawal\",\n    },\n    {\n      code: 6001,\n      name: \"UserInfoBelongsToAnotherUser\",\n      msg: \"User info pda belongs to another user\",\n    },\n    {\n      code: 6002,\n      name: \"BrokerNotAllowed\",\n      msg: \"Broker is not allowed\",\n    },\n    {\n      code: 6003,\n      name: \"TokenNotAllowed\",\n      msg: \"Token is not allowed\",\n    },\n    {\n      code: 6004,\n      name: \"InvalidAccountId\",\n      msg: \"AccountId is invalid\",\n    },\n    {\n      code: 6005,\n      name: \"InvalidVaultOwner\",\n      msg: \"Vault owner is not the same as the payer\",\n    },\n    {\n      code: 6006,\n      name: \"ManagerRoleNotAllowed\",\n      msg: \"Manager role is not allowed\",\n    },\n  ],\n};\n","import {\n  DVN_CONFIG_SEED,\n  ENDPOINT_SEED,\n  ENFORCED_OPTIONS_SEED,\n  EVENT_SEED,\n  EXECUTOR_CONFIG_SEED,\n  LZ_RECEIVE_TYPES_SEED,\n  MESSAGE_LIB_SEED,\n  NONCE_SEED,\n  OAPP_SEED,\n  PEER_SEED,\n  PRICE_FEED_SEED,\n  SEND_CONFIG_SEED,\n  SEND_LIBRARY_CONFIG_SEED,\n  ULN_SEED,\n} from \"@layerzerolabs/lz-solana-sdk-v2\";\nimport { getAssociatedTokenAddressSync } from \"@solana/spl-token\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\nimport {\n  BROKER_SEED,\n  DEV_DST_EID,\n  DEV_LOOKUP_TABLE_ADDRESS,\n  DEV_OAPP_PROGRAM_ID,\n  DEV_PEER_ADDRESS,\n  CANARY_DVN_PDA,\n  CANARY_DVN_PROGRAM_ID,\n  DVN_PROGRAM_ID,\n  ENDPOINT_PROGRAM_ID,\n  EXECUTOR_PROGRAM_ID,\n  MAIN_DST_EID,\n  MAINNET_LOOKUP_TABLE_ADDRESS,\n  MAINNET_OAPP_PROGRAM_ID,\n  LZ_DVN_PDA,\n  LZ_DVN_PROGRAM_ID,\n  MAINNET_PEER_ADDRESS,\n  NEVERMIND_DVN_PDA,\n  NEVERMIND_DVN_PROGRAM_ID,\n  PRICE_FEED_PROGRAM_ID,\n  QA_LOOKUP_TABLE_ADDRESS,\n  QA_OAPP_PROGRAM_ID,\n  QA_PEER_ADDRESS,\n  RECEIVE_LIB_PROGRAM_ID,\n  SEND_LIB_PROGRAM_ID,\n  STAGING_LOOKUP_TABLE_ADDRESS,\n  STAGING_OAPP_PROGRAM_ID,\n  STAGING_PEER_ADDRESS,\n  TOKEN_SEED,\n  VAULT_AUTHORITY_SEED,\n  SOL_VAULT_SEED,\n} from \"./constant\";\n\nexport const getTokenAccounts = (\n  token: PublicKey,\n  owner: PublicKey,\n): PublicKey => {\n  const tokenAccount = getAssociatedTokenAddressSync(token, owner, true);\n  return tokenAccount;\n};\n\nexport function getVaultAuthorityPda(VAULT_PROGRAM_ID: PublicKey): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(VAULT_AUTHORITY_SEED, \"utf8\")],\n    VAULT_PROGRAM_ID,\n  )[0];\n}\n\nexport function getSolVaultPda(VAULT_PROGRAM_ID: PublicKey): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SOL_VAULT_SEED, \"utf8\")],\n    VAULT_PROGRAM_ID,\n  )[0];\n}\n\nexport function getBrokerPDA(\n  programId: PublicKey,\n  brokerHash: string,\n): PublicKey {\n  const hash = Array.from(Buffer.from(brokerHash.slice(2), \"hex\"));\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(BROKER_SEED, \"utf8\"), Buffer.from(hash)],\n    programId,\n  )[0];\n}\n\nexport function getTokenPDA(\n  programId: PublicKey,\n  tokenHash: string,\n): PublicKey {\n  const hash = Array.from(Buffer.from(tokenHash.slice(2), \"hex\"));\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(TOKEN_SEED, \"utf8\"), Buffer.from(hash)],\n    programId,\n  )[0];\n}\n\nexport function getOAppConfigPda(programId: PublicKey): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(OAPP_SEED, \"utf8\")],\n    programId,\n  )[0];\n}\n\nexport function getLzReceiveTypesPda(\n  programId: PublicKey,\n  oappConfigPda: PublicKey,\n): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(LZ_RECEIVE_TYPES_SEED, \"utf8\"), oappConfigPda.toBuffer()],\n    programId,\n  )[0];\n}\n\nexport function getPeerPda(\n  OAPP_PROGRAM_ID: PublicKey,\n  oappConfigPda: PublicKey,\n  dstEid: number,\n): PublicKey {\n  const bufferDstEid = Buffer.alloc(4);\n  bufferDstEid.writeUInt32BE(dstEid);\n\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(PEER_SEED, \"utf8\"), oappConfigPda.toBuffer(), bufferDstEid],\n    OAPP_PROGRAM_ID,\n  )[0];\n}\n\nexport function getEndorcedOptionsPda(\n  OAPP_PROGRAM_ID: PublicKey,\n  oappConfigPda: PublicKey,\n  dstEid: number,\n): PublicKey {\n  const bufferDstEid = Buffer.alloc(4);\n  bufferDstEid.writeUInt32BE(dstEid);\n\n  return PublicKey.findProgramAddressSync(\n    [\n      Buffer.from(ENFORCED_OPTIONS_SEED, \"utf8\"),\n      oappConfigPda.toBuffer(),\n      bufferDstEid,\n    ],\n    OAPP_PROGRAM_ID,\n  )[0];\n}\n\nexport function getSendLibPda(): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(MESSAGE_LIB_SEED, \"utf8\")],\n    SEND_LIB_PROGRAM_ID,\n  )[0];\n}\n\nexport function getSendLibConfigPda(\n  oappConfigPda: PublicKey,\n  dstEid: number,\n): PublicKey {\n  const bufferDstEid = Buffer.alloc(4);\n  bufferDstEid.writeUInt32BE(dstEid);\n  return PublicKey.findProgramAddressSync(\n    [\n      Buffer.from(SEND_LIBRARY_CONFIG_SEED, \"utf8\"),\n      oappConfigPda.toBuffer(),\n      bufferDstEid,\n    ],\n    ENDPOINT_PROGRAM_ID,\n  )[0];\n}\n\nexport function getDefaultSendLibConfigPda(dstEid: number): PublicKey {\n  const bufferDstEid = Buffer.alloc(4);\n  bufferDstEid.writeUInt32BE(dstEid);\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEND_LIBRARY_CONFIG_SEED, \"utf8\"), bufferDstEid],\n    ENDPOINT_PROGRAM_ID,\n  )[0];\n}\n\nexport function getSendLibInfoPda(sendLibPda: PublicKey): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(MESSAGE_LIB_SEED, \"utf8\"), sendLibPda.toBuffer()],\n    ENDPOINT_PROGRAM_ID,\n  )[0];\n}\n\nexport function getEndpointSettingPda(): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(ENDPOINT_SEED, \"utf8\")],\n    ENDPOINT_PROGRAM_ID,\n  )[0];\n}\n\nexport function getPeerAddress(OAPP_PROGRAM_ID: PublicKey): Uint8Array {\n  let peer_address = DEV_PEER_ADDRESS;\n  if (OAPP_PROGRAM_ID.toBase58() === DEV_OAPP_PROGRAM_ID.toBase58()) {\n    peer_address = DEV_PEER_ADDRESS;\n  }\n  if (OAPP_PROGRAM_ID.toBase58() === QA_OAPP_PROGRAM_ID.toBase58()) {\n    peer_address = QA_PEER_ADDRESS;\n  }\n  if (OAPP_PROGRAM_ID.toBase58() === STAGING_OAPP_PROGRAM_ID.toBase58()) {\n    peer_address = STAGING_PEER_ADDRESS;\n  }\n  if (OAPP_PROGRAM_ID.toBase58() === MAINNET_OAPP_PROGRAM_ID.toBase58()) {\n    peer_address = MAINNET_PEER_ADDRESS;\n  }\n  return peer_address;\n}\n\nexport function getNoncePda(\n  OAPP_PROGRAM_ID: PublicKey,\n  oappConfigPda: PublicKey,\n  dstEid: number,\n): PublicKey {\n  const bufferDstEid = Buffer.alloc(4);\n  const peer_address = getPeerAddress(OAPP_PROGRAM_ID);\n\n  bufferDstEid.writeUInt32BE(dstEid);\n  return PublicKey.findProgramAddressSync(\n    [\n      Buffer.from(NONCE_SEED, \"utf8\"),\n      oappConfigPda.toBuffer(),\n      bufferDstEid,\n      peer_address,\n    ],\n    ENDPOINT_PROGRAM_ID,\n  )[0];\n}\n\nexport function getEventAuthorityPda(): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(EVENT_SEED, \"utf8\")],\n    ENDPOINT_PROGRAM_ID,\n  )[0];\n}\n\nexport function getUlnSettingPda(): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(ULN_SEED, \"utf8\")],\n    SEND_LIB_PROGRAM_ID,\n  )[0];\n}\n\nexport function getSendConfigPda(\n  oappConfigPda: PublicKey,\n  dstEid: number,\n): PublicKey {\n  const bufferDstEid = Buffer.alloc(4);\n  bufferDstEid.writeUInt32BE(dstEid);\n  return PublicKey.findProgramAddressSync(\n    [\n      Buffer.from(SEND_CONFIG_SEED, \"utf8\"),\n      bufferDstEid,\n      oappConfigPda.toBuffer(),\n    ],\n    SEND_LIB_PROGRAM_ID,\n  )[0];\n}\n\nexport function getDefaultSendConfigPda(dstEid: number): PublicKey {\n  const bufferDstEid = Buffer.alloc(4);\n  bufferDstEid.writeUInt32BE(dstEid);\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(SEND_CONFIG_SEED, \"utf8\"), bufferDstEid],\n    RECEIVE_LIB_PROGRAM_ID,\n  )[0];\n}\n\nexport function getUlnEventAuthorityPda(): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(EVENT_SEED, \"utf8\")],\n    SEND_LIB_PROGRAM_ID,\n  )[0];\n}\n\nexport function getExecutorConfigPda(): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(EXECUTOR_CONFIG_SEED, \"utf8\")],\n    EXECUTOR_PROGRAM_ID,\n  )[0];\n}\n\nexport function getPriceFeedPda(): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(PRICE_FEED_SEED, \"utf8\")],\n    PRICE_FEED_PROGRAM_ID,\n  )[0];\n}\n\nexport function getDvnConfigPda(): PublicKey {\n  const derived = PublicKey.findProgramAddressSync(\n    [Buffer.from(DVN_CONFIG_SEED, \"utf8\")],\n    DVN_PROGRAM_ID,\n  )[0];\n  if (!derived.equals(LZ_DVN_PDA)) {\n    throw new Error(\n      `LZ DVN PDA mismatch: derived ${derived.toBase58()} !== constant ${LZ_DVN_PDA.toBase58()}`,\n    );\n  }\n  return derived;\n}\n\ntype LzSendRemainingAccount = {\n  pubkey: PublicKey;\n  isWritable: boolean;\n  isSigner: boolean;\n};\n\n/** Remaining accounts tail for `oappQuote` after executor + first price-feed pair (3 required DVNs × 4 accounts each). */\nexport function appendThreeDvnQuoteRemainingAccounts(\n  priceFeedPda: PublicKey,\n): LzSendRemainingAccount[] {\n  const priceFeedPair = (): LzSendRemainingAccount[] => [\n    {\n      pubkey: PRICE_FEED_PROGRAM_ID,\n      isWritable: false,\n      isSigner: false,\n    },\n    {\n      pubkey: priceFeedPda,\n      isWritable: false,\n      isSigner: false,\n    },\n  ];\n  return [\n    {\n      pubkey: LZ_DVN_PROGRAM_ID,\n      isWritable: false,\n      isSigner: false,\n    },\n    {\n      pubkey: LZ_DVN_PDA,\n      isWritable: false,\n      isSigner: false,\n    },\n    ...priceFeedPair(),\n    {\n      pubkey: CANARY_DVN_PROGRAM_ID,\n      isWritable: false,\n      isSigner: false,\n    },\n    {\n      pubkey: CANARY_DVN_PDA,\n      isWritable: false,\n      isSigner: false,\n    },\n    ...priceFeedPair(),\n    {\n      pubkey: NEVERMIND_DVN_PROGRAM_ID,\n      isWritable: false,\n      isSigner: false,\n    },\n    {\n      pubkey: NEVERMIND_DVN_PDA,\n      isWritable: false,\n      isSigner: false,\n    },\n    ...priceFeedPair(),\n  ];\n}\n\n/** Remaining accounts tail for non-mainnet `oappQuote` where ULN requires a single DVN. */\nexport function appendOneDvnQuoteRemainingAccounts(\n  priceFeedPda: PublicKey,\n): LzSendRemainingAccount[] {\n  return [\n    {\n      pubkey: LZ_DVN_PROGRAM_ID,\n      isWritable: false,\n      isSigner: false,\n    },\n    {\n      pubkey: LZ_DVN_PDA,\n      isWritable: false,\n      isSigner: false,\n    },\n    {\n      pubkey: PRICE_FEED_PROGRAM_ID,\n      isWritable: false,\n      isSigner: false,\n    },\n    {\n      pubkey: priceFeedPda,\n      isWritable: false,\n      isSigner: false,\n    },\n  ];\n}\n\n/** Remaining accounts tail for `deposit` / `depositSol` after executor + first price-feed pair (3 required DVNs). */\nexport function appendThreeDvnDepositRemainingAccounts(\n  priceFeedPda: PublicKey,\n): LzSendRemainingAccount[] {\n  const priceFeedPair = (): LzSendRemainingAccount[] => [\n    {\n      pubkey: PRICE_FEED_PROGRAM_ID,\n      isWritable: false,\n      isSigner: false,\n    },\n    {\n      pubkey: priceFeedPda,\n      isWritable: false,\n      isSigner: false,\n    },\n  ];\n  return [\n    {\n      pubkey: LZ_DVN_PROGRAM_ID,\n      isWritable: false,\n      isSigner: false,\n    },\n    {\n      pubkey: LZ_DVN_PDA,\n      isWritable: true,\n      isSigner: false,\n    },\n    ...priceFeedPair(),\n    {\n      pubkey: CANARY_DVN_PROGRAM_ID,\n      isWritable: false,\n      isSigner: false,\n    },\n    {\n      pubkey: CANARY_DVN_PDA,\n      isWritable: true,\n      isSigner: false,\n    },\n    ...priceFeedPair(),\n    {\n      pubkey: NEVERMIND_DVN_PROGRAM_ID,\n      isWritable: false,\n      isSigner: false,\n    },\n    {\n      pubkey: NEVERMIND_DVN_PDA,\n      isWritable: true,\n      isSigner: false,\n    },\n    ...priceFeedPair(),\n  ];\n}\n\n/** Remaining accounts tail for non-mainnet `deposit` / `depositSol` where ULN requires a single DVN. */\nexport function appendOneDvnDepositRemainingAccounts(\n  priceFeedPda: PublicKey,\n): LzSendRemainingAccount[] {\n  return [\n    {\n      pubkey: LZ_DVN_PROGRAM_ID,\n      isWritable: false,\n      isSigner: false,\n    },\n    {\n      pubkey: LZ_DVN_PDA,\n      isWritable: true,\n      isSigner: false,\n    },\n    {\n      pubkey: PRICE_FEED_PROGRAM_ID,\n      isWritable: false,\n      isSigner: false,\n    },\n    {\n      pubkey: priceFeedPda,\n      isWritable: false,\n      isSigner: false,\n    },\n  ];\n}\n\nexport function appendDvnQuoteRemainingAccounts(\n  programId: PublicKey,\n  priceFeedPda: PublicKey,\n): LzSendRemainingAccount[] {\n  if (programId.toBase58() === MAINNET_OAPP_PROGRAM_ID.toBase58()) {\n    return appendThreeDvnQuoteRemainingAccounts(priceFeedPda);\n  }\n\n  return appendOneDvnQuoteRemainingAccounts(priceFeedPda);\n}\n\nexport function appendDvnDepositRemainingAccounts(\n  programId: PublicKey,\n  priceFeedPda: PublicKey,\n): LzSendRemainingAccount[] {\n  if (programId.toBase58() === MAINNET_OAPP_PROGRAM_ID.toBase58()) {\n    return appendThreeDvnDepositRemainingAccounts(priceFeedPda);\n  }\n\n  return appendOneDvnDepositRemainingAccounts(priceFeedPda);\n}\n\nexport function getDstEID(OAPP_PROGRAM_ID: PublicKey) {\n  if (OAPP_PROGRAM_ID.toBase58() === MAINNET_OAPP_PROGRAM_ID.toBase58()) {\n    return MAIN_DST_EID;\n  }\n\n  return DEV_DST_EID;\n}\n\n/**\n * v0 txs reference this ALT. For 3-DVN send paths, ops must extend the LUT with\n * CANARY_DVN_PROGRAM_ID, CANARY_DVN_PDA, NEVERMIND_DVN_PROGRAM_ID, NEVERMIND_DVN_PDA\n * (see solana-vault `extend_lookuptable_dvn.ts`) so all CPI accounts resolve.\n */\nexport function getLookupTableAddress(OAPP_PROGRAM_ID: PublicKey): PublicKey {\n  if (OAPP_PROGRAM_ID.toBase58() === DEV_OAPP_PROGRAM_ID.toBase58()) {\n    console.log(\n      \"DEV_LOOKUP_TABLE_ADDRESS: \",\n      DEV_LOOKUP_TABLE_ADDRESS.toBase58(),\n    );\n    return DEV_LOOKUP_TABLE_ADDRESS;\n  }\n  if (OAPP_PROGRAM_ID.toBase58() === QA_OAPP_PROGRAM_ID.toBase58()) {\n    return QA_LOOKUP_TABLE_ADDRESS;\n  }\n  if (OAPP_PROGRAM_ID.toBase58() === STAGING_OAPP_PROGRAM_ID.toBase58()) {\n    return STAGING_LOOKUP_TABLE_ADDRESS;\n  }\n  if (OAPP_PROGRAM_ID.toBase58() === MAINNET_OAPP_PROGRAM_ID.toBase58()) {\n    return MAINNET_LOOKUP_TABLE_ADDRESS;\n  }\n\n  return DEV_LOOKUP_TABLE_ADDRESS;\n}\n\nexport function getMessageLibPda(programId?: PublicKey): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(MESSAGE_LIB_SEED, \"utf8\")],\n    programId ? programId : SEND_LIB_PROGRAM_ID,\n  )[0];\n}\n\nexport function getMessageLibInfoPda(\n  msgLibPda: PublicKey,\n  programId?: PublicKey,\n): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [Buffer.from(MESSAGE_LIB_SEED, \"utf8\"), msgLibPda.toBytes()],\n    programId ? programId : ENDPOINT_PROGRAM_ID,\n  )[0];\n}\n\nexport async function getLookupTableAccount(\n  connection: Connection,\n  lookupTableAddress: PublicKey,\n) {\n  const lookupTableAccount = (\n    await connection.getAddressLookupTable(lookupTableAddress)\n  ).value;\n\n  return lookupTableAccount;\n}\n"],"mappings":"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","names":["Connection","PublicKey","bytesToHex","PublicKey","PublicKey","PublicKey","PublicKey","PublicKey","PublicKey","Connection","PublicKey","bytesToHex"]}