{"version":3,"sources":["../src/constants.ts","../src/utils.ts","../src/abi.ts","../src/modules/channel.ts","../src/modules/endpoint.ts","../src/format/bytecode.ts","../src/format/basic.ts","../src/format/table-types.ts","../src/format/compiled-script.ts","../src/format/utils.ts","../src/modules/executor.ts","../src/modules/executor_config.ts","../src/modules/executor_v2.ts","../src/modules/msglib.ts","../src/modules/msglib_auth.ts","../src/modules/msglib_config.ts","../src/modules/uln/index.ts","../src/modules/uln/msglib_v1_0.ts","../src/modules/uln/packet_event.ts","../src/modules/uln/uln_config.ts","../src/modules/uln/uln_receive.ts","../src/modules/uln/uln_signer.ts","../src/modules/uln/uln.ts","../src/modules/uln301/uln_301.ts","../src/modules/uln301/uln_301_receiver.ts","../src/modules/index.ts","../src/types/index.ts","../src/modules/apps/index.ts","../src/modules/apps/bridge.ts","../src/modules/apps/lzapp.ts","../src/modules/apps/coin.ts","../src/modules/apps/counter.ts","../src/modules/apps/multisig_oracle.ts","../src/modules/apps/multisig_oracle_tss.ts","../src/modules/apps/oft.ts","../src/modules/apps/oracle.ts","../src/modules/apps/precrime.ts","../src/format/index.ts","../src/index.ts"],"names":["Environment","Stage","aptos","ExtendedBuffer","BN","extendedBuffer","aptos2","crypto","invariant","sha3Hash","bytesToHex","bip39","ApiError","aptos3","opcode","BCS","aptos4","TableType","hexToBytes","aptos5","types","aptos6","aptos7","HexString","aptos8","aptos9","aptos10","PacketType","aptos11","CoinType","aptos12","aptos13","aptos14","keccak_256","aptos15","aptos16","aptos17"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Environment, Stage } from '@layerzerolabs/lz-definitions'\n\n/**\n * Node URLs for different environments.\n */\nexport const NODE_URL: { [env in Environment]: string } = {\n    [Environment.MAINNET]: 'https://mainnet.aptoslabs.com/v1',\n    [Environment.TESTNET]: 'https://fullnode.testnet.aptoslabs.com/v1',\n    [Environment.DEVNET]: 'https://fullnode.devnet.aptoslabs.com/v1',\n    [Environment.LOCAL]: 'http://127.0.0.1:8080/v1', // 'http://192.168.0.169:8080/v1\n}\n\n/**\n * Faucet URLs for different environments.\n */\nexport const FAUCET_URL: { [env in Environment]: string } = {\n    [Environment.MAINNET]: '',\n    [Environment.TESTNET]: 'https://faucet.testnet.aptoslabs.com',\n    [Environment.DEVNET]: 'https://faucet.devnet.aptoslabs.com',\n    [Environment.LOCAL]: 'http://127.0.0.1:8081', // 'http://192.168.0.169:8081\n}\n\n/**\n * Layerzero addresses for different stages.\n */\nexport const LAYERZERO_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0x54ad3d30af77b60d939ae356e6606de9a4da67583f02b962d2d3f2e481484e90', // MAINNET\n    [Stage.TESTNET]: '0x1759cc0d3161f1eb79f65847d4feb9d1f74fb79014698a23b16b28b9cd4c37e3',\n    [Stage.SANDBOX]: '0xf2e1e034475dc0439487dd09dfc3950c462f731599e53a6b015dd85502352e68', //TODO(Ethan) double check\n}\n\nexport const ULN_301_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0x844bec096472b9ca651bfce5e639f8ef92dafb7b4e5a54461dd8c8f5c5231812',\n    [Stage.TESTNET]: '0x9b4f328857baf5471ffe873471459a75da3aa3db0629f4c1b0ede4d48cf9fac1',\n    [Stage.SANDBOX]: '0x1050fe8b6900532a0fc312c1635f3e0bfb1153cc9ef55bc190ce48f0db471514',\n}\n\nexport const ULN_301_RECEIVE_HELPER_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0x7060cc3af37451b4fb3804400b98942b074384dc3de634c2559830210c6ad1de',\n    [Stage.TESTNET]: '0x9f09756d37b4103e3e94bbe3ef8f161a3b957a394af48a5bee1e8de4d2e7b1b8',\n    [Stage.SANDBOX]: '0x4198b568d9044d0165f8c357e88a7b12dd76fecd3016e7726e5512f668164be9',\n}\n\nexport const MSGLIB_ROUTING_HELPER_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0xf423abcbbc65f5e11d0027c51c1287765e8fe8b145d5a477690989e7adc9d714',\n    [Stage.TESTNET]: '0xff6c2de369bdff3481d7d19e17967686d65e8585d97de45bfd2fe1debbcb0a4f',\n    [Stage.SANDBOX]: '0xda0ee3324a739cf664fedfba5174fbc6a11ffbb669b6ead9dc366415b9a37114',\n}\n\n/**\n * Layerzero apps addresses for different stages.\n */\nexport const LAYERZERO_APPS_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0x43d8cad89263e6936921a0adb8d5d49f0e236c229460f01b14dca073114df2b9',\n    [Stage.TESTNET]: '0x2f972c173927006c83277b6e6ae38f83482eba560f343d022f145979020d3621',\n    [Stage.SANDBOX]: '0x9b2bac312330430f5e7287a18065e24b55a5e3834459a92be0784177441959bf', //TODO(Ethan) double check\n}\n\n/**\n * Oracle addresses for different stages.\n */\nexport const ORACLE_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0xc2846ea05319c339b3b52186ceae40b43d4e9cf6c7350336c3eb0b351d9394eb', // MAINNET\n    [Stage.TESTNET]: '0x8ab85d94bf34808386b3ce0f9516db74d2b6d2f1166aa48f75ca641f3adb6c63',\n    [Stage.SANDBOX]: '0x86052d5722c3222a88de346aad92a02ace56839487165c6b1bad844e85297d5e', //TODO(Ethan) double check\n}\n\n// resource, not contract. update after deploy\n/**\n * Oracle signer addresses for different stages.\n */\nexport const ORACLE_SIGNER_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0x12e12de0af996d9611b0b78928cd9f4cbf50d94d972043cdd829baa77a78929b', // MAINNET\n    [Stage.TESTNET]: '0x47a30bcdb5b5bdbf6af883c7325827f3e40b3f52c3538e9e677e68cf0c0db060',\n    [Stage.SANDBOX]: '0x81f5957aa36d8d1515ba5eb95df187fed85185610e7b14fbb0f281b12397f807', //TODO(Ethan) double check\n}\n\n/**\n * Relayer signer addresses for different stages.\n */\nexport const RELAYER_SIGNER_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0x1d8727df513fa2a8785d0834e40b34223daff1affc079574082baadb74b66ee4', // MAINNET\n    [Stage.TESTNET]: '0xc192864c4215741051321d44f89c3b7a54840a0b1b7ef5bec6149a07f9df4641',\n    [Stage.SANDBOX]: '0x34fb23a3db82f39629506b507fdf886202c7935f74ddc8ecef9dac0bb849b07f', //TODO(Ethan) double check\n}\n\n/**\n * Executor addresses for different stages.\n */\nexport const EXECUTOR_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0x1d8727df513fa2a8785d0834e40b34223daff1affc079574082baadb74b66ee4', // MAINNET\n    [Stage.TESTNET]: '0xc192864c4215741051321d44f89c3b7a54840a0b1b7ef5bec6149a07f9df4641',\n    [Stage.SANDBOX]: '0xce28babbf0e389e9f153d6e80af4e5dd5f24a3d7a9c3697864ef862752df1032', // switch to executorAdmin wallet, requested by Alvin.\n}\n\n/**\n * Executor extension addresses for different stages.\n */\nexport const EXECUTOR_EXT_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0xd122ac52d43736e0f524a334fc37b6750884559da7ddf1aee0b11b6ae62643d7', // MAINNET\n    [Stage.TESTNET]: '0x39942f4bd78e899f162644b5ec5998a19cb6de1ff8b7321070cb75cf96e5cf6c',\n    [Stage.SANDBOX]: '0xd8f318cab62a1142e1cd60f3f090331becc9a462a1a85180de8a99e2a27eadc0', //TODO(Ethan) double check\n}\n\n/**\n * Executor v2 addresses for different stages.\n */\nexport const EXECUTOR_V2_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0x54ad3d30af77b60d939ae356e6606de9a4da67583f02b962d2d3f2e481484e90', // MAINNET\n    [Stage.TESTNET]: '0x1759cc0d3161f1eb79f65847d4feb9d1f74fb79014698a23b16b28b9cd4c37e3',\n    [Stage.SANDBOX]: '0xf2e1e034475dc0439487dd09dfc3950c462f731599e53a6b015dd85502352e68',\n}\n\nexport const EXECUTOR_FEE_LIB_V1_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0xf3cea996f573055d29acdf0a5b4c342437a1d51ea49add7b16eecf82f0fca314', // MAINNET\n    [Stage.TESTNET]: '0xe957adc7b93c61c3fb0ad1cba6f302451e81e9e107d0335ec0a6fc44694a418d',\n    [Stage.SANDBOX]: '0x53268a3c075dbe2518b60b5e6f9f8a4df7433f48cd350375538c5f5205d7b6b3',\n}\n\n// LAYERZERO_APPS_PUBKEY will be used to call simulateTransaction\n/**\n * Layerzero apps public keys for different stages.\n */\nexport const LAYERZERO_APPS_PUBKEY: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0xf57e5a95ae0e2b5f999ac14abd0ff73daf64e6e7e2a1fad024f2e44422e88d76', // MAINNET\n    [Stage.TESTNET]: '0xa6d39a1f522da0298a387032952393b1dd2f88ea75423de05c26792930c60ac0',\n    [Stage.SANDBOX]: '0x116a5d69ece688512eaf0c0849ca587c6386c36a474d21504a4b6f6ae3a3a487',\n}\n\n/**\n * Bridge addresses for different stages.\n */\nexport const BRIDGE_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa', // MAINNET\n    [Stage.TESTNET]: '0xec84c05cc40950c86d8a8bed19552f1e8ebb783196bb021c916161d22dc179f7',\n    [Stage.SANDBOX]: '0xf52132c1ce7922eb0ac4f5342e8d7d0f817a5af9fb8da23793b058ad8ad38e19', //TODO(Ethan) double check\n}\n\n/**\n * Bridge precrime addresses for different stages.\n */\nexport const BRIDGE_PRECRIME_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0x16c7d29eea08ac77dfc4e4665bb56da0ded4e7b82c4c25d535b3d5a5fd6071ad',\n    [Stage.TESTNET]: '0x3ed30825c327d8ee51e079c48b12981053fe2bfe07f74a6572726abf4d5c9afc',\n    [Stage.SANDBOX]: '0x93b4711e61b1339868ab29f109b2204b452d6997bb5b58cf9d2160addfb71724', // TODO TESTNET_SANDBOX\n}\n\n/**\n * OFT precrime addresses for different stages.\n */\nexport const OFT_PRECRIME_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0x273f3e39593a6723adcecd5aa112158c07239043f79609a0380473157c841e19',\n    [Stage.TESTNET]: '0x9fea38276544542be16c4592d1b10cf08d4d9dee33b51eca8a88f17921d985d2',\n    [Stage.SANDBOX]: '0xa721bd722a3eff335044536af6e048afcfaae03043da920639f773154f20afd6', // TODO TESTNET_SANDBOX\n}\n\n/**\n * Counter addresses for different stages.\n */\nexport const COUNTER_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0xb17cebee4f9a1db3c1777a7339358a1355f546739d97995e86d3841e65d09e16', // MAINNET\n    [Stage.TESTNET]: '0x3ded83bd990eb694e2f3970bb7f8dedb106b0e696a635574da9bffc1efe864b4',\n    // [Stage.SANDBOX]: '0x9584ff2b8ec928fc82889c979a0d443ebccde12a0c65840bd302f6254e14c004',\n    [Stage.SANDBOX]: '0x2b249feeed4e30deb84f92c0960baf68652757ce2d7d672d566fdb9a34f8720e',\n}\n\nexport const LAYERZERO_VIEW_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0xe6f6eb32853cb7a43f6ead4bea489b5bb0705b40c41dc13fffd9147c91adfbbf',\n    [Stage.TESTNET]: '0x2eed41cf51a714f968d2ee4a3fa1483bc7e2ce7fb22192fd55c0df96a2aad45f',\n    [Stage.SANDBOX]: '0xaebc3f4f27559ea378f21d75b43236ea0f8038a2c171224eb01be7a7dfe918ab',\n}\n\nexport const LAYERZERO_VIEW_ULN301_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0x49bbf8d8214fb2b158f50ecf3d75a73da133440776bff0db6005c1175138e7c0',\n    [Stage.TESTNET]: '0xa37316bc18fa9b5b5e976b9bc9b103565443cc72b85981d61c72324bf50ede1f',\n    [Stage.SANDBOX]: '0x5df37117d3fa3d577908d8741a70122cfb04718e94e768a130d2133363c505c8',\n}\n\nexport const AIRDROP_WRAPPER_ADDRESS: { [stage in Stage]?: string } = {\n    [Stage.MAINNET]: '0xe5e98365149e3c4dc4bf0116f8c7a1ae89dd57d27530032bb733a3c3d774fc5d',\n    [Stage.TESTNET]: '0x8b4deb76c00a75ec75722ca0aa6608a76fae0d86176f7e96ed5fcf012c863c99',\n    [Stage.SANDBOX]: '0xc81f7a4f09fa14c425c3a94ee147c8a4200cf5b047dceb3429288877b3bf11b7',\n}\n","// scan packets from event history\nimport crypto from 'crypto'\n\nimport { sha3_256 as sha3Hash } from '@noble/hashes/sha3'\nimport { bytesToHex } from '@noble/hashes/utils'\nimport * as aptos from 'aptos'\nimport { HexString } from 'aptos'\nimport * as bip39 from 'bip39'\nimport BN from 'bn.js'\nimport { ExtendedBuffer } from 'extended-buffer'\nimport invariant from 'tiny-invariant'\n\nimport { ArgumentABI, TransactionScriptABI } from './abi'\nimport { SDK } from './index'\nimport { Packet, TypeInfo } from './types'\n\n/**\n * The zero address in hex string format.\n */\nexport const ZERO_ADDRESS_HEX = fullAddress('0x0').toString()\n\n/**\n * The zero address in byte array format.\n */\nexport const ZERO_ADDRESS_BYTES = fullAddress('0x0').toUint8Array()\n\n/**\n * The gas limit safety basis points.\n */\nexport const GAS_LIMIT_SAFETY_BPS = 2000\n\n/**\n * Encodes a packet into a buffer.\n *\n * @param {Packet} packet - The packet to encode.\n * @returns {Buffer} The encoded packet.\n */\nexport function encodePacket(packet: Packet): Buffer {\n    const encoded_packet = new ExtendedBuffer()\n    encoded_packet.writeBuffer(new BN(packet.nonce.toString()).toArrayLike(Buffer, 'be', 8))\n    encoded_packet.writeUInt16BE(new BN(packet.src_chain_id).toNumber())\n    encoded_packet.writeBuffer(packet.src_address)\n    encoded_packet.writeUInt16BE(new BN(packet.dst_chain_id).toNumber())\n    encoded_packet.writeBuffer(packet.dst_address)\n    encoded_packet.writeBuffer(packet.payload)\n    return encoded_packet.buffer\n}\n\n/**\n * Computes the GUID for a packet.\n *\n * @param {Packet} packet - The packet.\n * @returns {string} The computed GUID.\n */\nexport function computeGuid(packet: Packet): string {\n    const encoded_packet = new ExtendedBuffer()\n    encoded_packet.writeBuffer(new BN(packet.nonce.toString()).toArrayLike(Buffer, 'be', 8))\n    encoded_packet.writeUInt16BE(new BN(packet.src_chain_id).toNumber())\n    encoded_packet.writeBuffer(packet.src_address)\n    encoded_packet.writeUInt16BE(new BN(packet.dst_chain_id).toNumber())\n    encoded_packet.writeBuffer(packet.dst_address)\n    return hashBuffer(encoded_packet.buffer)\n}\n\nexport type GetAddressSizeOfChainFunc = (chainId: number) => Promise<number>\n\n/**\n * decode the packet generated on the Aptos chain only, it assumes that the size of the source address is 32\n *\n * @param {Buffer} buf - The buffer containing the encoded packet.\n * @param {number | GetAddressSizeOfChainFunc} getAddressSizeOfChain - A number or a function to return the size of the destination address.\n * @returns {Promise<Packet>} The decoded packet.\n */\nexport async function decodePacket(\n    buf: Buffer,\n    getAddressSizeOfChain: number | GetAddressSizeOfChainFunc\n): Promise<Packet> {\n    // based on encodePacket, implement decodePacket\n    const extendedBuffer = new ExtendedBuffer()\n    extendedBuffer.writeBuffer(buf)\n    const nonce = BigInt(new BN(Uint8Array.from(extendedBuffer.readBuffer(8, true)), 'be').toString())\n    const src_chain_id = extendedBuffer.readUInt16BE()\n    const src_address = extendedBuffer.readBuffer(32, true)\n    const dst_chain_id = extendedBuffer.readUInt16BE()\n    let addressSize = 0\n    if (typeof getAddressSizeOfChain === 'number') {\n        addressSize = getAddressSizeOfChain\n    } else if (typeof getAddressSizeOfChain === 'function') {\n        addressSize = await getAddressSizeOfChain(dst_chain_id)\n    }\n    const dst_address = extendedBuffer.readBuffer(addressSize, true)\n    const payload = extendedBuffer.readBuffer(extendedBuffer.getReadableSize(), true)\n    return {\n        nonce,\n        src_chain_id,\n        src_address,\n        dst_chain_id,\n        dst_address,\n        payload,\n    }\n}\n\n/**\n * Decodes an encoded packet string.\n *\n * @param {string} encodedPacket - The encoded packet string.\n * @param {number} dstAddressSize - The size of the destination address.\n * @returns {Promise<Packet>} The decoded packet.\n */\nexport async function decodePacketString(encodedPacket: string, dstAddressSize: number): Promise<Packet> {\n    return decodePacket(Buffer.from(aptos.HexString.ensure(encodedPacket).toUint8Array()), dstAddressSize)\n}\n\n/**\n * Computes the SHA3-256 hash of a buffer.\n *\n * @param {Buffer} buf - The buffer to hash.\n * @returns {string} The hash of the buffer.\n */\nexport function hashBuffer(buf: Buffer): string {\n    return crypto.createHash('sha3-256').update(buf).digest('hex')\n}\n\n/**\n * Computes the hash of a packet.\n *\n * @param {Packet} packet - The packet to hash.\n * @returns {string} The hash of the packet.\n */\nexport function hashPacket(packet: Packet): string {\n    return hashBuffer(encodePacket(packet))\n}\n\n/**\n * Rebuilds a packet from an event.\n *\n * @param {aptos.Types.Event} event - The event.\n * @param {GetAddressSizeOfChainFunc | number} getAddressSizeOfChain - A function or number to get the address size of the chain.\n * @returns {Promise<Packet>} The rebuilt packet.\n */\nexport async function rebuildPacketFromEvent(\n    event: aptos.Types.Event,\n    getAddressSizeOfChain: GetAddressSizeOfChainFunc | number\n): Promise<Packet> {\n    const hexValue = event.data.encoded_packet.replace(/^0x/, '')\n    const input = Buffer.from(hexValue, 'hex')\n    return decodePacket(input, getAddressSizeOfChain)\n}\n\n/**\n * Generates a multisig public key and address.\n *\n * @param {Uint8Array[]} publicKeys - The public keys.\n * @param {number} threshold - The threshold.\n * @returns {Promise<[aptos.TxnBuilderTypes.MultiEd25519PublicKey, string]>} The multisig public key and address.\n */\nexport async function generateMultisig(\n    publicKeys: Uint8Array[],\n    threshold: number\n): Promise<[aptos.TxnBuilderTypes.MultiEd25519PublicKey, string]> {\n    const multiSigPublicKey = new aptos.TxnBuilderTypes.MultiEd25519PublicKey(\n        publicKeys.map((publicKey) => new aptos.TxnBuilderTypes.Ed25519PublicKey(publicKey)),\n        threshold\n    )\n    const authKey = aptos.TxnBuilderTypes.AuthenticationKey.fromMultiEd25519PublicKey(multiSigPublicKey)\n    return [multiSigPublicKey, authKey.derivedAddress().toString()]\n}\n\n/**\n * Signs a BCS transaction with multiple signatures.\n *\n * @param {aptos.TxnBuilderTypes.MultiEd25519PublicKey} pubkey - The multisig public key.\n * @param {aptos.TxnBuilderTypes.RawTransaction} rawTx - The raw transaction.\n * @param {aptos.HexString[]} signatures - The signatures.\n * @param {number[]} bitmap - The bitmap.\n * @returns {aptos.BCS.Bytes} The signed BCS transaction.\n */\nexport function multiSigSignedBCSTxn(\n    pubkey: aptos.TxnBuilderTypes.MultiEd25519PublicKey,\n    rawTx: aptos.TxnBuilderTypes.RawTransaction,\n    signatures: aptos.HexString[],\n    bitmap: number[]\n): aptos.BCS.Bytes {\n    const txBuilder = new aptos.TransactionBuilderMultiEd25519(() => {\n        return new aptos.TxnBuilderTypes.MultiEd25519Signature(\n            signatures.map((signature) => new aptos.TxnBuilderTypes.Ed25519Signature(signature.toUint8Array())),\n            aptos.TxnBuilderTypes.MultiEd25519Signature.createBitmap(bitmap)\n        )\n    }, pubkey)\n    return txBuilder.sign(rawTx)\n}\n\n/**\n * Ensures the full address format.\n *\n * @param {string | aptos.HexString} address - The address.\n * @returns {aptos.HexString} The full address.\n */\nexport function fullAddress(address: string | aptos.HexString): aptos.HexString {\n    const rawValue = aptos.HexString.ensure(address).noPrefix()\n    return aptos.HexString.ensure(\n        Buffer.concat([Buffer.alloc(64 - rawValue.length, '0'), Buffer.from(rawValue)]).toString()\n    )\n}\n\n/**\n * Checks if a string is a valid hex string.\n *\n * @param {string} hex - The hex string.\n * @returns {boolean} True if the string is a valid hex string, false otherwise.\n */\nfunction isHexStrict(hex: string): boolean {\n    return /^(-)?0x[0-9a-f]*$/i.test(hex)\n}\n\n/**\n * Converts a hex string to an ASCII string.\n * https://github.com/ChainSafe/web3.js/blob/release/1.7.5/packages/web3-utils/src/index.js#L166\n *\n * @param {string} hex - The hex string.\n * @returns {string} The ASCII string.\n * @throws {Error} If the hex string is invalid.\n */\nexport function hexToAscii(hex: string): string {\n    invariant(isHexStrict(hex), `Invalid hex string ${hex}`)\n\n    let str = ''\n    let i = 0\n    const l = hex.length\n    if (hex.startsWith('0x')) {\n        i = 2\n    }\n    for (; i < l; i += 2) {\n        const code = parseInt(hex.slice(i, i + 2), 16)\n        str += String.fromCharCode(code)\n    }\n\n    return str\n}\n\n/**\n * Checks if two addresses are the same.\n *\n * @param {string | HexString} a - The first address.\n * @param {string | HexString} b - The second address.\n * @returns {boolean} True if the addresses are the same, false otherwise.\n */\nexport function isSameAddress(a: string | HexString, b: string | HexString): boolean {\n    return fullAddress(a).toString() == fullAddress(b).toString()\n}\n\n/**\n * Checks if an address is the zero address.\n *\n * @param {string | HexString} a - The address.\n * @returns {boolean} True if the address is the zero address, false otherwise.\n */\nexport function isZeroAddress(a: string | HexString): boolean {\n    return isSameAddress(a, ZERO_ADDRESS_HEX)\n}\n\n/**\n * Converts a Uint64 to bytes.\n *\n * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} number - The number to convert.\n * @returns {aptos.BCS.Bytes} The bytes.\n */\nexport function convertUint64ToBytes(number: aptos.BCS.Uint64 | aptos.BCS.Uint32): aptos.BCS.Bytes {\n    return aptos.BCS.bcsSerializeUint64(number).reverse() //big endian\n}\n\n/**\n * Converts bytes to a Uint64.\n *\n * @param {aptos.BCS.Bytes} bytes - The bytes to convert.\n * @returns {aptos.BCS.Uint64} The Uint64.\n */\nexport function convertBytesToUint64(bytes: aptos.BCS.Bytes): aptos.BCS.Uint64 {\n    return BigInt(new BN(bytes, 'be').toString())\n}\n\n/**\n * Checks if an error is an API error with a specific status.\n *\n * @param {any} e - The error.\n * @param {number} status - The status.\n * @returns {boolean} True if the error is an API error with the specified status, false otherwise.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isErrorOfApiError(e: any, status: number): boolean {\n    if (e instanceof aptos.ApiError) {\n        return e.status === status\n    } /** else if (e instanceof aptos.Types.ApiError) {\n        return e.status === status\n    } */ else if (e instanceof Error && e.constructor.name.match(/ApiError[0-9]*/)) {\n        if (Object.prototype.hasOwnProperty.call(e, 'vmErrorCode')) {\n            const err = e as aptos.ApiError\n            return err.status === status\n        } else if (Object.prototype.hasOwnProperty.call(e, 'request')) {\n            // const err = e as aptos.Types.ApiError\n            const err = e as aptos.ApiError\n            return err.status === status\n        }\n    } else if (e instanceof Error) {\n        if (Object.prototype.hasOwnProperty.call(e, 'status')) {\n            return (e as any).status === status\n        }\n    }\n    return false\n}\n\n/**\n * Converts aptos.BCS.Bytes to a Uint8Array, left padding with 0x0 elements.\n *\n * @param {aptos.BCS.Bytes} data - The data to convert.\n * @param {number} length - The length of the resulting array.\n * @returns {Uint8Array} The resulting Uint8Array.\n */\nexport function bytesToUint8Array(data: aptos.BCS.Bytes, length: number): Uint8Array {\n    return paddingUint8Array(data, length)\n}\n\n/**\n * Converts a hex string to a Uint8Array, left padding with 0x0 elements.\n *\n * @deprecated use {@link stringToPaddedUint8Array}\n * @param {string} str - The hex string.\n * @param {number} length - The length of the resulting array.\n * @returns {Uint8Array} The resulting Uint8Array.\n */\nexport function convertToPaddedUint8Array(str: string, length: number): Uint8Array {\n    return stringToPaddedUint8Array(str, length)\n}\n\n/**\n * Converts a hex string to a Uint8Array, left padding with 0x0 elements.\n *\n * @param {string} str - The hex string.\n * @param {number} length - The length of the resulting array.\n * @returns {Uint8Array} The resulting Uint8Array.\n */\nexport function stringToPaddedUint8Array(str: string, length: number): Uint8Array {\n    const value = stringToUint8Array(str)\n    return paddingUint8Array(value, length)\n}\n\n/**\n * Left pads a Uint8Array with 0x0 elements.\n *\n * @param {Uint8Array} bytes - The bytes to pad.\n * @param {number} length - The length of the resulting array.\n * @returns {Uint8Array} The resulting Uint8Array.\n */\nexport function paddingUint8Array(bytes: Uint8Array, length: number): Uint8Array {\n    if (bytes.length >= length) {\n        return bytes\n    }\n    return Uint8Array.from([...new Array(length - bytes.length), ...Array.from(bytes)])\n}\n\n/**\n * convert a hex string to Uint8Array\n * 0x123 will be [0x01, 0x23] instead of [0x12, 0x03]\n *\n * @param {string} str - The hex string.\n * @returns {Uint8Array} The resulting Uint8Array.\n */\nexport function stringToUint8Array(str: string): Uint8Array {\n    const value = str.replace(/^0x/i, '')\n    const len = value.length + 1 - ((value.length + 1) % 2)\n    return Uint8Array.from(Buffer.from(value.padStart(len, '0'), 'hex'))\n}\n\n/**\n * Interface representing a multiple signature item.\n */\nexport interface MutipleSignatureItem {\n    /**\n     * The signature in hex string format.\n     */\n    signature: aptos.HexString\n\n    /**\n     * The bitmap index.\n     */\n    bitmap: number\n}\n\n/**\n * Type representing a function that signs data with multiple signers.\n *\n * @param {Uint8Array} data - The data to sign.\n * @returns {Promise<MutipleSignatureItem[]>} A promise that resolves to an array of multiple signature items.\n */\nexport type MultipleSignFunc = (data: Uint8Array) => Promise<MutipleSignatureItem[]>\n\n/**\n * Creates a sign function with multiple signers.\n *\n * @param {...aptos.AptosAccount[]} signers - The signers.\n * @returns {MultipleSignFunc} The sign function.\n */\nexport function makeSignFuncWithMultipleSigners(...signers: aptos.AptosAccount[]) {\n    return async function (data: Uint8Array): Promise<MutipleSignatureItem[]> {\n        const retval = signers.map((s, index): MutipleSignatureItem => {\n            return {\n                signature: s.signBuffer(data),\n                bitmap: index,\n            }\n        })\n        return Promise.resolve(retval)\n    }\n}\n\n/**\n * Applies a gas limit safety margin.\n *\n * @param {string} gasUsed - The gas used.\n * @returns {bigint} The gas limit with safety margin applied.\n */\nexport function applyGasLimitSafety(gasUsed: string): bigint {\n    return (BigInt(gasUsed) * BigInt(10000 + GAS_LIMIT_SAFETY_BPS)) / BigInt(10000)\n}\n\n/**\n * Decodes a payload.\n *\n * @param {Buffer} payload - The payload.\n * @returns {{ packetType: number, remoteCoinAddr: Buffer, receiverBytes: Buffer, amount: BN }} The decoded payload.\n */\nexport function decodePayload(payload: Buffer): {\n    packetType: number\n    remoteCoinAddr: Buffer\n    receiverBytes: Buffer\n    amount: BN\n} {\n    const extendedBuffer = new ExtendedBuffer()\n    extendedBuffer.writeBuffer(payload)\n    const packetType = extendedBuffer.readUInt8()\n    const remoteCoinAddr = extendedBuffer.readBuffer(32, true)\n    const receiverBytes = extendedBuffer.readBuffer(32, true)\n    const amount = new BN(extendedBuffer.readBuffer(8, true))\n    return {\n        packetType,\n        remoteCoinAddr,\n        receiverBytes,\n        amount,\n    }\n}\n\n/**\n * Gets the signed transaction hash.\n *\n * @param {Uint8Array} signedTransaction - The signed transaction.\n * @returns {string} The transaction hash.\n */\nexport function getSignedTransactionHash(signedTransaction: Uint8Array): string {\n    const deserializer = new aptos.BCS.Deserializer(signedTransaction)\n    const userTxn = aptos.TxnBuilderTypes.UserTransaction.load(deserializer)\n    const txnHash = aptos.HexString.fromUint8Array(userTxn.hash()).toString()\n    return txnHash\n}\n\n/**\n * Gets the address from a public key.\n *\n * @param {aptos.TxnBuilderTypes.Ed25519PublicKey} publicKey - The public key.\n * @returns {aptos.HexString} The address.\n */\nexport function getAddressFromPublicKey(publicKey: aptos.TxnBuilderTypes.Ed25519PublicKey): aptos.HexString {\n    const hash = sha3Hash.create()\n    hash.update(publicKey.toBytes())\n    hash.update('\\x00')\n    return aptos.HexString.fromUint8Array(hash.digest())\n}\n\n/**\n * return the type arguments, which is needed to call lz_receive\n *\n * @param {aptos.BCS.Bytes} bytecode - The bytecode generated by `make compile-script-template`.\n * @param {SDK} sdk - The SDK instance.\n * @param {aptos.TxnBuilderTypes.Ed25519PublicKey} publicKey - The public key of the signer who will submit the transaction.\n * @param {aptos.BCS.Bytes} dstAddress - The UA address on Aptos.\n * @param {aptos.BCS.Uint16} srcChainId - The source chain ID of the packet.\n * @param {aptos.BCS.Bytes} srcAddress - The source address (UA address) of the packet.\n * @param {aptos.BCS.Bytes} payload - The payload of the packet.\n * @returns {Promise<string[]>} The type arguments.\n */\nexport async function getLzReceiveTypeArguments(\n    bytecode: aptos.BCS.Bytes,\n    sdk: SDK,\n    publicKey: aptos.TxnBuilderTypes.Ed25519PublicKey,\n    dstAddress: aptos.BCS.Bytes,\n    srcChainId: aptos.BCS.Uint16,\n    srcAddress: aptos.BCS.Bytes,\n    payload: aptos.BCS.Bytes\n): Promise<string[]> {\n    const uaAddress = aptos.HexString.ensure(Buffer.from(dstAddress).toString('hex'))\n    const uaTypeInfo = await sdk.LayerzeroModule.Endpoint.getUATypeInfo(uaAddress)\n\n    const ABIS = [\n        new TransactionScriptABI(\n            'main',\n            '',\n            bytecode,\n            [],\n            [\n                new ArgumentABI('src_chain_id', new aptos.TypeTagParser('u64').parseTypeTag()),\n                new ArgumentABI('src_address', new aptos.TypeTagParser('vector<u8>').parseTypeTag()),\n                new ArgumentABI('payload', new aptos.TypeTagParser('vector<u8>').parseTypeTag()),\n            ]\n        ),\n    ]\n\n    const abis = ABIS.map((abi) => {\n        const serializer = new aptos.BCS.Serializer()\n        abi.serialize(serializer)\n        return serializer.getBytes()\n    })\n\n    const builder = new aptos.TransactionBuilderABI(abis)\n    const transaction = builder.buildTransactionPayload(\n        'main',\n        [],\n        [srcChainId, Uint8Array.from(srcAddress), Uint8Array.from(payload)]\n    )\n\n    const address = getAddressFromPublicKey(publicKey)\n    const rawTransaction = await sdk.client.generateRawTransaction(address, transaction, {})\n    const txns = await sdk.client.simulateTransaction(publicKey, rawTransaction)\n    // console.log(txns)\n    // console.log(txns[0].changes)\n    if (!txns[0].success) {\n        throw new Error(txns[0].vm_status)\n    }\n\n    const result = txns\n        .flatMap((txn) => txn.changes)\n        .filter(\n            (change) =>\n                change.type === 'write_resource' &&\n                (change as aptos.Types.WriteSetChange_WriteResource).data.type.match(/::executor_ext::TypeArguments$/)\n        )\n        .map((change) => (change as aptos.Types.WriteSetChange_WriteResource).data.data)\n        .flatMap((r) => {\n            return (r as any).types\n        })\n        .map((t) => {\n            const account_address = fullAddress(t.account_address).toString()\n            const module_name = hexToAscii(t.module_name)\n            const struct_name = hexToAscii(t.struct_name)\n            return `${account_address}::${module_name}::${struct_name}`\n        })\n\n    return result\n}\n\n/**\n * The scheme used to derive resource accounts.\n */\nconst DERIVE_RESOURCE_ACCOUNT_SCHEME = 255\n\n/**\n * Gets the resource address.\n *\n * @param {aptos.MaybeHexString} source - The source address.\n * @param {Uint8Array} seed - The seed.\n * @returns {aptos.HexString} The resource address.\n */\nexport function getResourceAddress(source: aptos.MaybeHexString, seed: Uint8Array): aptos.HexString {\n    const bytes = [...aptos.HexString.ensure(source).toUint8Array(), ...seed, DERIVE_RESOURCE_ACCOUNT_SCHEME]\n    const hash = crypto.createHash('sha3-256').update(Buffer.from(bytes)).digest('hex')\n    return aptos.HexString.ensure(hash)\n}\n\n/**\n * Gets an Aptos account from a private key.\n *\n * @param {string} key - The private key.\n * @returns {aptos.AptosAccount} The Aptos account.\n */\nexport function getAccountFromPrivateKey(key: string): aptos.AptosAccount {\n    const privateKeyBytes = Uint8Array.from(Buffer.from(aptos.HexString.ensure(key).noPrefix(), 'hex'))\n    return new aptos.AptosAccount(privateKeyBytes)\n}\n\n/**\n * Gets an Aptos account from a mnemonic phrase.\n *\n * @param {string} mnemonic - The mnemonic phrase.\n * @param {string} [path=\"m/44'/637'/0'/0'/0'\"] - The derivation path.\n * @returns {aptos.AptosAccount} The Aptos account.\n * @throws {Error} If the derivation path is invalid.\n */\nexport function getAccountFromMnemonic(mnemonic: string, path = \"m/44'/637'/0'/0'/0'\"): aptos.AptosAccount {\n    //https://aptos.dev/guides/building-your-own-wallet/#creating-an-aptos-account\n    if (!aptos.AptosAccount.isValidPath(path)) {\n        throw new Error(`Invalid derivation path: ${path}`)\n    }\n    const normalizeMnemonics = mnemonic\n        .trim()\n        .split(/\\s+/)\n        .map((part) => part.toLowerCase())\n        .join(' ')\n    {\n        const { key } = aptos.derivePath(path, bytesToHex(bip39.mnemonicToSeedSync(normalizeMnemonics)))\n        return new aptos.AptosAccount(new Uint8Array(key))\n    }\n}\n\n/**\n * Normalizes a TypeInfo object.\n *\n * @param {TypeInfo} typeInfo - The TypeInfo object.\n * @returns {TypeInfo} The normalized TypeInfo object.\n */\nexport function normalizeTypeInfo(typeInfo: TypeInfo): TypeInfo {\n    const account_address = aptos.HexString.ensure(typeInfo.account_address).toString()\n    const module_name = hexToAscii(typeInfo.module_name)\n    const struct_name = hexToAscii(typeInfo.struct_name)\n    return {\n        account_address: account_address,\n        module_name: module_name,\n        struct_name: struct_name,\n    }\n}\n\n/**\n * Builds a struct tag from a TypeInfo object.\n *\n * @param {TypeInfo} typeInfo - The TypeInfo object.\n * @returns {string} The struct tag.\n */\nexport function buildStructTagFromTypeInfo(typeInfo: TypeInfo): string {\n    let info = typeInfo\n    if (typeInfo.module_name.match('/^0x.*/i') && typeInfo.struct_name.match(/^0x.*/i)) {\n        info = normalizeTypeInfo(typeInfo)\n    }\n    return `${info.account_address}::${info.module_name}::${info.struct_name}`\n}\n\n/**\n * Checks if a value is a TypeInfo object.\n *\n * @param {TypeInfo | any} value - The value to check.\n * @returns {boolean} True if the value is a TypeInfo object, false otherwise.\n */\nexport function isTypeInfo(value: TypeInfo | any): value is TypeInfo {\n    const hasProperty = Object.prototype.hasOwnProperty\n    return (\n        hasProperty.call(value, 'account_address') &&\n        hasProperty.call(value, 'module_name') &&\n        hasProperty.call(value, 'struct_name')\n    )\n}\n","// Copyright (c) Aptos\n// SPDX-License-Identifier: Apache-2.0\nimport * as aptos from 'aptos'\n\n/**\n * Class representing a type argument ABI.\n */\nexport class TypeArgumentABI {\n    /**\n     * Constructs a TypeArgumentABI instance.\n     *\n     * @param {string} name - The name of the type argument.\n     */\n    constructor(public readonly name: string) {}\n\n    /**\n     * Serializes the TypeArgumentABI instance.\n     *\n     * @param {aptos.BCS.Serializer} serializer - The serializer.\n     */\n    serialize(serializer: aptos.BCS.Serializer): void {\n        serializer.serializeStr(this.name)\n    }\n\n    /**\n     * Deserializes a TypeArgumentABI instance.\n     *\n     * @param {aptos.BCS.Deserializer} deserializer - The deserializer.\n     * @returns {TypeArgumentABI} The deserialized TypeArgumentABI instance.\n     */\n    static deserialize(deserializer: aptos.BCS.Deserializer): TypeArgumentABI {\n        const name = deserializer.deserializeStr()\n        return new TypeArgumentABI(name)\n    }\n}\n\n/**\n * Class representing an argument ABI.\n */\nexport class ArgumentABI {\n    /**\n     * Constructs an ArgumentABI instance.\n     *\n     * @param {string} name - The name of the argument.\n     * @param {aptos.TxnBuilderTypes.TypeTag} type_tag - The type tag of the argument.\n     */\n    constructor(\n        public readonly name: string,\n        public readonly type_tag: aptos.TxnBuilderTypes.TypeTag\n    ) {}\n\n    /**\n     * Serializes the ArgumentABI instance.\n     *\n     * @param {aptos.BCS.Serializer} serializer - The serializer.\n     */\n    serialize(serializer: aptos.BCS.Serializer): void {\n        serializer.serializeStr(this.name)\n        this.type_tag.serialize(serializer)\n    }\n\n    /**\n     * Deserializes an ArgumentABI instance.\n     *\n     * @param {aptos.BCS.Deserializer} deserializer - The deserializer.\n     * @returns {ArgumentABI} The deserialized ArgumentABI instance.\n     */\n    static deserialize(deserializer: aptos.BCS.Deserializer): ArgumentABI {\n        const name = deserializer.deserializeStr()\n        const typeTag = aptos.TxnBuilderTypes.TypeTag.deserialize(deserializer)\n        return new ArgumentABI(name, typeTag)\n    }\n}\n\n/**\n * Abstract class representing a script ABI.\n */\nexport abstract class ScriptABI {\n    /**\n     * Serializes the ScriptABI instance.\n     *\n     * @param {aptos.BCS.Serializer} serializer - The serializer.\n     */\n    abstract serialize(serializer: aptos.BCS.Serializer): void\n\n    /**\n     * Deserializes a ScriptABI instance.\n     *\n     * @param {aptos.BCS.Deserializer} deserializer - The deserializer.\n     * @returns {ScriptABI} The deserialized ScriptABI instance.\n     */\n    static deserialize(deserializer: aptos.BCS.Deserializer): ScriptABI {\n        const index = deserializer.deserializeUleb128AsU32()\n        switch (index) {\n            case 0:\n                return TransactionScriptABI.load(deserializer)\n            case 1:\n                return EntryFunctionABI.load(deserializer)\n            default:\n                throw new Error(`Unknown variant index for TransactionPayload: ${index}`)\n        }\n    }\n}\n\n/**\n * Class representing a transaction script ABI.\n */\nexport class TransactionScriptABI extends ScriptABI {\n    /**\n     * Constructs a TransactionScriptABI instance.\n     *\n     * @param {string} name - The entry function name.\n     * @param {string} doc - The documentation.\n     * @param {aptos.BCS.Bytes} code - The code.\n     * @param {aptos.BCS.Seq<TypeArgumentABI>} ty_args - The type arguments.\n     * @param {aptos.BCS.Seq<ArgumentABI>} args - The arguments.\n     */\n    constructor(\n        public readonly name: string,\n        public readonly doc: string,\n        public readonly code: aptos.BCS.Bytes,\n        public readonly ty_args: aptos.BCS.Seq<TypeArgumentABI>,\n        public readonly args: aptos.BCS.Seq<ArgumentABI>\n    ) {\n        super()\n    }\n\n    /**\n     * Serializes the TransactionScriptABI instance.\n     *\n     * @param {aptos.BCS.Serializer} serializer - The serializer.\n     */\n    serialize(serializer: aptos.BCS.Serializer): void {\n        serializer.serializeU32AsUleb128(0)\n        serializer.serializeStr(this.name)\n        serializer.serializeStr(this.doc)\n        serializer.serializeBytes(this.code)\n        aptos.BCS.serializeVector<TypeArgumentABI>(this.ty_args, serializer)\n        aptos.BCS.serializeVector<ArgumentABI>(this.args, serializer)\n    }\n\n    /**\n     * Loads a TransactionScriptABI instance from a deserializer.\n     *\n     * @param {aptos.BCS.Deserializer} deserializer - The deserializer.\n     * @returns {TransactionScriptABI} The loaded TransactionScriptABI instance.\n     */\n    static load(deserializer: aptos.BCS.Deserializer): TransactionScriptABI {\n        const name = deserializer.deserializeStr()\n        const doc = deserializer.deserializeStr()\n        const code = deserializer.deserializeBytes()\n        const tyArgs = aptos.BCS.deserializeVector(deserializer, TypeArgumentABI)\n        const args = aptos.BCS.deserializeVector(deserializer, ArgumentABI)\n        return new TransactionScriptABI(name, doc, code, tyArgs, args)\n    }\n}\n\n/**\n * Class representing an entry function ABI.\n */\nexport class EntryFunctionABI extends ScriptABI {\n    /**\n     * Constructs an EntryFunctionABI instance.\n     *\n     * @param {string} name - The name of the entry function.\n     * @param {aptos.TxnBuilderTypes.ModuleId} module_name - The fully qualified module ID.\n     * @param {string} doc - The documentation.\n     * @param {aptos.BCS.Seq<TypeArgumentABI>} ty_args - The type arguments.\n     * @param {aptos.BCS.Seq<ArgumentABI>} args - The arguments.\n     */\n    constructor(\n        public readonly name: string,\n        public readonly module_name: aptos.TxnBuilderTypes.ModuleId,\n        public readonly doc: string,\n        public readonly ty_args: aptos.BCS.Seq<TypeArgumentABI>,\n        public readonly args: aptos.BCS.Seq<ArgumentABI>\n    ) {\n        super()\n    }\n\n    /**\n     * Serializes the EntryFunctionABI instance.\n     *\n     * @param {aptos.BCS.Serializer} serializer - The serializer.\n     */\n    serialize(serializer: aptos.BCS.Serializer): void {\n        serializer.serializeU32AsUleb128(1)\n        serializer.serializeStr(this.name)\n        this.module_name.serialize(serializer)\n        serializer.serializeStr(this.doc)\n        aptos.BCS.serializeVector<TypeArgumentABI>(this.ty_args, serializer)\n        aptos.BCS.serializeVector<ArgumentABI>(this.args, serializer)\n    }\n\n    /**\n     * Loads an EntryFunctionABI instance from a deserializer.\n     *\n     * @param {aptos.BCS.Deserializer} deserializer - The deserializer.\n     * @returns {EntryFunctionABI} The loaded EntryFunctionABI instance.\n     */\n    static load(deserializer: aptos.BCS.Deserializer): EntryFunctionABI {\n        const name = deserializer.deserializeStr()\n        const moduleName = aptos.TxnBuilderTypes.ModuleId.deserialize(deserializer)\n        const doc = deserializer.deserializeStr()\n        const tyArgs = aptos.BCS.deserializeVector(deserializer, TypeArgumentABI)\n        const args = aptos.BCS.deserializeVector(deserializer, ArgumentABI)\n        return new EntryFunctionABI(name, moduleName, doc, tyArgs, args)\n    }\n}\n","import * as aptos from 'aptos'\n\nimport { SDK } from '../index'\nimport { isErrorOfApiError } from '../utils'\n\n/**\n * Interface representing the channel type.\n */\nexport interface ChannelType {\n    /**\n     * The outbound nonce.\n     */\n    outbound_nonce: string\n\n    /**\n     * The inbound nonce.\n     */\n    inbound_nonce: string\n\n    /**\n     * The payload hashes.\n     */\n    payload_hashs: { handle: string }\n}\n\n/**\n * Class representing a channel.\n */\nexport class Channel {\n    /**\n     * The module name.\n     */\n    public readonly module\n\n    /**\n     * Creates an instance of the Channel class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(private sdk: SDK) {\n        this.module = `${sdk.accounts.layerzero}::channel`\n    }\n\n    /**\n     * Gets outbound events.\n     *\n     * @param {bigint} start - The start index.\n     * @param {number} limit - The limit of events to retrieve.\n     * @returns {Promise<aptos.Types.Event[]>} A promise that resolves to an array of events.\n     */\n    async getOutboundEvents(start: bigint, limit: number): Promise<aptos.Types.Event[]> {\n        return this.sdk.client.getEventsByEventHandle(\n            this.sdk.accounts.layerzero!,\n            `${this.module}::EventStore`,\n            'outbound_events',\n            {\n                start,\n                limit,\n            }\n        )\n    }\n\n    /**\n     * Gets inbound events.\n     *\n     * @param {bigint} start - The start index.\n     * @param {number} limit - The limit of events to retrieve.\n     * @returns {Promise<aptos.Types.Event[]>} A promise that resolves to an array of events.\n     */\n    async getInboundEvents(start: bigint, limit: number): Promise<aptos.Types.Event[]> {\n        return this.sdk.client.getEventsByEventHandle(\n            this.sdk.accounts.layerzero!,\n            `${this.module}::EventStore`,\n            'inbound_events',\n            { start, limit }\n        )\n    }\n\n    /**\n     * Gets receive events.\n     *\n     * @param {bigint} start - The start index.\n     * @param {number} limit - The limit of events to retrieve.\n     * @returns {Promise<aptos.Types.Event[]>} A promise that resolves to an array of events.\n     */\n    async getReceiveEvents(start: bigint, limit: number): Promise<aptos.Types.Event[]> {\n        return this.sdk.client.getEventsByEventHandle(\n            this.sdk.accounts.layerzero!,\n            `${this.module}::EventStore`,\n            'receive_events',\n            {\n                start,\n                limit,\n            }\n        )\n    }\n\n    /**\n     * Gets the channel state.\n     *\n     * @param {aptos.MaybeHexString} uaAddress - The user address.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Bytes} remoteAddress - The remote address.\n     * @param {Object} [query] - The query parameters.\n     * @param {bigint | number} [query.ledgerVersion] - The ledger version.\n     * @returns {Promise<ChannelType>} A promise that resolves to the channel state.\n     */\n    async getChannelState(\n        uaAddress: aptos.MaybeHexString,\n        remoteChainId: aptos.BCS.Uint16,\n        remoteAddress: aptos.BCS.Bytes,\n        query?: {\n            ledgerVersion?: bigint | number\n        }\n    ): Promise<ChannelType> {\n        const resource = await this.sdk.client.getAccountResource(uaAddress, `${this.module}::Channels`, query)\n        const { states } = resource.data as { states: { handle: string } }\n        const pathsHandle = states.handle\n\n        return this.sdk.client.getTableItem(\n            pathsHandle,\n            {\n                key_type: `${this.module}::Remote`,\n                value_type: `${this.module}::Channel`,\n                key: { chain_id: remoteChainId.toString(), addr: Buffer.from(remoteAddress).toString('hex') },\n            },\n            query\n        )\n    }\n\n    /**\n     * Gets the outbound nonce.\n     *\n     * @param {aptos.MaybeHexString} uaAddress - The user address.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Bytes} remoteAddress - The remote address.\n     * @param {Object} [query] - The query parameters.\n     * @param {bigint | number} [query.ledgerVersion] - The ledger version.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the outbound nonce.\n     */\n    async getOutboundNonce(\n        uaAddress: aptos.MaybeHexString,\n        remoteChainId: aptos.BCS.Uint16,\n        remoteAddress: aptos.BCS.Bytes,\n        query?: {\n            ledgerVersion?: bigint | number\n        }\n    ): Promise<aptos.BCS.Uint64> {\n        try {\n            const pathInfo = await this.getChannelState(uaAddress, remoteChainId, remoteAddress, query)\n            const outboundNonce = pathInfo.outbound_nonce\n            return BigInt(outboundNonce)\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return BigInt(0)\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Gets the inbound nonce.\n     *\n     * @param {aptos.MaybeHexString} uaAddress - The user address.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Bytes} remoteAddress - The remote address.\n     * @param {Object} [query] - The query parameters.\n     * @param {bigint | number} [query.ledgerVersion] - The ledger version.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the inbound nonce.\n     */\n    async getInboundNonce(\n        uaAddress: aptos.MaybeHexString,\n        remoteChainId: aptos.BCS.Uint16,\n        remoteAddress: aptos.BCS.Bytes,\n        query?: {\n            ledgerVersion?: bigint | number\n        }\n    ): Promise<aptos.BCS.Uint64> {\n        try {\n            const pathInfo = await this.getChannelState(uaAddress, remoteChainId, remoteAddress, query)\n            const inboundNonce = pathInfo.inbound_nonce\n            return BigInt(inboundNonce)\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return BigInt(0)\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Gets the payload hash.\n     *\n     * @param {aptos.MaybeHexString} uaAddress - The user address.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Bytes} remoteAddress - The remote address.\n     * @param {aptos.BCS.Uint64} nonce - The nonce.\n     * @param {Object} [query] - The query parameters.\n     * @param {bigint | number} [query.ledgerVersion] - The ledger version.\n     * @returns {Promise<string>} A promise that resolves to the payload hash.\n     */\n    async getPayloadHash(\n        uaAddress: aptos.MaybeHexString,\n        remoteChainId: aptos.BCS.Uint16,\n        remoteAddress: aptos.BCS.Bytes,\n        nonce: aptos.BCS.Uint64,\n        query?: {\n            ledgerVersion?: bigint | number\n        }\n    ): Promise<string> {\n        try {\n            const pathInfo = await this.getChannelState(uaAddress, remoteChainId, remoteAddress, query)\n            const resource = pathInfo.payload_hashs\n\n            return await this.sdk.client.getTableItem(\n                resource.handle,\n                {\n                    key_type: 'u64',\n                    value_type: 'vector<u8>',\n                    key: nonce.toString(),\n                },\n                query\n            )\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return ''\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Checks if the proof is delivered.\n     *\n     * @param {aptos.MaybeHexString} uaAddress - The user address.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Bytes} remoteAddress - The remote address.\n     * @param {aptos.BCS.Uint64} nonce - The nonce.\n     * @param {Object} [query] - The query parameters.\n     * @param {bigint | number} [query.ledgerVersion] - The ledger version.\n     * @returns {Promise<boolean>} A promise that resolves to true if the proof is delivered, false otherwise.\n     */\n    async isProofDelivered(\n        uaAddress: aptos.MaybeHexString,\n        remoteChainId: aptos.BCS.Uint16,\n        remoteAddress: aptos.BCS.Bytes,\n        nonce: aptos.BCS.Uint64,\n        query?: {\n            ledgerVersion?: bigint | number\n        }\n    ): Promise<boolean> {\n        const inboundNonce = await this.getInboundNonce(uaAddress, remoteChainId, remoteAddress, query)\n        console.log(`inboundNonce: ${inboundNonce}`)\n        console.log(`nonce: ${nonce}`)\n        if (nonce <= inboundNonce) {\n            return true\n        }\n        const payloadHash = await this.getPayloadHash(uaAddress, remoteChainId, remoteAddress, nonce, query)\n        return payloadHash !== ''\n    }\n}\n","import * as aptos from 'aptos'\nimport { ApiError } from 'aptos'\n\nimport { SDK } from '../index'\nimport { TypeInfoEx } from '../types'\nimport { fullAddress, hexToAscii, isErrorOfApiError } from '../utils'\n\n/**\n * Class representing an endpoint.\n */\nexport class Endpoint {\n    /**\n     * The module name.\n     */\n    public readonly module\n\n    /**\n     * The module name with namespace.\n     */\n    public readonly moduleName\n\n    /**\n     * The view module name.\n     */\n    public readonly viewModule\n\n    /**\n     * The view module name for uln301.\n     */\n    public readonly viewUln301Module\n\n    /**\n     * Creates an instance of the Endpoint class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(private sdk: SDK) {\n        this.module = `${sdk.accounts.layerzero}::endpoint`\n        this.moduleName = 'layerzero::endpoint'\n        this.viewModule = `${sdk.accounts.view}::endpoint_view`\n        this.viewUln301Module = `${sdk.accounts.view_uln301}::uln_301`\n    }\n\n    /**\n     * Initializes the endpoint.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} localChainId - The local chain ID.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async initialize(signer: aptos.AptosAccount, localChainId: aptos.BCS.Uint16): Promise<aptos.Types.Transaction> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::init`,\n            type_arguments: [],\n            arguments: [localChainId],\n        }\n\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the local chain ID.\n     *\n     * @returns {Promise<aptos.BCS.Uint64 | undefined>} A promise that resolves to the local chain ID or undefined if not found.\n     */\n    async getLocalChainId(): Promise<aptos.BCS.Uint64 | undefined> {\n        try {\n            const resource = await this.sdk.client.getAccountResource(\n                this.sdk.accounts.layerzero!,\n                `${this.module}::ChainConfig`\n            )\n            const { local_chain_id } = resource.data as { local_chain_id: aptos.BCS.Uint64 }\n            return local_chain_id\n        } catch (err: unknown) {\n            if (err instanceof ApiError && err.errorCode === 'resource_not_found') {\n                return undefined\n            }\n            throw err\n        }\n    }\n\n    /**\n     * Gets the UA type information.\n     *\n     * @param {aptos.MaybeHexString} uaAddress - The UA address.\n     * @returns {Promise<TypeInfoEx>} A promise that resolves to the type information.\n     */\n    async getUATypeInfo(uaAddress: aptos.MaybeHexString): Promise<TypeInfoEx> {\n        const resource = await this.sdk.client.getAccountResource(\n            this.sdk.accounts.layerzero!,\n            `${this.module}::UaRegistry`\n        )\n        const { ua_infos } = resource.data as { ua_infos: { handle: string } }\n        const typesHandle = ua_infos.handle\n        const typeInfo = await this.sdk.client.getTableItem(typesHandle, {\n            key_type: 'address',\n            value_type: `0x1::type_info::TypeInfo`,\n            key: aptos.HexString.ensure(uaAddress).toString(),\n        })\n\n        const account_address = fullAddress(typeInfo.account_address).toString()\n        const module_name = hexToAscii(typeInfo.module_name)\n        const struct_name = hexToAscii(typeInfo.struct_name)\n        return {\n            account_address,\n            module_name,\n            struct_name,\n            type: `${account_address}::${module_name}::${struct_name}`,\n        }\n    }\n\n    /**\n     * Gets the oracle fee.\n     *\n     * @param {aptos.MaybeHexString} oracleAddr - The oracle address.\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the oracle fee.\n     */\n    async getOracleFee(oracleAddr: aptos.MaybeHexString, dstChainId: aptos.BCS.Uint16): Promise<aptos.BCS.Uint64> {\n        if (this.sdk.accounts.layerzero === undefined) {\n            throw new Error('endpoint sdk accounts layerzero is undefined when invoke getOracleFee')\n        }\n        const resource = await this.sdk.client.getAccountResource(\n            this.sdk.accounts.layerzero,\n            `${this.module}::FeeStore`\n        )\n        const { oracle_fees } = resource.data as { oracle_fees: { handle: string } }\n        const response = await this.sdk.client.getTableItem(oracle_fees.handle, {\n            key_type: `${this.module}::QuoteKey`,\n            value_type: 'u64',\n            key: {\n                agent: aptos.HexString.ensure(oracleAddr).toString(),\n                chain_id: dstChainId.toString(),\n            },\n        })\n        return BigInt(response)\n    }\n\n    /**\n     * Gets the register events.\n     *\n     * @param {bigint} start - The start index.\n     * @param {number} limit - The limit of events to fetch.\n     * @returns {Promise<aptos.Types.Event[]>} A promise that resolves to an array of events.\n     */\n    async getRegisterEvents(start: bigint, limit: number): Promise<aptos.Types.Event[]> {\n        if (this.sdk.accounts.layerzero === undefined) {\n            throw new Error('endpoint sdk accounts layerzero is undefined when invoke getRegisterEvents')\n        }\n        return this.sdk.client.getEventsByEventHandle(\n            this.sdk.accounts.layerzero,\n            `${this.module}::UaRegistry`,\n            'register_events',\n            {\n                start,\n                limit,\n            }\n        )\n    }\n\n    /**\n     * Quotes the fee.\n     *\n     * @param {aptos.MaybeHexString} uaAddress - The UA address.\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Bytes} adapterParams - The adapter parameters.\n     * @param {number} payloadSize - The payload size.\n     * @param {Object} [query] - The query parameters.\n     * @param {bigint | number} [query.ledgerVersion] - The ledger version.\n     * @param {aptos.BCS.Bytes} [msglibParams] - The msglib parameters.\n     * @returns {Promise<{ nativeFee: aptos.BCS.Uint64; zroFee: aptos.BCS.Uint64 }>} A promise that resolves to the quoted fee.\n     */\n    async quoteFee(\n        uaAddress: aptos.MaybeHexString,\n        dstChainId: aptos.BCS.Uint16,\n        adapterParams: aptos.BCS.Bytes,\n        payloadSize: number,\n        msglibParams?: aptos.BCS.Bytes,\n        payInZro = false,\n        query?: {\n            ledgerVersion?: bigint | number\n        }\n    ): Promise<{\n        nativeFee: aptos.BCS.Uint64\n        zroFee: aptos.BCS.Uint64\n    }> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.viewModule}::quote_fee`,\n            type_arguments: [],\n            arguments: [\n                uaAddress,\n                dstChainId.toString(),\n                payloadSize.toString(),\n                payInZro,\n                Buffer.from(adapterParams).toString('hex'),\n                Buffer.from(msglibParams ?? new Uint8Array([])).toString('hex'),\n            ],\n        }\n        const view = await this.sdk.viewFunction(payload)\n        const [nativeFee, zroFee] = view[0] as [aptos.BCS.Uint64, aptos.BCS.Uint64]\n        return {\n            nativeFee,\n            zroFee,\n        }\n    }\n\n    /**\n     * Checks if a message is verifiable.\n     *\n     * @param {string} packetHeaderBytes - The packet header bytes.\n     * @param {string} payloadHash - The payload hash.\n     * @returns {Promise<aptos.BCS.Uint8>} A promise that resolves to the verifiable state.\n     */\n    async verifiable(packetHeaderBytes: string, payloadHash: string): Promise<aptos.BCS.Uint8> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.viewUln301Module}::verifiable`,\n            type_arguments: [],\n            arguments: [packetHeaderBytes, payloadHash],\n        }\n        const view = await this.sdk.viewFunction(payload)\n        return view[0] as aptos.BCS.Uint8\n    }\n\n    /**\n     * Checks if a message is executable.\n     *\n     * @param {aptos.BCS.Uint32} srcEid - The source endpoint ID.\n     * @param {aptos.BCS.Bytes} sender - The sender.\n     * @param {aptos.BCS.Uint64} nonce - The nonce.\n     * @param {aptos.MaybeHexString} receiver - The receiver.\n     * @returns {Promise<aptos.BCS.Uint8>} A promise that resolves to the executable state.\n     */\n    async executable(\n        srcEid: aptos.BCS.Uint32,\n        sender: aptos.BCS.Bytes,\n        nonce: aptos.BCS.Uint64,\n        receiver: aptos.MaybeHexString\n    ): Promise<aptos.BCS.Uint8> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.viewModule}::executable`,\n            type_arguments: [],\n            arguments: [srcEid, Buffer.from(sender).toString('hex'), nonce.toString(), receiver],\n        }\n        const view = await this.sdk.viewFunction(payload)\n        return view[0] as aptos.BCS.Uint8\n    }\n\n    /**\n     * Gets the send msglib.\n     *\n     * @param {aptos.MaybeHexString} uaAddress - The UA address.\n     * @param {aptos.BCS.Uint16} chainId - The chain ID.\n     * @returns {Promise<[aptos.BCS.Uint64, aptos.BCS.Uint8]>} A promise that resolves to the send msglib.\n     */\n    async getSendMsglib(\n        uaAddress: aptos.MaybeHexString,\n        chainId: aptos.BCS.Uint16\n    ): Promise<[aptos.BCS.Uint64, aptos.BCS.Uint8]> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.viewModule}::get_send_msglib`,\n            type_arguments: [],\n            arguments: [uaAddress, chainId.toString()],\n        }\n        try {\n            const view = await this.sdk.viewFunction(payload)\n            return view[0] as [aptos.BCS.Uint64, aptos.BCS.Uint8]\n        } catch (err: unknown) {\n            if (isErrorOfApiError(err, 400)) {\n                return [BigInt(0), 0]\n            }\n            throw err\n        }\n    }\n\n    /**\n     * Gets the receive msglib.\n     *\n     * @param {aptos.MaybeHexString} uaAddress - The UA address.\n     * @param {aptos.BCS.Uint16} chainId - The chain ID.\n     * @returns {Promise<[aptos.BCS.Uint64, aptos.BCS.Uint8]>} A promise that resolves to the receive msglib.\n     */\n    async getReceiveMsglib(\n        uaAddress: aptos.MaybeHexString,\n        chainId: aptos.BCS.Uint16\n    ): Promise<[aptos.BCS.Uint64, aptos.BCS.Uint8]> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.viewModule}::get_receive_msglib`,\n            type_arguments: [],\n            arguments: [uaAddress, chainId.toString()],\n        }\n        try {\n            const view = await this.sdk.viewFunction(payload)\n            return view[0] as [aptos.BCS.Uint64, aptos.BCS.Uint8]\n        } catch (err: unknown) {\n            if (isErrorOfApiError(err, 400)) {\n                return [BigInt(0), 0]\n            }\n            throw err\n        }\n    }\n\n    /**\n     * Creates a payload for registering an executor.\n     *\n     * @param {string} executorType - The executor type.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    registerExecutorPayload(executorType: string): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::register_executor`,\n            type_arguments: [executorType],\n            arguments: [],\n        }\n    }\n\n    /**\n     * Registers an executor.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} executorType - The executor type.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async registerExecutor(signer: aptos.AptosAccount, executorType: string): Promise<aptos.Types.Transaction> {\n        const transaction = this.registerExecutorPayload(executorType)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the executor capability.\n     *\n     * @param {string} [version='1'] - The version.\n     * @returns {Promise<string | undefined>} A promise that resolves to the executor capability or undefined if not found.\n     */\n    async getExecutorCap(version = '1'): Promise<string | undefined> {\n        try {\n            const resource = await this.sdk.client.getAccountResource(\n                this.sdk.accounts.layerzero!,\n                `${this.module}::Capabilities`\n            )\n            const { executor_caps } = resource.data as { executor_caps: { handle: string } }\n            const { handle } = executor_caps\n            const executorCap = await this.sdk.client.getTableItem(handle, {\n                key_type: 'u64',\n                value_type: `${this.sdk.accounts.executor_auth}::executor_cap::ExecutorCapability`,\n                key: version,\n            })\n            return executorCap.version\n        } catch (err: unknown) {\n            if (\n                err instanceof ApiError &&\n                (err.errorCode === 'resource_not_found' || err.errorCode === 'table_item_not_found')\n            ) {\n                return undefined\n            }\n            throw err\n        }\n    }\n}\n","import { BCS } from 'aptos'\n\nimport { Index } from './basic'\nimport { Opcodes } from './opcodes'\n\n/**\n * Abstract class representing a Bytecode.\n */\nexport abstract class Bytecode {\n    /**\n     * Serializes the bytecode.\n     * @param {BCS.Serializer} serializer - The serializer.\n     */\n    abstract serialize(serializer: BCS.Serializer): void\n\n    /**\n     * Deserializes the bytecode.\n     * @param {BCS.Deserializer} deserializer - The deserializer.\n     * @returns {Bytecode} The deserialized bytecode.\n     * @throws {Error} If the method is not implemented.\n     */\n    static deserialize(deserializer: BCS.Deserializer): Bytecode {\n        throw new Error('Not implemented')\n    }\n}\n\n/**\n * Class representing a Unary Bytecode.\n */\nexport class UnaryBytecode extends Bytecode {\n    /**\n     * Creates an instance of UnaryBytecode.\n     * @param {Opcodes} opcode - The opcode.\n     */\n    constructor(public opcode: Opcodes) {\n        super()\n    }\n\n    /**\n     * Serializes the unary bytecode.\n     * @param {BCS.Serializer} serializer - The serializer.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        serializer.serializeU8(this.opcode)\n    }\n\n    /**\n     * Deserializes the unary bytecode.\n     * @param {BCS.Deserializer} deserializer - The deserializer.\n     * @returns {Bytecode} The deserialized unary bytecode.\n     */\n    static deserialize(deserializer: BCS.Deserializer): Bytecode {\n        const opcode = deserializer.deserializeU8()\n        return new UnaryBytecode(opcode)\n    }\n}\n\n/**\n * Class representing a Binary Bytecode.\n */\nexport class BinaryBytecode extends Bytecode {\n    /**\n     * Creates an instance of BinaryBytecode.\n     * @param {Opcodes} opcode - The opcode.\n     * @param {Index} operand - The operand.\n     */\n    constructor(\n        public opcode: Opcodes,\n        public operand: Index\n    ) {\n        super()\n    }\n\n    /**\n     * Serializes the binary bytecode.\n     * @param {BCS.Serializer} serializer - The serializer.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        serializer.serializeU8(this.opcode)\n        this.operand.serialize(serializer)\n    }\n\n    /**\n     * Deserializes the binary bytecode.\n     * @param {BCS.Deserializer} deserializer - The deserializer.\n     * @returns {Bytecode} The deserialized binary bytecode.\n     */\n    static deserialize(deserializer: BCS.Deserializer): Bytecode {\n        const opcode = deserializer.deserializeU8()\n        const index = Index.deserialize(deserializer)\n        return new BinaryBytecode(opcode, index)\n    }\n}\n\n/**\n * Class representing a ROP Bytecode.\n */\nexport class ROP extends UnaryBytecode {}\n\n/**\n * Class representing a RET Bytecode.\n */\nexport class RET extends UnaryBytecode {}\n\n/**\n * Class representing a BR_TRUE Bytecode.\n */\nexport class BR_TRUE extends BinaryBytecode {}\n\n/**\n * Class representing a BR_FALSE Bytecode.\n */\nexport class BR_FALSE extends BinaryBytecode {}\n\n/**\n * Class representing a BRANCH Bytecode.\n */\nexport class BRANCH extends BinaryBytecode {}\n\n/**\n * Class representing a Load U8 Bytecode.\n */\nexport class LD_U8 extends Bytecode {\n    /**\n     * Creates an instance of LD_U8.\n     * @param {Opcodes} opcode - The opcode.\n     * @param {BCS.Uint8} value - The value.\n     */\n    constructor(\n        public opcode: Opcodes,\n        public value: BCS.Uint8\n    ) {\n        super()\n    }\n\n    /**\n     * Serializes the LD_U8 bytecode.\n     * @param {BCS.Serializer} serializer - The serializer.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        serializer.serializeU8(this.opcode)\n        serializer.serializeU8(this.value)\n    }\n\n    /**\n     * Deserializes the LD_U8 bytecode.\n     * @param {BCS.Deserializer} deserializer - The deserializer.\n     * @returns {Bytecode} The deserialized LD_U8 bytecode.\n     */\n    static deserialize(deserializer: BCS.Deserializer): Bytecode {\n        const opcode = deserializer.deserializeU8()\n        const value = deserializer.deserializeU8()\n        return new LD_U8(opcode, value)\n    }\n}\n\n/**\n * Class representing a Load U64 Bytecode.\n */\nexport class LD_U64 extends Bytecode {\n    /**\n     * Creates an instance of LD_U64.\n     * @param {Opcodes} opcode - The opcode.\n     * @param {BCS.Uint64} value - The value.\n     */\n    constructor(\n        public opcode: Opcodes,\n        public value: BCS.Uint64\n    ) {\n        super()\n    }\n\n    /**\n     * Serializes the LD_U64 bytecode.\n     * @param {BCS.Serializer} serializer - The serializer.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        serializer.serializeU8(this.opcode)\n        serializer.serializeU64(this.value)\n    }\n\n    /**\n     * Deserializes the LD_U64 bytecode.\n     * @param {BCS.Deserializer} deserializer - The deserializer.\n     * @returns {Bytecode} The deserialized LD_U64 bytecode.\n     */\n    static deserialize(deserializer: BCS.Deserializer): Bytecode {\n        const opcode = deserializer.deserializeU8()\n        const value = deserializer.deserializeU64()\n        return new LD_U64(opcode, value)\n    }\n}\n\n/**\n * Class representing a Load U128 Bytecode.\n */\nexport class LD_U128 extends Bytecode {\n    /**\n     * Creates an instance of LD_U128.\n     * @param {Opcodes} opcode - The opcode.\n     * @param {BCS.Uint128} value - The value.\n     */\n    constructor(\n        public opcode: Opcodes,\n        public value: BCS.Uint128\n    ) {\n        super()\n    }\n\n    /**\n     * Serializes the LD_U128 bytecode.\n     * @param {BCS.Serializer} serializer - The serializer.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        serializer.serializeU8(this.opcode)\n        serializer.serializeU128(this.value)\n    }\n\n    /**\n     * Deserializes the LD_U128 bytecode.\n     * @param {BCS.Deserializer} deserializer - The deserializer.\n     * @returns {Bytecode} The deserialized LD_U128 bytecode.\n     */\n    static deserialize(deserializer: BCS.Deserializer): Bytecode {\n        const opcode = deserializer.deserializeU8()\n        const value = deserializer.deserializeU128()\n        return new LD_U128(opcode, value)\n    }\n}\n\n/**\n * Class representing a CAST_U8 Bytecode.\n */\nexport class CAST_U8 extends UnaryBytecode {}\n\n/**\n * Class representing a CAST_U64 Bytecode.\n */\nexport class CAST_U64 extends UnaryBytecode {}\n\n/**\n * Class representing a CAST_U128 Bytecode.\n */\nexport class CAST_U128 extends UnaryBytecode {}\n\n/**\n * Class representing a LD_CONST Bytecode.\n */\nexport class LD_CONST extends BinaryBytecode {}\n\n/**\n * Class representing a LD_TRUE Bytecode.\n */\nexport class LD_TRUE extends UnaryBytecode {}\n\n/**\n * Class representing a LD_FALSE Bytecode.\n */\nexport class LD_FALSE extends UnaryBytecode {}\n\n/**\n * Class representing a COPY_LOC Bytecode.\n */\nexport class COPY_LOC extends BinaryBytecode {}\n\n/**\n * Class representing a MOVE_LOC Bytecode.\n */\nexport class MOVE_LOC extends BinaryBytecode {}\n\n/**\n * Class representing a ST_LOC Bytecode.\n */\nexport class ST_LOC extends BinaryBytecode {}\n\n/**\n * Class representing a MUT_BORROW_LOC Bytecode.\n */\nexport class MUT_BORROW_LOC extends BinaryBytecode {}\n\n/**\n * Class representing a IMM_BORROW_LOC Bytecode.\n */\nexport class IMM_BORROW_LOC extends BinaryBytecode {}\n\n/**\n * Class representing a MUT_BORROW_FIELD Bytecode.\n */\nexport class MUT_BORROW_FIELD extends BinaryBytecode {}\n\n/**\n * Class representing a MUT_BORROW_FIELD_GENERIC Bytecode.\n */\nexport class MUT_BORROW_FIELD_GENERIC extends BinaryBytecode {}\n\n/**\n * Class representing a IMM_BORROW_FIELD Bytecode.\n */\nexport class IMM_BORROW_FIELD extends BinaryBytecode {}\n\n/**\n * Class representing a IMM_BORROW_FIELD_GENERIC Bytecode.\n */\nexport class IMM_BORROW_FIELD_GENERIC extends BinaryBytecode {}\n\n/**\n * Class representing a CALL Bytecode.\n */\nexport class CALL extends BinaryBytecode {}\n\n/**\n * Class representing a CALL_GENERIC Bytecode.\n */\nexport class CALL_GENERIC extends BinaryBytecode {}\n\n/**\n * Class representing a PACK Bytecode.\n */\nexport class PACK extends BinaryBytecode {}\n\n/**\n * Class representing a PACK_GENERIC Bytecode.\n */\nexport class PACK_GENERIC extends BinaryBytecode {}\n\n/**\n * Class representing a UNPACK Bytecode.\n */\nexport class UNPACK extends BinaryBytecode {}\n\n/**\n * Class representing a UNPACK_GENERIC Bytecode.\n */\nexport class UNPACK_GENERIC extends BinaryBytecode {}\n\n/**\n * Class representing a READ_REF Bytecode.\n */\nexport class READ_REF extends UnaryBytecode {}\n\n/**\n * Class representing a WRITE_REF Bytecode.\n */\nexport class WRITE_REF extends UnaryBytecode {}\n\n/**\n * Class representing an ADD Bytecode.\n */\nexport class ADD extends UnaryBytecode {}\n\n/**\n * Class representing a SUB Bytecode.\n */\nexport class SUB extends UnaryBytecode {}\n\n/**\n * Class representing a MUL Bytecode.\n */\nexport class MUL extends UnaryBytecode {}\n\n/**\n * Class representing a MOD Bytecode.\n */\nexport class MOD extends UnaryBytecode {}\n\n/**\n * Class representing a DIV Bytecode.\n */\nexport class DIV extends UnaryBytecode {}\n\n/**\n * Class representing a BIT_OR Bytecode.\n */\nexport class BIT_OR extends UnaryBytecode {}\n\n/**\n * Class representing a BIT_AND Bytecode.\n */\nexport class BIT_AND extends UnaryBytecode {}\n\n/**\n * Class representing a XOR Bytecode.\n */\nexport class XOR extends UnaryBytecode {}\n\n/**\n * Class representing a SHL Bytecode.\n */\nexport class SHL extends UnaryBytecode {}\n\n/**\n * Class representing a SHR Bytecode.\n */\nexport class SHR extends UnaryBytecode {}\n\n/**\n * Class representing an OR Bytecode.\n */\nexport class OR extends UnaryBytecode {}\n\n/**\n * Class representing an AND Bytecode.\n */\nexport class AND extends UnaryBytecode {}\n\n/**\n * Class representing a NOT Bytecode.\n */\nexport class NOT extends UnaryBytecode {}\n\n/**\n * Class representing an EQ Bytecode.\n */\nexport class EQ extends UnaryBytecode {}\n\n/**\n * Class representing a NEQ Bytecode.\n */\nexport class NEQ extends UnaryBytecode {}\n\n/**\n * Class representing a LT Bytecode.\n */\nexport class LT extends UnaryBytecode {}\n\n/**\n * Class representing a GT Bytecode.\n */\nexport class GT extends UnaryBytecode {}\n\n/**\n * Class representing a LE Bytecode.\n */\nexport class LE extends UnaryBytecode {}\n\n/**\n * Class representing a GE Bytecode.\n */\nexport class GE extends UnaryBytecode {}\n\n/**\n * Class representing an ABORT Bytecode.\n */\nexport class ABORT extends UnaryBytecode {}\n\n/**\n * Class representing a NOP Bytecode.\n */\nexport class NOP extends UnaryBytecode {}\n\n/**\n * Class representing an EXISTS Bytecode.\n */\nexport class EXISTS extends BinaryBytecode {}\n\n/**\n * Class representing an EXISTS_GENERIC Bytecode.\n */\nexport class EXISTS_GENERIC extends BinaryBytecode {}\n\n/**\n * Class representing a MUT_BORROW_GLOBAL Bytecode.\n */\nexport class MUT_BORROW_GLOBAL extends BinaryBytecode {}\n\n/**\n * Class representing a MUT_BORROW_GLOBAL_GENERIC Bytecode.\n */\nexport class MUT_BORROW_GLOBAL_GENERIC extends BinaryBytecode {}\n\n/**\n * Class representing an IMM_BORROW_GLOBAL Bytecode.\n */\nexport class IMM_BORROW_GLOBAL extends BinaryBytecode {}\n\n/**\n * Class representing an IMM_BORROW_GLOBAL_GENERIC Bytecode.\n */\nexport class IMM_BORROW_GLOBAL_GENERIC extends BinaryBytecode {}\n\n/**\n * Class representing a MOVE_FROM Bytecode.\n */\nexport class MOVE_FROM extends BinaryBytecode {}\n\n/**\n * Class representing a MOVE_FROM_GENERIC Bytecode.\n */\nexport class MOVE_FROM_GENERIC extends BinaryBytecode {}\n\n/**\n * Class representing a MOVE_TO Bytecode.\n */\nexport class MOVE_TO extends BinaryBytecode {}\n\n/**\n * Class representing a MOVE_TO_GENERIC Bytecode.\n */\nexport class MOVE_TO_GENERIC extends BinaryBytecode {}\n\n/**\n * Class representing a FREEZE_REF Bytecode.\n */\nexport class FREEZE_REF extends UnaryBytecode {}\n\n/**\n * Class representing a Vector Pack Bytecode.\n */\nexport class VEC_PACK extends Bytecode {\n    /**\n     * Creates an instance of VEC_PACK.\n     * @param {Opcodes} opcode - The opcode.\n     * @param {Index} operand - The operand.\n     * @param {BCS.Uint64} value - The value.\n     */\n    constructor(\n        public opcode: Opcodes,\n        public operand: Index,\n        public value: BCS.Uint64\n    ) {\n        super()\n    }\n\n    /**\n     * Serializes the VEC_PACK bytecode.\n     * @param {BCS.Serializer} serializer - The serializer.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        serializer.serializeU8(this.opcode)\n        this.operand.serialize(serializer)\n        serializer.serializeU64(this.value)\n    }\n\n    /**\n     * Deserializes the VEC_PACK bytecode.\n     * @param {BCS.Deserializer} deserializer - The deserializer.\n     * @returns {Bytecode} The deserialized VEC_PACK bytecode.\n     */\n    static deserialize(deserializer: BCS.Deserializer): Bytecode {\n        const opcode = deserializer.deserializeU8()\n        const operand = Index.deserialize(deserializer)\n        const value = deserializer.deserializeU64()\n        return new VEC_PACK(opcode, operand, value)\n    }\n}\n\n/**\n * Class representing a VEC_LEN Bytecode.\n */\nexport class VEC_LEN extends BinaryBytecode {}\n\n/**\n * Class representing a VEC_IMM_BORROW Bytecode.\n */\nexport class VEC_IMM_BORROW extends BinaryBytecode {}\n\n/**\n * Class representing a VEC_MUT_BORROW Bytecode.\n */\nexport class VEC_MUT_BORROW extends BinaryBytecode {}\n\n/**\n * Class representing a VEC_PUSH_BACK Bytecode.\n */\nexport class VEC_PUSH_BACK extends BinaryBytecode {}\n\n/**\n * Class representing a VEC_POP_BACK Bytecode.\n */\nexport class VEC_POP_BACK extends BinaryBytecode {}\n\n/**\n * Class representing a Vector Unpack Bytecode.\n */\nexport class VEC_UNPACK extends Bytecode {\n    /**\n     * Creates an instance of VEC_UNPACK.\n     * @param {Opcodes} opcode - The opcode.\n     * @param {Index} operand - The operand.\n     * @param {BCS.Uint64} value - The value.\n     */\n    constructor(\n        public opcode: Opcodes,\n        public operand: Index,\n        public value: BCS.Uint64\n    ) {\n        super()\n    }\n\n    /**\n     * Serializes the VEC_UNPACK bytecode.\n     * @param {BCS.Serializer} serializer - The serializer.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        serializer.serializeU8(this.opcode)\n        this.operand.serialize(serializer)\n        serializer.serializeU64(this.value)\n    }\n\n    /**\n     * Deserializes the VEC_UNPACK bytecode.\n     * @param {BCS.Deserializer} deserializer - The deserializer.\n     * @returns {Bytecode} The deserialized VEC_UNPACK bytecode.\n     */\n    static deserialize(deserializer: BCS.Deserializer): Bytecode {\n        const opcode = deserializer.deserializeU8()\n        const operand = Index.deserialize(deserializer)\n        const value = deserializer.deserializeU64()\n        return new VEC_UNPACK(opcode, operand, value)\n    }\n}\n\n/**\n * Class representing a VEC_SWAP Bytecode.\n */\nexport class VEC_SWAP extends BinaryBytecode {}\n\n/**\n * Class representing a Load U16 Bytecode.\n */\nexport class LD_U16 extends Bytecode {\n    /**\n     * Creates an instance of LD_U16.\n     * @param {Opcodes} opcode - The opcode.\n     * @param {BCS.Uint16} value - The value.\n     */\n    constructor(\n        public opcode: Opcodes,\n        public value: BCS.Uint16\n    ) {\n        super()\n    }\n\n    /**\n     * Serializes the LD_U16 bytecode.\n     * @param {BCS.Serializer} serializer - The serializer.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        serializer.serializeU8(this.opcode)\n        serializer.serializeU16(this.value)\n    }\n\n    /**\n     * Deserializes the LD_U16 bytecode.\n     * @param {BCS.Deserializer} deserializer - The deserializer.\n     * @returns {Bytecode} The deserialized LD_U16 bytecode.\n     */\n    static deserialize(deserializer: BCS.Deserializer): Bytecode {\n        const opcode = deserializer.deserializeU8()\n        const value = deserializer.deserializeU16()\n        return new LD_U16(opcode, value)\n    }\n}\n\n/**\n * Class representing a Load U32 Bytecode.\n */\nexport class LD_U32 extends Bytecode {\n    /**\n     * Creates an instance of LD_U32.\n     * @param {Opcodes} opcode - The opcode.\n     * @param {BCS.Uint32} value - The value.\n     */\n    constructor(\n        public opcode: Opcodes,\n        public value: BCS.Uint32\n    ) {\n        super()\n    }\n\n    /**\n     * Serializes the LD_U32 bytecode.\n     * @param {BCS.Serializer} serializer - The serializer.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        serializer.serializeU8(this.opcode)\n        serializer.serializeU32(this.value)\n    }\n\n    /**\n     * Deserializes the LD_U32 bytecode.\n     * @param {BCS.Deserializer} deserializer - The deserializer.\n     * @returns {Bytecode} The deserialized LD_U32 bytecode.\n     */\n    static deserialize(deserializer: BCS.Deserializer): Bytecode {\n        const opcode = deserializer.deserializeU8()\n        const value = deserializer.deserializeU16()\n        return new LD_U32(opcode, value)\n    }\n}\n\n/**\n * Class representing a Load U256 Bytecode.\n */\nexport class LD_U256 extends Bytecode {\n    /**\n     * Creates an instance of LD_U256.\n     * @param {Opcodes} opcode - The opcode.\n     * @param {BCS.Bytes} value - The value.\n     */\n    constructor(\n        public opcode: Opcodes,\n        public value: BCS.Bytes\n    ) {\n        super()\n    }\n\n    /**\n     * Serializes the LD_U256 bytecode.\n     * @param {BCS.Serializer} _serializer - The serializer.\n     * @throws {Error} If the method is not implemented.\n     */\n    public serialize(_serializer: BCS.Serializer): void {\n        throw new Error('Method not implemented.')\n    }\n\n    /**\n     * Deserializes the LD_U256 bytecode.\n     * @param {BCS.Deserializer} _deserializer - The deserializer.\n     * @returns {Bytecode} The deserialized LD_U256 bytecode.\n     * @throws {Error} If the method is not implemented.\n     */\n    static deserialize(_deserializer: BCS.Deserializer): Bytecode {\n        throw new Error('Method not implemented.')\n    }\n}\n\n/**\n * Class representing a CAST_U16 Bytecode.\n */\nexport class CAST_U16 extends UnaryBytecode {}\n\n/**\n * Class representing a CAST_U32 Bytecode.\n */\nexport class CAST_U32 extends UnaryBytecode {}\n\n/**\n * Class representing a CAST_U256 Bytecode.\n */\nexport class CAST_U256 extends UnaryBytecode {}\n","import * as aptos from 'aptos'\nimport { BCS } from 'aptos'\n\nimport * as Bytecode from './bytecode'\nimport { Opcodes } from './opcodes'\nimport { isOutOfBoundError } from './utils'\n\n/**\n * Represents a table with a kind, offset, and count.\n */\nexport class Table {\n    /**\n     * Creates an instance of Table.\n     *\n     * @param {BCS.Uint8} kind - The kind of the table.\n     * @param {BCS.Uint32} offset - The offset of the table.\n     * @param {BCS.Uint32} count - The count of the table.\n     */\n    constructor(\n        public kind: BCS.Uint8,\n        public offset: BCS.Uint32,\n        public count: BCS.Uint32\n    ) {}\n\n    /**\n     * Deserializes a Table from the given deserializer.\n     *\n     * @param {BCS.Deserializer} deserializer - The deserializer to use.\n     * @returns {Table} The deserialized Table.\n     */\n    static deserialize(deserializer: BCS.Deserializer): Table {\n        const kind = deserializer.deserializeUleb128AsU32()\n        const offset = deserializer.deserializeUleb128AsU32()\n        const count = deserializer.deserializeUleb128AsU32()\n        return new Table(kind, offset, count)\n    }\n\n    /**\n     * Serializes the Table using the given serializer.\n     *\n     * @param {BCS.Serializer} serializer - The serializer to use.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        serializer.serializeU32AsUleb128(this.kind)\n        serializer.serializeU32AsUleb128(this.offset)\n        serializer.serializeU32AsUleb128(this.count)\n    }\n}\n\n/**\n * Represents a collection of tables and associated data.\n */\nexport class Tables {\n    /**\n     * Creates an instance of Tables.\n     *\n     * @param {BCS.Seq<Table>} tables - The sequence of tables.\n     * @param {BCS.Bytes} data - The associated data.\n     */\n    constructor(\n        public tables: BCS.Seq<Table>,\n        public data: BCS.Bytes\n    ) {}\n\n    /**\n     * Deserializes Tables from the given deserializer.\n     *\n     * @param {BCS.Deserializer} deserializer - The deserializer to use.\n     * @returns {Tables} The deserialized Tables.\n     */\n    static deserialize(deserializer: BCS.Deserializer): Tables {\n        const count = deserializer.deserializeUleb128AsU32()\n        let tables: Table[] = []\n        for (let i = 0; i < count; i++) {\n            const table = Table.deserialize(deserializer)\n            tables.push(table)\n        }\n\n        tables = tables.sort((a, b) => a.kind - b.kind)\n\n        let currentOffset = 0\n        const tableTypes = new Set<BCS.Uint8>()\n        for (const table of tables) {\n            if (table.offset != currentOffset) {\n                throw new Error('Invalid table offset')\n            }\n            if (table.count == 0) {\n                throw new Error('Invalid table count')\n            }\n            if (tableTypes.has(table.kind)) {\n                throw new Error('Duplicate table kind')\n            }\n            tableTypes.add(table.kind)\n            currentOffset += table.count\n        }\n\n        const data = deserializer.deserializeFixedBytes(currentOffset)\n\n        return new Tables(tables, data)\n    }\n\n    /**\n     * Serializes the Tables using the given serializer.\n     *\n     * @param {BCS.Serializer} serializer - The serializer to use.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        serializer.serializeU32AsUleb128(this.tables.length)\n\n        const tables = this.tables.sort((a, b) => a.kind - b.kind)\n        for (const table of tables) {\n            table.serialize(serializer)\n        }\n        serializer.serializeFixedBytes(this.data)\n    }\n}\n\n/**\n * Represents a set of abilities.\n */\nexport class AbilitySet {\n    /**\n     * Creates an instance of AbilitySet.\n     *\n     * @param {BCS.Uint8} ability - The ability value.\n     */\n    constructor(public ability: BCS.Uint8) {}\n\n    /**\n     * Deserializes an AbilitySet from the given deserializer.\n     *\n     * @param {BCS.Deserializer} deserializer - The deserializer to use.\n     * @returns {AbilitySet} The deserialized AbilitySet.\n     */\n    static deserialize(deserializer: BCS.Deserializer): AbilitySet {\n        const ability = deserializer.deserializeUleb128AsU32()\n        if (ability > 0xff) {\n            throw new Error('Invalid ability')\n        }\n        return new AbilitySet(ability)\n    }\n\n    /**\n     * Serializes the AbilitySet using the given serializer.\n     *\n     * @param {BCS.Serializer} serializer - The serializer to use.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        serializer.serializeU32AsUleb128(this.ability)\n    }\n}\n\n/**\n * Represents an index.\n */\nexport class Index {\n    /**\n     * Creates an instance of Index.\n     *\n     * @param {BCS.Uint32} index - The index value.\n     */\n    constructor(public index: BCS.Uint32) {}\n\n    /**\n     * Deserializes an Index from the given deserializer.\n     *\n     * @param {BCS.Deserializer} deserializer - The deserializer to use.\n     * @returns {Index} The deserialized Index.\n     */\n    static deserialize(deserializer: BCS.Deserializer): Index {\n        const index = deserializer.deserializeUleb128AsU32()\n        return new Index(index)\n    }\n\n    /**\n     * Serializes the Index using the given serializer.\n     *\n     * @param {BCS.Serializer} serializer - The serializer to use.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        serializer.serializeU32AsUleb128(this.index)\n    }\n}\n\n/**\n * Represents a code block with locals, count, and bytecode instructions.\n */\nexport class Code {\n    /**\n     * Creates an instance of Code.\n     *\n     * @param {Index} locals - The local index.\n     * @param {BCS.Uint32} count - The count of bytecode instructions.\n     * @param {BCS.Seq<Bytecode.Bytecode>} codes - The sequence of bytecode instructions.\n     */\n    constructor(\n        public locals: Index,\n        public count: BCS.Uint32,\n        public codes: BCS.Seq<Bytecode.Bytecode>\n    ) {}\n\n    /**\n     * Deserializes a Code from the given deserializer.\n     *\n     * @param {BCS.Deserializer} deserializer - The deserializer to use.\n     * @returns {Code} The deserialized Code.\n     */\n    static deserialize(deserializer: BCS.Deserializer): Code {\n        const locals = Index.deserialize(deserializer)\n        const count = deserializer.deserializeUleb128AsU32()\n        const codes: Bytecode.Bytecode[] = []\n\n        for (let i = 0; i < count; i++) {\n            const opcode = deserializer.deserializeU8()\n            const bytecode = ((opcode: Opcodes): Bytecode.Bytecode => {\n                switch (opcode) {\n                    case Opcodes.POP:\n                        return new Bytecode.ROP(opcode)\n                    case Opcodes.RET:\n                        return new Bytecode.RET(opcode)\n                    case Opcodes.BR_TRUE:\n                        return new Bytecode.BR_TRUE(opcode, Index.deserialize(deserializer))\n                    case Opcodes.BR_FALSE:\n                        return new Bytecode.BR_FALSE(opcode, Index.deserialize(deserializer))\n                    case Opcodes.BRANCH:\n                        return new Bytecode.BRANCH(opcode, Index.deserialize(deserializer))\n                    case Opcodes.LD_U8:\n                        return new Bytecode.LD_U8(opcode, deserializer.deserializeU8())\n                    case Opcodes.LD_U64:\n                        return new Bytecode.LD_U64(opcode, deserializer.deserializeU64())\n                    case Opcodes.LD_U128:\n                        return new Bytecode.LD_U128(opcode, deserializer.deserializeU128())\n                    case Opcodes.CAST_U8:\n                        return new Bytecode.CAST_U8(opcode)\n                    case Opcodes.CAST_U64:\n                        return new Bytecode.CAST_U64(opcode)\n                    case Opcodes.CAST_U128:\n                        return new Bytecode.CAST_U128(opcode)\n                    case Opcodes.LD_CONST:\n                        return new Bytecode.LD_CONST(opcode, Index.deserialize(deserializer))\n                    case Opcodes.LD_TRUE:\n                        return new Bytecode.LD_TRUE(opcode)\n                    case Opcodes.LD_FALSE:\n                        return new Bytecode.LD_FALSE(opcode)\n                    case Opcodes.COPY_LOC:\n                        return new Bytecode.COPY_LOC(opcode, Index.deserialize(deserializer))\n                    case Opcodes.MOVE_LOC:\n                        return new Bytecode.MOVE_LOC(opcode, Index.deserialize(deserializer))\n                    case Opcodes.ST_LOC:\n                        return new Bytecode.ST_LOC(opcode, Index.deserialize(deserializer))\n                    case Opcodes.MUT_BORROW_LOC:\n                        return new Bytecode.MUT_BORROW_LOC(opcode, Index.deserialize(deserializer))\n                    case Opcodes.IMM_BORROW_LOC:\n                        return new Bytecode.IMM_BORROW_LOC(opcode, Index.deserialize(deserializer))\n                    case Opcodes.MUT_BORROW_FIELD:\n                        return new Bytecode.MUT_BORROW_FIELD(opcode, Index.deserialize(deserializer))\n                    case Opcodes.MUT_BORROW_FIELD_GENERIC:\n                        return new Bytecode.MUT_BORROW_FIELD_GENERIC(opcode, Index.deserialize(deserializer))\n                    case Opcodes.IMM_BORROW_FIELD:\n                        return new Bytecode.IMM_BORROW_FIELD(opcode, Index.deserialize(deserializer))\n                    case Opcodes.IMM_BORROW_FIELD_GENERIC:\n                        return new Bytecode.IMM_BORROW_FIELD_GENERIC(opcode, Index.deserialize(deserializer))\n                    case Opcodes.CALL:\n                        return new Bytecode.CALL(opcode, Index.deserialize(deserializer))\n                    case Opcodes.CALL_GENERIC:\n                        return new Bytecode.CALL_GENERIC(opcode, Index.deserialize(deserializer))\n                    case Opcodes.PACK:\n                        return new Bytecode.PACK(opcode, Index.deserialize(deserializer))\n                    case Opcodes.PACK_GENERIC:\n                        return new Bytecode.PACK_GENERIC(opcode, Index.deserialize(deserializer))\n                    case Opcodes.UNPACK:\n                        return new Bytecode.UNPACK(opcode, Index.deserialize(deserializer))\n                    case Opcodes.UNPACK_GENERIC:\n                        return new Bytecode.UNPACK_GENERIC(opcode, Index.deserialize(deserializer))\n                    case Opcodes.READ_REF:\n                        return new Bytecode.READ_REF(opcode)\n                    case Opcodes.WRITE_REF:\n                        return new Bytecode.WRITE_REF(opcode)\n                    case Opcodes.ADD:\n                        return new Bytecode.ADD(opcode)\n                    case Opcodes.SUB:\n                        return new Bytecode.SUB(opcode)\n                    case Opcodes.MUL:\n                        return new Bytecode.MUL(opcode)\n                    case Opcodes.MOD:\n                        return new Bytecode.MOD(opcode)\n                    case Opcodes.DIV:\n                        return new Bytecode.DIV(opcode)\n                    case Opcodes.BIT_OR:\n                        return new Bytecode.BIT_OR(opcode)\n                    case Opcodes.BIT_AND:\n                        return new Bytecode.BIT_AND(opcode)\n                    case Opcodes.XOR:\n                        return new Bytecode.XOR(opcode)\n                    case Opcodes.SHL:\n                        return new Bytecode.SHL(opcode)\n                    case Opcodes.SHR:\n                        return new Bytecode.SHR(opcode)\n                    case Opcodes.OR:\n                        return new Bytecode.OR(opcode)\n                    case Opcodes.AND:\n                        return new Bytecode.AND(opcode)\n                    case Opcodes.NOT:\n                        return new Bytecode.NOT(opcode)\n                    case Opcodes.EQ:\n                        return new Bytecode.EQ(opcode)\n                    case Opcodes.NEQ:\n                        return new Bytecode.NEQ(opcode)\n                    case Opcodes.LT:\n                        return new Bytecode.LT(opcode)\n                    case Opcodes.GT:\n                        return new Bytecode.GT(opcode)\n                    case Opcodes.LE:\n                        return new Bytecode.LE(opcode)\n                    case Opcodes.GE:\n                        return new Bytecode.GE(opcode)\n                    case Opcodes.ABORT:\n                        return new Bytecode.ABORT(opcode)\n                    case Opcodes.NOP:\n                        return new Bytecode.NOP(opcode)\n                    case Opcodes.EXISTS:\n                        return new Bytecode.EXISTS(opcode, Index.deserialize(deserializer))\n                    case Opcodes.EXISTS_GENERIC:\n                        return new Bytecode.EXISTS_GENERIC(opcode, Index.deserialize(deserializer))\n                    case Opcodes.MUT_BORROW_GLOBAL:\n                        return new Bytecode.MUT_BORROW_GLOBAL(opcode, Index.deserialize(deserializer))\n                    case Opcodes.MUT_BORROW_GLOBAL_GENERIC:\n                        return new Bytecode.MUT_BORROW_GLOBAL_GENERIC(opcode, Index.deserialize(deserializer))\n                    case Opcodes.IMM_BORROW_GLOBAL:\n                        return new Bytecode.IMM_BORROW_GLOBAL(opcode, Index.deserialize(deserializer))\n                    case Opcodes.IMM_BORROW_GLOBAL_GENERIC:\n                        return new Bytecode.IMM_BORROW_GLOBAL_GENERIC(opcode, Index.deserialize(deserializer))\n                    case Opcodes.MOVE_FROM:\n                        return new Bytecode.MOVE_FROM(opcode, Index.deserialize(deserializer))\n\n                    case Opcodes.MOVE_FROM_GENERIC:\n                        return new Bytecode.MOVE_FROM_GENERIC(opcode, Index.deserialize(deserializer))\n\n                    case Opcodes.MOVE_TO:\n                        return new Bytecode.MOVE_TO(opcode, Index.deserialize(deserializer))\n                    case Opcodes.MOVE_TO_GENERIC:\n                        return new Bytecode.MOVE_TO_GENERIC(opcode, Index.deserialize(deserializer))\n                    case Opcodes.FREEZE_REF:\n                        return new Bytecode.FREEZE_REF(opcode)\n                    case Opcodes.VEC_PACK:\n                        return new Bytecode.VEC_PACK(\n                            opcode,\n                            Index.deserialize(deserializer),\n                            deserializer.deserializeU64()\n                        )\n                    case Opcodes.VEC_LEN:\n                        return new Bytecode.VEC_LEN(opcode, Index.deserialize(deserializer))\n                    case Opcodes.VEC_IMM_BORROW:\n                        return new Bytecode.VEC_IMM_BORROW(opcode, Index.deserialize(deserializer))\n                    case Opcodes.VEC_MUT_BORROW:\n                        return new Bytecode.VEC_MUT_BORROW(opcode, Index.deserialize(deserializer))\n                    case Opcodes.VEC_PUSH_BACK:\n                        return new Bytecode.VEC_PUSH_BACK(opcode, Index.deserialize(deserializer))\n                    case Opcodes.VEC_POP_BACK:\n                        return new Bytecode.VEC_POP_BACK(opcode, Index.deserialize(deserializer))\n                    case Opcodes.VEC_UNPACK:\n                        return new Bytecode.VEC_UNPACK(\n                            opcode,\n                            Index.deserialize(deserializer),\n                            deserializer.deserializeU64()\n                        )\n                    case Opcodes.VEC_SWAP:\n                        return new Bytecode.VEC_SWAP(opcode, Index.deserialize(deserializer))\n                    case Opcodes.LD_U16:\n                        return new Bytecode.LD_U16(opcode, deserializer.deserializeU16())\n                    case Opcodes.LD_U32:\n                        return new Bytecode.LD_U32(opcode, deserializer.deserializeU32())\n                    case Opcodes.LD_U256:\n                        throw new Error('Not supported yet')\n                    case Opcodes.CAST_U16:\n                        return new Bytecode.CAST_U16(opcode)\n                    case Opcodes.CAST_U32:\n                        return new Bytecode.CAST_U32(opcode)\n                    case Opcodes.CAST_U256:\n                        return new Bytecode.CAST_U256(opcode)\n                    default:\n                        throw new Error(`Unknown opcode: ${opcode}`)\n                }\n            })(opcode as Opcodes)\n            codes.push(bytecode)\n        }\n        return new Code(locals, count, codes)\n    }\n\n    /**\n     * Serializes the Code using the given serializer.\n     *\n     * @param {BCS.Serializer} serializer - The serializer to use.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        this.locals.serialize(serializer)\n        serializer.serializeU32AsUleb128(this.count)\n        for (const code of this.codes) {\n            code.serialize(serializer)\n        }\n    }\n}\n\n/**\n * Represents a header with magic bytes and version.\n */\nexport class Header {\n    /**\n     * Creates an instance of Header.\n     *\n     * @param {BCS.Bytes} magic - The magic bytes.\n     * @param {BCS.Uint32} version - The version number.\n     */\n    constructor(\n        public magic: BCS.Bytes,\n        public version: BCS.Uint32\n    ) {}\n\n    /**\n     * Deserializes a Header from the given deserializer.\n     *\n     * @param {BCS.Deserializer} deserializer - The deserializer to use.\n     * @returns {Header} The deserialized Header.\n     */\n    static deserialize(deserializer: BCS.Deserializer): Header {\n        const magic = deserializer.deserializeFixedBytes(4)\n        const version = deserializer.deserializeU32()\n        return new Header(magic, version)\n    }\n\n    /**\n     * Serializes the Header using the given serializer.\n     *\n     * @param {BCS.Serializer} serializer - The serializer to use.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        serializer.serializeFixedBytes(this.magic)\n        serializer.serializeU32(this.version)\n    }\n}\n\n/**\n * Represents a module handle with address and name.\n */\nexport class ModuleHandle {\n    /**\n     * Creates an instance of ModuleHandle.\n     *\n     * @param {Index} address - The address index.\n     * @param {Index} name - The name index.\n     */\n    constructor(\n        public address: Index,\n        public name: Index\n    ) {}\n\n    /**\n     * Deserializes a ModuleHandle from the given deserializer.\n     *\n     * @param {BCS.Deserializer} deserializer - The deserializer to use.\n     * @returns {ModuleHandle} The deserialized ModuleHandle.\n     */\n    static deserialize(deserializer: BCS.Deserializer): ModuleHandle {\n        const address = Index.deserialize(deserializer)\n        const name = Index.deserialize(deserializer)\n        return new ModuleHandle(address, name)\n    }\n\n    /**\n     * Serializes the ModuleHandle using the given serializer.\n     *\n     * @param {BCS.Serializer} serializer - The serializer to use.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        this.address.serialize(serializer)\n        this.name.serialize(serializer)\n    }\n}\n\n/**\n * Represents a struct type parameter with constraints and phantom flag.\n */\nexport class StructTypeParameter {\n    /**\n     * Creates an instance of StructTypeParameter.\n     *\n     * @param {AbilitySet} constraints - The ability set constraints.\n     * @param {boolean} isPhantom - The phantom flag.\n     */\n    constructor(\n        public constraints: AbilitySet,\n        public isPhantom: boolean\n    ) {}\n\n    /**\n     * Deserializes a StructTypeParameter from the given deserializer.\n     *\n     * @param {BCS.Deserializer} deserializer - The deserializer to use.\n     * @returns {StructTypeParameter} The deserialized StructTypeParameter.\n     */\n    static deserialize(deserializer: BCS.Deserializer): StructTypeParameter {\n        const constraints = AbilitySet.deserialize(deserializer)\n        const isPhantom = deserializer.deserializeUleb128AsU32() !== 0\n        return new StructTypeParameter(constraints, isPhantom)\n    }\n\n    /**\n     * Serializes the StructTypeParameter using the given serializer.\n     *\n     * @param {BCS.Serializer} serializer - The serializer to use.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        this.constraints.serialize(serializer)\n        serializer.serializeU32AsUleb128(this.isPhantom ? 1 : 0)\n    }\n}\n\n/**\n * Represents a struct handle with module, name, abilities, and type parameters.\n */\nexport class StructHandle {\n    /**\n     * Creates an instance of StructHandle.\n     *\n     * @param {Index} module - The module index.\n     * @param {Index} name - The name index.\n     * @param {AbilitySet} abilities - The ability set.\n     * @param {BCS.Seq<Index>} typeParameters - The sequence of type parameter indices.\n     */\n    constructor(\n        public module: Index,\n        public name: Index,\n        public abilities: AbilitySet,\n        public typeParameters: BCS.Seq<Index>\n    ) {}\n\n    /**\n     * Deserializes a StructHandle from the given deserializer.\n     *\n     * @param {BCS.Deserializer} deserializer - The deserializer to use.\n     * @returns {StructHandle} The deserialized StructHandle.\n     */\n    static deserialize(deserializer: BCS.Deserializer): StructHandle {\n        const module = Index.deserialize(deserializer)\n        const name = Index.deserialize(deserializer)\n        const abilities = AbilitySet.deserialize(deserializer)\n        const typeParameters = BCS.deserializeVector(deserializer, StructTypeParameter)\n        return new StructHandle(module, name, abilities, typeParameters)\n    }\n\n    /**\n     * Serializes the StructHandle using the given serializer.\n     *\n     * @param {BCS.Serializer} serializer - The serializer to use.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        this.module.serialize(serializer)\n        this.name.serialize(serializer)\n        this.abilities.serialize(serializer)\n        BCS.serializeVector(this.typeParameters, serializer)\n    }\n}\n\n/**\n * Represents a function handle with module, name, parameters, return type, and type parameters.\n */\nexport class FunctionHandle {\n    /**\n     * Creates an instance of FunctionHandle.\n     *\n     * @param {Index} module - The module index.\n     * @param {Index} name - The name index.\n     * @param {Index} parameters - The parameters index.\n     * @param {Index} return_ - The return type index.\n     * @param {BCS.Seq<AbilitySet>} typeParameters - The sequence of ability sets.\n     */\n    constructor(\n        public module: Index,\n        public name: Index,\n        public parameters: Index,\n        public return_: Index,\n        public typeParameters: BCS.Seq<AbilitySet>\n    ) {}\n\n    /**\n     * Deserializes a FunctionHandle from the given deserializer.\n     *\n     * @param {BCS.Deserializer} deserializer - The deserializer to use.\n     * @returns {FunctionHandle} The deserialized FunctionHandle.\n     */\n    static deserialize(deserializer: BCS.Deserializer): FunctionHandle {\n        const module = Index.deserialize(deserializer)\n        const name = Index.deserialize(deserializer)\n        const parameters = Index.deserialize(deserializer)\n        const return_ = Index.deserialize(deserializer)\n        const typeParameters = BCS.deserializeVector(deserializer, AbilitySet)\n        return new FunctionHandle(module, name, parameters, return_, typeParameters)\n    }\n\n    /**\n     * Serializes the FunctionHandle using the given serializer.\n     *\n     * @param {BCS.Serializer} serializer - The serializer to use.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        this.module.serialize(serializer)\n        this.name.serialize(serializer)\n        this.parameters.serialize(serializer)\n        this.return_.serialize(serializer)\n        BCS.serializeVector(this.typeParameters, serializer)\n    }\n}\n\n/**\n * Represents a function instantiation with handle and type parameters.\n */\nexport class FunctionInstantiation {\n    /**\n     * Creates an instance of FunctionInstantiation.\n     *\n     * @param {Index} handle - The handle index.\n     * @param {BCS.Seq<Index>} typeParameters - The sequence of type parameter indices.\n     */\n    constructor(\n        public handle: Index,\n        public typeParameters: BCS.Seq<Index>\n    ) {}\n\n    /**\n     * Deserializes a FunctionInstantiation from the given deserializer.\n     *\n     * @param {BCS.Deserializer} deserializer - The deserializer to use.\n     * @returns {FunctionInstantiation} The deserialized FunctionInstantiation.\n     */\n    static deserialize(deserializer: BCS.Deserializer): FunctionInstantiation {\n        const handle = Index.deserialize(deserializer)\n        const typeParameters = BCS.deserializeVector(deserializer, Index)\n        return new FunctionInstantiation(handle, typeParameters)\n    }\n\n    /**\n     * Serializes the FunctionInstantiation using the given serializer.\n     *\n     * @param {BCS.Serializer} serializer - The serializer to use.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        this.handle.serialize(serializer)\n        BCS.serializeVector(this.typeParameters, serializer)\n    }\n}\n\n/**\n * Represents an identifier with a string value.\n */\nexport class Identifier {\n    /**\n     * Creates an instance of Identifier.\n     *\n     * @param {string} value - The string value.\n     */\n    constructor(public value: string) {}\n\n    /**\n     * Deserializes an Identifier from the given deserializer.\n     *\n     * @param {BCS.Deserializer} deserializer - The deserializer to use.\n     * @returns {Identifier} The deserialized Identifier.\n     */\n    static deserialize(deserializer: BCS.Deserializer): Identifier {\n        const value = deserializer.deserializeStr()\n        return new Identifier(value)\n    }\n\n    /**\n     * Serializes the Identifier using the given serializer.\n     *\n     * @param {BCS.Serializer} serializer - The serializer to use.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        serializer.serializeStr(this.value)\n    }\n}\n\n/**\n * Represents an address identifier with a byte array address.\n */\nexport class AddressIdentifier {\n    /**\n     * Creates an instance of AddressIdentifier.\n     *\n     * @param {BCS.Bytes} address - The byte array address.\n     */\n    constructor(public address: BCS.Bytes) {}\n\n    /**\n     * Deserializes an AddressIdentifier from the given deserializer.\n     *\n     * @param {BCS.Deserializer} deserializer - The deserializer to use.\n     * @returns {AddressIdentifier} The deserialized AddressIdentifier.\n     */\n    static deserialize(deserializer: BCS.Deserializer): AddressIdentifier {\n        const address = deserializer.deserializeFixedBytes(32)\n        return new AddressIdentifier(address)\n    }\n\n    /**\n     * Creates an AddressIdentifier from a JSON value.\n     *\n     * @param {any} value - The JSON value.\n     * @returns {AddressIdentifier} The created AddressIdentifier.\n     */\n    public static fromJSON(value: any): AddressIdentifier {\n        const bytes = aptos.HexString.ensure(value.toString()).toUint8Array()\n        return new AddressIdentifier(bytes)\n    }\n\n    /**\n     * Serializes the AddressIdentifier using the given serializer.\n     *\n     * @param {BCS.Serializer} serializer - The serializer to use.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        serializer.serializeFixedBytes(this.address)\n    }\n\n    /**\n     * Converts the AddressIdentifier to a JSON string.\n     *\n     * @returns {string} The JSON string representation.\n     */\n    public toJSON(): string {\n        return aptos.HexString.fromUint8Array(this.address).toString()\n    }\n}\n\n/**\n * Loads module handles from the deserializer.\n *\n * @param {BCS.Deserializer} deserializer - The deserializer to use.\n * @returns {BCS.Seq<ModuleHandle>} The loaded module handles.\n */\nexport function load_module_handles(deserializer: BCS.Deserializer): BCS.Seq<ModuleHandle> {\n    return load_handles(deserializer, ModuleHandle)\n}\n\n/**\n * Loads struct handles from the deserializer.\n *\n * @param {BCS.Deserializer} deserializer - The deserializer to use.\n * @returns {BCS.Seq<StructHandle>} The loaded struct handles.\n */\nexport function load_struct_handles(deserializer: BCS.Deserializer): BCS.Seq<StructHandle> {\n    return load_handles(deserializer, StructHandle)\n}\n\n/**\n * Loads function handles from the deserializer.\n *\n * @param {BCS.Deserializer} deserializer - The deserializer to use.\n * @returns {BCS.Seq<FunctionHandle>} The loaded function handles.\n */\nexport function load_function_handles(deserializer: BCS.Deserializer): BCS.Seq<FunctionHandle> {\n    return load_handles(deserializer, FunctionHandle)\n}\n\n/**\n * Loads function instantiations from the deserializer.\n *\n * @param {BCS.Deserializer} deserializer - The deserializer to use.\n * @returns {BCS.Seq<FunctionInstantiation>} The loaded function instantiations.\n */\nexport function load_function_instantiations(deserializer: BCS.Deserializer): BCS.Seq<FunctionInstantiation> {\n    return load_handles(deserializer, FunctionInstantiation)\n}\n\n/**\n * Loads identifiers from the deserializer.\n *\n * @param {BCS.Deserializer} deserializer - The deserializer to use.\n * @returns {BCS.Seq<Identifier>} The loaded identifiers.\n */\nexport function load_identifiers(deserializer: BCS.Deserializer): BCS.Seq<Identifier> {\n    return load_handles(deserializer, Identifier)\n}\n\n/**\n * Loads address identifiers from the deserializer.\n *\n * @param {BCS.Deserializer} deserializer - The deserializer to use.\n * @returns {BCS.Seq<AddressIdentifier>} The loaded address identifiers.\n */\nexport function load_address_identifiers(deserializer: BCS.Deserializer): BCS.Seq<AddressIdentifier> {\n    return load_handles(deserializer, AddressIdentifier)\n}\n\n/**\n * Loads handles of a specific class from the deserializer.\n *\n * @param {BCS.Deserializer} deserializer - The deserializer to use.\n * @param {any} cls - The class of the handles to load.\n * @returns {any[]} The loaded handles.\n */\nexport function load_handles(deserializer: BCS.Deserializer, cls: any): any[] {\n    const handles: any[] = []\n    try {\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            const handle = cls.deserialize(deserializer)\n            handles.push(handle)\n        }\n    } catch (e) {\n        if (!(e instanceof Error && isOutOfBoundError(e))) {\n            throw e\n        }\n    }\n\n    return handles\n}\n","/**\n * Enum representing various table types.\n */\nexport enum TableType {\n    /**\n     * Table type for module handles.\n     */\n    MODULE_HANDLES = 0x1,\n\n    /**\n     * Table type for struct handles.\n     */\n    STRUCT_HANDLES = 0x2,\n\n    /**\n     * Table type for function handles.\n     */\n    FUNCTION_HANDLES = 0x3,\n\n    /**\n     * Table type for function instantiations.\n     */\n    FUNCTION_INST = 0x4,\n\n    /**\n     * Table type for signatures.\n     */\n    SIGNATURES = 0x5,\n\n    /**\n     * Table type for constant pool.\n     */\n    CONSTANT_POOL = 0x6,\n\n    /**\n     * Table type for identifiers.\n     */\n    IDENTIFIERS = 0x7,\n\n    /**\n     * Table type for address identifiers.\n     */\n    ADDRESS_IDENTIFIERS = 0x8,\n\n    /**\n     * Table type for struct definitions.\n     */\n    STRUCT_DEFS = 0xa,\n\n    /**\n     * Table type for struct definition instantiations.\n     */\n    STRUCT_DEF_INST = 0xb,\n\n    /**\n     * Table type for function definitions.\n     */\n    FUNCTION_DEFS = 0xc,\n\n    /**\n     * Table type for field handles.\n     */\n    FIELD_HANDLE = 0xd,\n\n    /**\n     * Table type for field instantiations.\n     */\n    FIELD_INST = 0xe,\n\n    /**\n     * Table type for friend declarations.\n     */\n    FRIEND_DECLS = 0xf,\n\n    /**\n     * Table type for metadata.\n     */\n    METADATA = 0x10,\n}\n","import { BCS } from 'aptos'\n\nimport {\n    AbilitySet,\n    AddressIdentifier,\n    Code,\n    FunctionHandle,\n    FunctionInstantiation,\n    Header,\n    Identifier,\n    Index,\n    ModuleHandle,\n    StructHandle,\n    Tables,\n    load_address_identifiers,\n    load_function_handles,\n    load_function_instantiations,\n    load_identifiers,\n    load_module_handles,\n    load_struct_handles,\n} from './basic'\nimport { TableType } from './table-types'\nimport { calculateContentLength, serializeVectorWithoutLength } from './utils'\n\n/**\n * Represents a raw compiled script with header, tables, type parameters, parameters, and code.\n */\nexport class CompiledScriptRaw {\n    /**\n     * Creates an instance of CompiledScriptRaw.\n     *\n     * @param {Header} header - The header.\n     * @param {Tables} tables - The tables.\n     * @param {BCS.Seq<AbilitySet>} typeParameters - The type parameters.\n     * @param {Index} parameters - The parameters.\n     * @param {Code} code - The code.\n     */\n    constructor(\n        public header: Header,\n        public tables: Tables,\n        public typeParameters: BCS.Seq<AbilitySet>,\n        public parameters: Index,\n        public code: Code\n    ) {}\n\n    /**\n     * Deserializes a CompiledScriptRaw from the given deserializer.\n     *\n     * @param {BCS.Deserializer} deserializer - The deserializer to use.\n     * @returns {CompiledScriptRaw} The deserialized CompiledScriptRaw.\n     */\n    static deserialize(deserializer: BCS.Deserializer): CompiledScriptRaw {\n        const header = Header.deserialize(deserializer)\n        const table = Tables.deserialize(deserializer)\n        const typeParameters = BCS.deserializeVector(deserializer, AbilitySet)\n        const parameters = Index.deserialize(deserializer)\n        const code = Code.deserialize(deserializer)\n        return new CompiledScriptRaw(header, table, typeParameters, parameters, code)\n    }\n\n    /**\n     * Serializes the CompiledScriptRaw using the given serializer.\n     *\n     * @param {BCS.Serializer} serializer - The serializer to use.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        this.header.serialize(serializer)\n        this.tables.serialize(serializer)\n        BCS.serializeVector(this.typeParameters, serializer)\n        this.parameters.serialize(serializer)\n        this.code.serialize(serializer)\n    }\n}\n\n/**\n * Represents a compiled script with various handles, signatures, constant pool, metadata, identifiers, address identifiers, type parameters, parameters, and code.\n */\nexport class CompiledScript {\n    // @ts-expect-error\n    public header: Header\n    // @ts-expect-error\n    public table: Tables\n\n    public moduleHandles: ModuleHandle[] = []\n    public structHandles: StructHandle[] = []\n    public functionHandles: FunctionHandle[] = []\n    public functionInstatiations: FunctionInstantiation[] = []\n    // @ts-expect-error\n    public signatures: BCS.Bytes\n    // @ts-expect-error\n    public constantPool: BCS.Bytes\n    // @ts-expect-error\n    public metadata: BCS.Bytes\n    public identifiers: Identifier[] = []\n    public addressIdentifiers: AddressIdentifier[] = []\n    // @ts-expect-error\n    public typeParameters: BCS.Seq<AbilitySet>\n    // @ts-expect-error\n    public parameters: Index\n    // @ts-expect-error\n    public code: Code\n\n    /**\n     * Creates an instance of CompiledScript from a raw compiled script.\n     *\n     * @param {CompiledScriptRaw} raw - The raw compiled script.\n     * @returns {CompiledScript} The created CompiledScript.\n     */\n    static from(raw: CompiledScriptRaw): CompiledScript {\n        // return new CompiledScript(raw)\n        const script = new CompiledScript()\n        script.header = raw.header\n        script.table = raw.tables\n        script.typeParameters = raw.typeParameters\n        script.parameters = raw.parameters\n        script.code = raw.code\n\n        for (const table of raw.tables.tables) {\n            const data = raw.tables.data.subarray(table.offset, table.offset + table.count)\n            const deserializer = new BCS.Deserializer(data)\n            switch (table.kind) {\n                case TableType.MODULE_HANDLES:\n                    script.moduleHandles = load_module_handles(deserializer)\n                    break\n                case TableType.STRUCT_HANDLES:\n                    script.structHandles = load_struct_handles(deserializer)\n                    break\n                case TableType.FUNCTION_HANDLES:\n                    script.functionHandles = load_function_handles(deserializer)\n                    break\n                case TableType.FUNCTION_INST:\n                    script.functionInstatiations = load_function_instantiations(deserializer)\n                    break\n                case TableType.SIGNATURES:\n                    script.signatures = data\n                    break\n                case TableType.CONSTANT_POOL:\n                    script.constantPool = data\n                    break\n                case TableType.METADATA:\n                    script.metadata = data\n                    break\n                case TableType.IDENTIFIERS:\n                    script.identifiers = load_identifiers(deserializer)\n                    break\n                case TableType.ADDRESS_IDENTIFIERS:\n                    script.addressIdentifiers = load_address_identifiers(deserializer)\n                    break\n                default:\n                    throw new Error(`Unsupported table type: ${table.kind}, ${TableType[table.kind]}`)\n            }\n        }\n        return script\n    }\n\n    /**\n     * Serializes the CompiledScript using the given serializer.\n     *\n     * @param {BCS.Serializer} serializer - The serializer to use.\n     */\n    public serialize(serializer: BCS.Serializer): void {\n        this.header.serialize(serializer)\n        const tables = this.table.tables.sort((a, b) => a.kind - b.kind)\n        serializer.serializeU32AsUleb128(tables.length)\n\n        let offset = 0\n        for (const table of tables) {\n            table.offset = offset\n            switch (table.kind) {\n                case TableType.IDENTIFIERS: {\n                    const length = calculateContentLength(this.identifiers)\n                    table.count = length\n                    break\n                }\n            }\n            table.serialize(serializer)\n            offset += table.count\n        }\n\n        for (const table of tables) {\n            switch (table.kind) {\n                case TableType.MODULE_HANDLES:\n                    serializeVectorWithoutLength(this.moduleHandles, serializer)\n                    break\n                case TableType.STRUCT_HANDLES:\n                    serializeVectorWithoutLength(this.structHandles, serializer)\n                    break\n                case TableType.FUNCTION_HANDLES:\n                    serializeVectorWithoutLength(this.functionHandles, serializer)\n                    break\n                case TableType.FUNCTION_INST:\n                    serializeVectorWithoutLength(this.functionInstatiations, serializer)\n                    break\n                case TableType.SIGNATURES:\n                    serializer.serializeFixedBytes(this.signatures)\n                    break\n                case TableType.CONSTANT_POOL:\n                    serializer.serializeFixedBytes(this.constantPool)\n                    break\n                case TableType.METADATA:\n                    serializer.serializeFixedBytes(this.metadata)\n                    break\n                case TableType.IDENTIFIERS:\n                    serializeVectorWithoutLength(this.identifiers, serializer)\n                    break\n                case TableType.ADDRESS_IDENTIFIERS:\n                    serializeVectorWithoutLength(this.addressIdentifiers, serializer)\n                    break\n                default:\n                    throw new Error(`Unsupported table type: ${table.kind}, ${TableType[table.kind]}`)\n            }\n        }\n        BCS.serializeVector(this.typeParameters, serializer)\n        this.parameters.serialize(serializer)\n        this.code.serialize(serializer)\n    }\n}\n","// Note: Serializable is not exported in aptos\nimport { hexToBytes } from '@noble/hashes/utils'\nimport { BCS } from 'aptos'\n\nimport { AddressIdentifier, Identifier } from './basic'\nimport * as script from './compiled-script'\nimport { TableType } from './table-types'\n\n/**\n * Interface representing a serializable object.\n */\ninterface Serializable {\n    /**\n     * Serializes the object using the given serializer.\n     *\n     * @param {BCS.Serializer} serializer - The serializer to use.\n     */\n    serialize(serializer: BCS.Serializer): void\n}\n\n/**\n * Serializes a vector without including its length.\n *\n * @param {BCS.Seq<T>} value - The vector to serialize.\n * @param {BCS.Serializer} serializer - The serializer to use.\n */\nexport function serializeVectorWithoutLength<T extends Serializable>(\n    value: BCS.Seq<T>,\n    serializer: BCS.Serializer\n): void {\n    value.forEach((item: T) => {\n        item.serialize(serializer)\n    })\n}\n\n/**\n * Calculates the content length of a serialized vector.\n *\n * @param {BCS.Seq<T>} value - The vector to calculate the length for.\n * @returns {number} The length of the serialized vector.\n */\nexport function calculateContentLength<T extends Serializable>(value: BCS.Seq<T>): number {\n    const serializer = new BCS.Serializer()\n    serializeVectorWithoutLength(value, serializer)\n    return serializer.getBytes().length\n}\n\n/**\n * Checks if an error is an out-of-bound error.\n *\n * @param {Error} e - The error to check.\n * @returns {boolean} True if the error is an out-of-bound error, false otherwise.\n */\nexport function isOutOfBoundError(e: Error): boolean {\n    return e.message.match(/Reached to the end of buffer/) !== null\n}\n\n/**\n * Interface representing a compiled unit.\n */\ninterface CompiledUnit {\n    /**\n     * Array of identifiers in the compiled unit.\n     */\n    identifiers: Identifier[]\n\n    /**\n     * Array of address identifiers in the compiled unit.\n     */\n    addressIdentifiers: AddressIdentifier[]\n}\n\n/**\n * Checks if two Uint8Array instances are equal.\n *\n * @param {Uint8Array} a - The first Uint8Array.\n * @param {Uint8Array} b - The second Uint8Array.\n * @returns {boolean} True if the arrays are equal, false otherwise.\n */\nexport function isEqual(a: Uint8Array, b: Uint8Array): boolean {\n    return a.length === b.length && a.every((v, i) => v === b[i])\n}\n\n/**\n * Replaces a table value in a compiled unit.\n *\n * @param {T} compiled - The compiled unit.\n * @param {TableType} tableType - The table type.\n * @param {any} oldValue - The old value to replace.\n * @param {any} newValue - The new value to replace with.\n * @throws {Error} If the table type is unsupported.\n */\nexport function replaceTableValue<T extends CompiledUnit>(\n    compiled: T,\n    tableType: TableType,\n    oldValue: any,\n    newValue: any\n): void {\n    switch (tableType) {\n        case TableType.IDENTIFIERS: {\n            compiled.identifiers = compiled.identifiers.map((identifier, index) => {\n                if (identifier.value === oldValue) {\n                    return new Identifier(newValue)\n                }\n                return identifier\n            })\n            break\n        }\n        case TableType.ADDRESS_IDENTIFIERS: {\n            compiled.addressIdentifiers = compiled.addressIdentifiers.map((addressIdentifier, index) => {\n                if (\n                    addressIdentifier.address.length != oldValue.length ||\n                    addressIdentifier.address.length != newValue.length\n                ) {\n                    throw new Error(`Invalid address length, newValue: ${newValue.toString('hex')}`)\n                }\n\n                if (isEqual(addressIdentifier.address, oldValue as Uint8Array)) {\n                    return new AddressIdentifier(newValue)\n                }\n                return addressIdentifier\n            })\n            break\n        }\n        default:\n            throw new Error(`Unsupported table type: ${tableType}, ${TableType[tableType]}`)\n    }\n}\n\n/**\n * Rebuilds a compiled script bytecode with updated addresses and names.\n *\n * @param {string | Uint8Array} bytecode - The original bytecode.\n * @param {Array<{ oldValue: Uint8Array, newValue: Uint8Array }>} addresses - The addresses to update.\n * @param {Array<{ oldValue: string, newValue: string }>} names - The names to update.\n * @returns {string} The updated bytecode as a hex string.\n */\nexport function rebuildCompileScriptBytecode(\n    bytecode: string | Uint8Array,\n    addresses: {\n        oldValue: Uint8Array\n        newValue: Uint8Array\n    }[],\n    names: {\n        oldValue: string\n        newValue: string\n    }[]\n): string {\n    const code = typeof bytecode === 'string' ? hexToBytes(bytecode) : bytecode\n    const deserializer = new BCS.Deserializer(code)\n    const raw = script.CompiledScriptRaw.deserialize(deserializer)\n    const compiledScript = script.CompiledScript.from(raw)\n\n    for (const item of addresses) {\n        replaceTableValue(compiledScript, TableType.ADDRESS_IDENTIFIERS, item.oldValue, item.newValue)\n    }\n\n    for (const item of names) {\n        replaceTableValue(compiledScript, TableType.IDENTIFIERS, item.oldValue, item.newValue)\n    }\n\n    const serializer = new BCS.Serializer()\n    compiledScript.serialize(serializer)\n    const result = Buffer.from(serializer.getBytes()).toString('hex')\n    return result\n}\n","import * as aptos from 'aptos'\n\nimport { rebuildCompileScriptBytecode } from '../format/utils'\nimport { SDK } from '../index'\nimport { Packet, TypeInfo, TypeInfoEx } from '../types'\nimport {\n    convertBytesToUint64,\n    convertUint64ToBytes,\n    fullAddress,\n    getLzReceiveTypeArguments,\n    hexToAscii,\n    isErrorOfApiError,\n    stringToUint8Array,\n} from '../utils'\n\n/**\n * Interface representing the fee configuration.\n */\nexport interface Fee {\n    /**\n     * The airdrop amount cap.\n     */\n    airdropAmtCap: aptos.BCS.Uint64\n\n    /**\n     * The price ratio.\n     */\n    priceRatio: aptos.BCS.Uint64\n\n    /**\n     * The gas price.\n     */\n    gasPrice: aptos.BCS.Uint64\n}\n\n// todo: merge into endpoint\n/**\n * Class representing an Executor.\n */\nexport class Executor {\n    public readonly module\n    public readonly moduleName\n    public readonly type\n\n    /**\n     * Creates an instance of the Executor class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(private sdk: SDK) {\n        this.module = `${sdk.accounts.layerzero}::executor_v1`\n        this.moduleName = 'layerzero::executor_v1'\n        this.type = `${this.module}::Executor`\n    }\n\n    /**\n     * Creates the payload for setting the default adapter parameters.\n     *\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Bytes} adapterParams - The adapter parameters.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload for setting the default adapter parameters.\n     */\n    setDefaultAdapterParamsPayload(\n        dstChainId: aptos.BCS.Uint16,\n        adapterParams: aptos.BCS.Bytes\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::set_default_adapter_params`,\n            type_arguments: [],\n            arguments: [dstChainId, Array.from(adapterParams)],\n        }\n    }\n\n    /**\n     * Sets the default adapter parameters.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Bytes} adapterParams - The adapter parameters.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setDefaultAdapterParams(\n        signer: aptos.AptosAccount,\n        dstChainId: aptos.BCS.Uint16,\n        adapterParams: aptos.BCS.Bytes\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.setDefaultAdapterParamsPayload(dstChainId, adapterParams)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the default adapter parameters for a given chain ID.\n     *\n     * @param {aptos.BCS.Uint16} chainId - The chain ID.\n     * @returns {Promise<aptos.BCS.Bytes>} A promise that resolves to the default adapter parameters.\n     * @throws {Error} If the LayerZero account is undefined.\n     */\n    async getDefaultAdapterParams(chainId: aptos.BCS.Uint16): Promise<aptos.BCS.Bytes> {\n        if (this.sdk.accounts.layerzero === undefined) {\n            throw new Error('endpoint sdk accounts layerzero is undefined when invoke getDefaultAdapterParams')\n        }\n        const resource = await this.sdk.client.getAccountResource(\n            this.sdk.accounts.layerzero,\n            `${this.module}::AdapterParamsConfig`\n        )\n        const { params } = resource.data as { params: { handle: string } }\n        try {\n            const response = await this.sdk.client.getTableItem(params.handle, {\n                key_type: 'u64',\n                value_type: 'vector<u8>',\n                key: chainId.toString(),\n            })\n            return Buffer.from(aptos.HexString.ensure(response).noPrefix(), 'hex')\n        } catch (e) {\n            return this.buildDefaultAdapterParams(0)\n        }\n    }\n\n    /**\n     * Checks if an address is registered.\n     *\n     * @param {aptos.MaybeHexString} address - The address to check.\n     * @returns {Promise<boolean>} A promise that resolves to true if the address is registered, false otherwise.\n     */\n    async isRegistered(address: aptos.MaybeHexString): Promise<boolean> {\n        try {\n            await this.sdk.client.getAccountResource(address, `${this.module}::ExecutorConfig`)\n            return true\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return false\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Creates the payload for registering an executor.\n     *\n     * @returns {aptos.Types.EntryFunctionPayload} The payload for registering an executor.\n     */\n    registerPayload(): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::register`,\n            type_arguments: [],\n            arguments: [],\n        }\n    }\n\n    /**\n     * Registers an executor.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async register(signer: aptos.AptosAccount): Promise<aptos.Types.Transaction> {\n        const transaction = this.registerPayload()\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Creates the payload for setting the fee.\n     *\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {Fee} config - The fee configuration.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload for setting the fee.\n     */\n    setFeePayload(dstChainId: aptos.BCS.Uint16, config: Fee): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::set_fee`,\n            type_arguments: [],\n            arguments: [dstChainId, config.airdropAmtCap, config.priceRatio, config.gasPrice],\n        }\n    }\n\n    /**\n     * Sets the fee.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {Fee} config - The fee configuration.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setFee(\n        signer: aptos.AptosAccount,\n        dstChainId: aptos.BCS.Uint16,\n        config: Fee\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.setFeePayload(dstChainId, config)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the fee configuration for a given executor and chain ID.\n     *\n     * @param {aptos.MaybeHexString} executor - The executor address.\n     * @param {aptos.BCS.Uint16} chainId - The chain ID.\n     * @param {object} [query] - The query parameters.\n     * @param {bigint | number} [query.ledgerVersion] - The ledger version.\n     * @returns {Promise<Fee>} A promise that resolves to the fee configuration.\n     * @throws {Error} If an error occurs while fetching the fee configuration.\n     */\n    public async getFee(\n        executor: aptos.MaybeHexString,\n        chainId: aptos.BCS.Uint16,\n        query?: {\n            ledgerVersion?: bigint | number\n        }\n    ): Promise<Fee> {\n        try {\n            const resource = await this.sdk.client.getAccountResource(executor, `${this.module}::ExecutorConfig`, query)\n            const { fee } = resource.data as { fee: { handle: string } }\n            const response = await this.sdk.client.getTableItem(\n                fee.handle,\n                {\n                    key_type: 'u64',\n                    value_type: `${this.module}::Fee`,\n                    key: chainId.toString(),\n                },\n                query\n            )\n            return {\n                airdropAmtCap: BigInt(response.airdrop_amt_cap),\n                priceRatio: BigInt(response.price_ratio),\n                gasPrice: BigInt(response.gas_price),\n            }\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return {\n                    airdropAmtCap: 0n,\n                    priceRatio: 0n,\n                    gasPrice: 0n,\n                }\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Creates the payload for airdropping tokens.\n     *\n     * @param {aptos.BCS.Uint16} srcChainId - The source chain ID.\n     * @param {aptos.BCS.Bytes} guid - The GUID.\n     * @param {aptos.MaybeHexString} receiver - The receiver address.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} amount - The amount to airdrop.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload for airdropping tokens.\n     */\n    airdropPayload(\n        srcChainId: aptos.BCS.Uint16,\n        guid: aptos.BCS.Bytes,\n        receiver: aptos.MaybeHexString,\n        amount: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::airdrop`,\n            type_arguments: [],\n            arguments: [srcChainId, Array.from(guid), receiver, amount.toString()],\n        }\n    }\n\n    /**\n     * Airdrops tokens.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} srcChainId - The source chain ID.\n     * @param {aptos.BCS.Bytes} guid - The GUID.\n     * @param {aptos.MaybeHexString} receiver - The receiver address.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} amount - The amount to airdrop.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async airdrop(\n        signer: aptos.AptosAccount,\n        srcChainId: aptos.BCS.Uint16,\n        guid: aptos.BCS.Bytes,\n        receiver: aptos.MaybeHexString,\n        amount: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.airdropPayload(srcChainId, guid, receiver, amount)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Checks if a GUID has been airdropped to a receiver.\n     *\n     * @param {aptos.BCS.Bytes} guid - The GUID.\n     * @param {aptos.MaybeHexString} receiver - The receiver address.\n     * @returns {Promise<boolean>} A promise that resolves to true if the GUID has been airdropped, false otherwise.\n     * @throws {Error} If the LayerZero account is undefined.\n     */\n    async isAirdropped(guid: aptos.BCS.Bytes, receiver: aptos.MaybeHexString): Promise<boolean> {\n        try {\n            if (this.sdk.accounts.layerzero === undefined) {\n                throw new Error('endpoint sdk accounts layerzero is undefined when invoke isAirdropped')\n            }\n            const resource = await this.sdk.client.getAccountResource(\n                this.sdk.accounts.layerzero,\n                `${this.module}::JobStore`\n            )\n            const { done } = resource.data as { done: { handle: string } }\n            const response = await this.sdk.client.getTableItem(done.handle, {\n                key_type: `${this.module}::JobKey`,\n                value_type: 'bool',\n                key: {\n                    guid: Buffer.from(guid).toString('hex'),\n                    executor: receiver.toString(),\n                },\n            })\n            return response\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return false\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Quotes the fee for a given executor, destination chain ID, and adapter parameters.\n     *\n     * @param {aptos.MaybeHexString} executor - The executor address.\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Bytes} adapterParams - The adapter parameters.\n     * @param {object} [query] - The query parameters.\n     * @param {bigint | number} [query.ledgerVersion] - The ledger version.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the quoted fee.\n     */\n    async quoteFee(\n        executor: aptos.MaybeHexString,\n        dstChainId: aptos.BCS.Uint16,\n        adapterParams: aptos.BCS.Bytes,\n        query?: {\n            ledgerVersion?: bigint | number\n        }\n    ): Promise<aptos.BCS.Uint64> {\n        if (adapterParams === undefined || adapterParams.length === 0) {\n            adapterParams = await this.getDefaultAdapterParams(dstChainId)\n        }\n\n        const fee = await this.getFee(executor, dstChainId, query)\n        const [, uaGas, airdropAmount] = this.decodeAdapterParams(adapterParams)\n        return ((uaGas * fee.gasPrice + airdropAmount) * fee.priceRatio) / 10000000000n\n    }\n\n    /**\n     * Builds the default adapter parameters.\n     *\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} uaGas - The user application gas.\n     * @returns {aptos.BCS.Bytes} The default adapter parameters.\n     */\n    public buildDefaultAdapterParams(uaGas: aptos.BCS.Uint64 | aptos.BCS.Uint32): aptos.BCS.Bytes {\n        const params = [0, 1].concat(Array.from(convertUint64ToBytes(uaGas)))\n        return Uint8Array.from(Buffer.from(params))\n    }\n\n    /**\n     * Builds the airdrop adapter parameters.\n     *\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} uaGas - The user application gas.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} airdropAmount - The airdrop amount.\n     * @param {string} airdropAddress - The airdrop address.\n     * @returns {aptos.BCS.Bytes} The airdrop adapter parameters.\n     */\n    buildAirdropAdapterParams(\n        uaGas: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        airdropAmount: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        airdropAddress: string\n    ): aptos.BCS.Bytes {\n        if (airdropAmount === 0n) {\n            return this.buildDefaultAdapterParams(uaGas)\n        }\n        const params = [0, 2]\n            .concat(Array.from(convertUint64ToBytes(uaGas)))\n            .concat(Array.from(convertUint64ToBytes(airdropAmount)))\n            .concat(Array.from(aptos.HexString.ensure(airdropAddress).toUint8Array()))\n\n        return Buffer.from(params)\n    }\n\n    /**\n     * Decodes the adapter parameters.\n     *\n     * txType 1\n     * bytes  [2       8       ]\n     * fields [txType  extraGas]\n     * txType 2\n     * bytes  [2       8         8           unfixed       ]\n     * fields [txType  extraGas  airdropAmt  airdropAddress]\n     *\n     * @param {aptos.BCS.Bytes} adapterParams - The adapter parameters.\n     * @returns {[aptos.BCS.Uint16, aptos.BCS.Uint64, aptos.BCS.Uint64, string]} The decoded adapter parameters.\n     * @throws {Error} If the adapter parameters are invalid.\n     */\n    decodeAdapterParams(\n        adapterParams: aptos.BCS.Bytes\n    ): [aptos.BCS.Uint16, aptos.BCS.Uint64, aptos.BCS.Uint64, string] {\n        const type = adapterParams[0] * 256 + adapterParams[1]\n        if (type === 1) {\n            // default\n            if (adapterParams.length !== 10) throw new Error('invalid adapter params')\n\n            const uaGas = adapterParams.slice(2, 10)\n            return [type, convertBytesToUint64(uaGas), 0n, '']\n        } else if (type === 2) {\n            // airdrop\n            if (adapterParams.length <= 18) throw new Error('invalid adapter params')\n\n            const uaGas = adapterParams.slice(2, 10)\n            const airdropAmount = adapterParams.slice(10, 18)\n            const airdropAddressBytes = adapterParams.slice(18)\n            return [\n                type,\n                convertBytesToUint64(uaGas),\n                convertBytesToUint64(airdropAmount),\n                aptos.HexString.fromUint8Array(airdropAddressBytes).toString(),\n            ]\n        } else {\n            throw new Error('invalid adapter params')\n        }\n    }\n\n    /**\n     * Rebuilds a compiled script to query type arguments for the lz_receive function.\n     *\n     * @param {Packet} packet - The packet.\n     * @returns {Promise<string>} A promise that resolves to the rebuilt script bytecode.\n     * @throws {Error} If the executor_ext account is undefined.\n     */\n    async rebuildTypeArgsScript(packet: Packet): Promise<string> {\n        // NOTE: `make compile-script-template` to get SCRIPT_BYTECODE\n        const SCRIPT_BYTECODE =\n            'a11ceb0b0500000006010006020604030a0a051419072d50087d60000001010202000307000104030100020504020004060c030a020a02010a08000003030a020a0202060c0a080009747970655f696e666f07636f756e7465720c6578656375746f725f6578740854797065496e666f106c7a5f726563656976655f7479706573166275696c645f6c7a5f726563656976655f74797065730000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000cafe000000000000000000000000000000000000000000000000000000000000face000001090b010b020b0311000c040b000b04110102'\n\n        const uaTypeInfo = await this.sdk.LayerzeroModule.Endpoint.getUATypeInfo(\n            aptos.HexString.fromBuffer(packet.dst_address)\n        )\n\n        if (this.sdk.accounts.executor_ext === undefined) {\n            throw new Error('sdk accounts executor_ext is undefined when invoked rebuildTypeArgsScript')\n        }\n        const bytecode = rebuildCompileScriptBytecode(\n            SCRIPT_BYTECODE,\n            [\n                {\n                    oldValue: aptos.HexString.ensure(\n                        '0x000000000000000000000000000000000000000000000000000000000000face'\n                    ).toUint8Array(),\n                    newValue: aptos.HexString.ensure(this.sdk.accounts.executor_ext).toUint8Array(),\n                },\n                {\n                    oldValue: aptos.HexString.ensure(\n                        '0x000000000000000000000000000000000000000000000000000000000000cafe'\n                    ).toUint8Array(),\n                    newValue: aptos.HexString.ensure(uaTypeInfo.account_address).toUint8Array(),\n                },\n            ],\n            [\n                {\n                    oldValue: 'counter',\n                    newValue: uaTypeInfo.module_name,\n                },\n            ]\n        )\n        return bytecode\n    }\n\n    /**\n     * Executes compiled script on chain to get type arguments for lz_receive function.\n     *\n     * @param {Packet} packet - The packet.\n     * @returns {Promise<string[]>} A promise that resolves to the type arguments.\n     * @throws {Error} If the sdk accounts layerzero_apps_pubkey is undefined.\n     */\n    async getLzReceiveTypeArguments(packet: Packet): Promise<string[]> {\n        const bytecode = await this.rebuildTypeArgsScript(packet)\n        if (this.sdk.accounts.layerzero_apps_pubkey === undefined) {\n            throw new Error('sdk accounts layerzero_apps_pubkey is undefined when invoked getLzReceiveTypeArguments')\n        }\n        const typeInfos = await getLzReceiveTypeArguments(\n            new aptos.HexString(bytecode).toUint8Array(),\n            this.sdk,\n            new aptos.TxnBuilderTypes.Ed25519PublicKey(\n                stringToUint8Array(this.sdk.accounts.layerzero_apps_pubkey.toString())\n            ),\n            packet.dst_address,\n            parseInt(packet.src_chain_id.toString()),\n            packet.src_address,\n            Buffer.from(packet.payload)\n        )\n        return typeInfos\n    }\n\n    /**\n     * Gets lz_receive_types arguments by view function (tagged with #[view]).\n     * 1. Tries UA::${module}::lz_receive_types, if failed, then\n     * 2. Tries UA::lz_receive::lz_receive_types by convention.\n     *\n     * @param {Packet} packet - The packet.\n     * @param {string} [ledger_version] - The ledger version.\n     * @returns {Promise<[string[], TypeInfoEx]>} A promise that resolves to the type arguments and TypeInfoEx.\n     * @throws {Error} If the lz_receive_types arguments cannot be retrieved.\n     */\n    async getLzReceiveTypeArgumentsView(packet: Packet, ledger_version?: string): Promise<[string[], TypeInfoEx]> {\n        const dstAddressHex = Buffer.from(packet.dst_address).toString('hex')\n        const uaAddress = aptos.HexString.ensure(dstAddressHex)\n        const uaTypeInfo = await this.sdk.LayerzeroModule.Endpoint.getUATypeInfo(uaAddress)\n\n        const potentialModules = [uaTypeInfo.module_name, 'lz_receive']\n        for (const module of potentialModules) {\n            const payload: aptos.Types.ViewRequest = {\n                function: `${uaTypeInfo.account_address}::${module}::lz_receive_types`,\n                type_arguments: [],\n                arguments: [\n                    `${packet.src_chain_id}`,\n                    Buffer.from(packet.src_address).toString('hex'),\n                    Buffer.from(packet.payload).toString('hex'),\n                ],\n            }\n            try {\n                const ret = await this.sdk.client.view(payload, ledger_version)\n                const types = ret[0] as TypeInfo[]\n                return [\n                    types.map((t) => {\n                        const account_address = fullAddress(t.account_address).toString()\n                        const module_name = hexToAscii(t.module_name)\n                        const struct_name = hexToAscii(t.struct_name)\n                        return `${account_address}::${module_name}::${struct_name}`\n                    }),\n                    {\n                        account_address: uaTypeInfo.account_address,\n                        module_name: module,\n                        struct_name: uaTypeInfo.struct_name,\n                        type: uaTypeInfo.type,\n                    },\n                ]\n            } catch (e) {\n                if (isErrorOfApiError(e, 400)) {\n                    continue\n                }\n                throw e\n            }\n        }\n\n        throw new Error(`failed to get lz_receive_types arguments for ${uaAddress}`)\n    }\n\n    /**\n     * Gets the payload for the lz_receive function.\n     *\n     * @param {string[]} type_arguments - The type arguments.\n     * @param {Packet} packet - The packet.\n     * @param {TypeInfo} [uaTypeInfo] - The TypeInfo.\n     * @returns {Promise<aptos.Types.EntryFunctionPayload>} A promise that resolves to the payload.\n     */\n    async getLzReceivePayload(\n        type_arguments: string[],\n        packet: Packet,\n        uaTypeInfo?: TypeInfo\n    ): Promise<aptos.Types.EntryFunctionPayload> {\n        if (!uaTypeInfo) {\n            uaTypeInfo = await this.sdk.LayerzeroModule.Endpoint.getUATypeInfo(\n                aptos.HexString.fromBuffer(packet.dst_address)\n            )\n        }\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${uaTypeInfo.account_address}::${uaTypeInfo.module_name}::lz_receive`,\n            type_arguments,\n            arguments: [\n                packet.src_chain_id,\n                Array.from(Uint8Array.from(packet.src_address)),\n                Array.from(Uint8Array.from(packet.payload)),\n            ],\n        }\n        return transaction\n    }\n\n    /**\n     * Executes the lz_receive function.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string[]} type_arguments - The type arguments.\n     * @param {Packet} packet - The packet.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async lzReceive(\n        signer: aptos.AptosAccount,\n        type_arguments: string[],\n        packet: Packet\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = await this.getLzReceivePayload(type_arguments, packet)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Auto-detects lz_receive_types and calls lz_receive.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {Packet} packet - The packet.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async lzReceiveNew(signer: aptos.AptosAccount, packet: Packet): Promise<aptos.Types.Transaction> {\n        let transaction\n        try {\n            // try to get lz_receive_types by view function (tagged with #[view])\n            const [typeArgs, uaTypeInfo] = await this.getLzReceiveTypeArgumentsView(packet)\n            transaction = await this.getLzReceivePayload(typeArgs, packet, uaTypeInfo)\n        } catch (e) {\n            // ignore\n        }\n        if (!transaction) {\n            // NOTE: fallback to old lz_receive_types which is not tagged with #[view]\n            const typeArgs = await this.getLzReceiveTypeArguments(packet)\n            transaction = await this.getLzReceivePayload(typeArgs, packet)\n        }\n\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the short request event type.\n     *\n     * @returns {string} The short request event type.\n     */\n    getShortRequestEventType(): string {\n        return `${this.module}::RequestEvent`.replace(/^(0x)0*/i, '$1')\n    }\n}\n","import * as aptos from 'aptos'\n\nimport { SDK } from '../index'\nimport { isErrorOfApiError } from '../utils'\n\n/**\n * Class representing the executor configuration.\n */\nexport class ExecutorConfig {\n    /**\n     * The module name.\n     */\n    public readonly module\n\n    /**\n     * Creates an instance of the ExecutorConfig class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(private sdk: SDK) {\n        this.module = `${sdk.accounts.layerzero}::executor_config`\n    }\n\n    /**\n     * Gets the default executor for a given remote chain ID.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @returns {Promise<[string, aptos.BCS.Uint64]>} A promise that resolves to the executor and version.\n     * @throws {Error} If the SDK accounts layerzero is undefined.\n     */\n    async getDefaultExecutor(remoteChainId: aptos.BCS.Uint16): Promise<[string, aptos.BCS.Uint64]> {\n        if (this.sdk.accounts.layerzero === undefined) {\n            throw new Error('sdk accounts layerzero is undefined when invoke getDefaultExecutor')\n        }\n        const resource = await this.sdk.client.getAccountResource(\n            this.sdk.accounts.layerzero,\n            `${this.module}::ConfigStore`\n        )\n\n        const { config } = resource.data as { config: { handle: string } }\n        try {\n            const response = await this.sdk.client.getTableItem(config.handle, {\n                key_type: 'u64',\n                value_type: `${this.module}::Config`,\n                key: remoteChainId.toString(),\n            })\n            return [response.executor, response.version]\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return ['', BigInt(0)]\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Gets the executor for a given user address and remote chain ID.\n     *\n     * @param {aptos.MaybeHexString} uaAddress - The user address.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {Object} [query] - Optional query parameters.\n     * @param {bigint | number} [query.ledgerVersion] - The ledger version.\n     * @returns {Promise<[string, aptos.BCS.Uint64]>} A promise that resolves to the executor and version.\n     */\n    async getExecutor(\n        uaAddress: aptos.MaybeHexString,\n        remoteChainId: aptos.BCS.Uint16,\n        query?: {\n            ledgerVersion?: bigint | number\n        }\n    ): Promise<[string, aptos.BCS.Uint64]> {\n        const resource = await this.sdk.client.getAccountResource(uaAddress, `${this.module}::ConfigStore`, query)\n        const { config } = resource.data as { config: { handle: string } }\n\n        try {\n            const response = await this.sdk.client.getTableItem(\n                config.handle,\n                {\n                    key_type: 'u64',\n                    value_type: `${this.module}::Config`,\n                    key: remoteChainId.toString(),\n                },\n                query\n            )\n            return [response.executor, response.version]\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return await this.getDefaultExecutor(remoteChainId)\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Creates a payload for setting the default executor.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint8} version - The version.\n     * @param {aptos.MaybeHexString} executor - The executor address.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setDefaultExecutorPayload(\n        remoteChainId: aptos.BCS.Uint16,\n        version: aptos.BCS.Uint8,\n        executor: aptos.MaybeHexString\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::set_default_executor`,\n            type_arguments: [],\n            arguments: [remoteChainId, version, executor],\n        }\n    }\n}\n","import * as aptos from 'aptos'\n\nimport { SDK } from '../index'\n\nexport class ExecutorV2 {\n    /**\n     * The module name.\n     */\n    public readonly module\n\n    public readonly type\n\n    /**\n     * Creates an instance of the UlnReceive class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(private sdk: SDK) {\n        this.module = `${sdk.accounts.executor_v2}::executor_v2`\n        this.type = `${this.module}::Executor`\n    }\n\n    async quoteFee(\n        uaAddress: string,\n        executorAddress: string,\n        dstChainId: bigint,\n        adapterParams: Uint8Array\n    ): Promise<aptos.BCS.Uint64> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::quote_fee`,\n            type_arguments: [],\n            arguments: [uaAddress, executorAddress, dstChainId, adapterParams],\n        }\n        const ret = await this.sdk.client.view(payload)\n        return ret[0] as aptos.BCS.Uint64\n    }\n}\n","import * as aptos from 'aptos'\nimport { ApiError } from 'aptos'\n\nimport { SDK } from '..'\n\nconst bnReplacer = (key: string, value: unknown): unknown => (typeof value === 'bigint' ? value.toString() : value)\n\nexport class MsgLib {\n    /**\n     * The module name.\n     */\n    public readonly module: string\n\n    public readonly routingModule: string\n\n    /**\n     * Creates an instance of the MsgLib class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(private sdk: SDK) {\n        this.module = `${sdk.accounts.msglib_v2}::msglib_v2_router`\n        this.routingModule = `${sdk.accounts.msglib_routing_helper}::version_mirroring`\n    }\n\n    //--------------------entry functions--------------------\n    async createInitPayload(): Promise<aptos.Types.EntryFunctionPayload> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::init`,\n            type_arguments: [],\n            arguments: [],\n        }\n        return Promise.resolve(transaction)\n    }\n\n    async init(signer: aptos.AptosAccount): Promise<aptos.Types.Transaction> {\n        const payload = await this.createInitPayload()\n        return this.sdk.sendAndConfirmTransaction(signer, payload)\n    }\n\n    async createSyncVersionPayload(\n        uaAddress: string,\n        chainId: aptos.BCS.Uint64\n    ): Promise<aptos.Types.EntryFunctionPayload> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.routingModule}::sync`,\n            type_arguments: [],\n            arguments: [uaAddress, chainId],\n        }\n        return Promise.resolve(transaction)\n    }\n\n    async syncVersion(\n        signer: aptos.AptosAccount,\n        uaAddress: string,\n        chainId: aptos.BCS.Uint64\n    ): Promise<aptos.Types.Transaction> {\n        const payload = await this.createSyncVersionPayload(uaAddress, chainId)\n        return this.sdk.sendAndConfirmTransaction(signer, payload)\n    }\n    //--------------------view functions--------------------\n    /**\n     * Checks if the module is initialized.\n     *\n     * @returns {Promise<boolean>} A promise that resolves to true if the module is initialized, false otherwise.\n     */\n    async isInitialize(): Promise<boolean> {\n        try {\n            await this.sdk.client.getAccountResource(`${this.sdk.accounts.msglib_v2}`, `${this.module}::MsgLibConfig`)\n            return true\n        } catch (err: unknown) {\n            if (err instanceof ApiError && err.errorCode === 'resource_not_found') {\n                return false\n            }\n            throw err\n        }\n    }\n\n    async isVersionSynced(uaAddress: string, chainId: aptos.BCS.Uint64): Promise<boolean> {\n        if (this.sdk.accounts.msglib_v2 === undefined) {\n            throw new Error('sdk accounts msglib_v2 is undefined when invoke isVersionSynced')\n        }\n        if (this.sdk.accounts.layerzero_common === undefined) {\n            throw new Error('sdk accounts layerzero_common is undefined when invoke isVersionSynced')\n        }\n        const resource = await this.sdk.client.getAccountResource(\n            this.sdk.accounts.msglib_v2,\n            `${this.module}::MsgLibConfig`\n        )\n        const { send_version } = resource.data as { send_version: { handle: string } }\n        const { handle } = send_version\n        try {\n            const version = await this.sdk.client.getTableItem(handle, {\n                key_type: `${this.module}::ConfigKey`,\n                value_type: `${this.sdk.accounts.layerzero_common}::semver::SemVer`,\n                key: {\n                    ua_address: uaAddress,\n                    chain_id: chainId.toString(),\n                },\n            })\n            return true\n        } catch (err) {\n            if (\n                err instanceof ApiError &&\n                (err.errorCode === 'resource_not_found' || err.errorCode === 'table_item_not_found')\n            ) {\n                return false\n            }\n            throw err\n        }\n    }\n}\n","import * as aptos from 'aptos'\n\nimport { SDK } from '../index'\n\n/**\n * Class representing message library authorization.\n */\nexport class MsgLibAuth {\n    /**\n     * The module name.\n     */\n    public readonly module: string\n\n    /**\n     * The module name string.\n     */\n    public readonly moduleName: string\n\n    /**\n     * Creates an instance of the MsgLibAuth class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(private sdk: SDK) {\n        this.module = `${sdk.accounts.msglib_auth}::msglib_cap`\n        this.moduleName = 'msglib_auth::msglib_cap'\n    }\n\n    /**\n     * Checks if a message library receive address is allowed.\n     *\n     * @param {string} msglibReceive - The message library receive address.\n     * @returns {Promise<boolean>} A promise that resolves to true if allowed, false otherwise.\n     * @throws Will throw an error if sdk accounts msglib_auth is undefined.\n     */\n    async isAllowed(msglibReceive: string): Promise<boolean> {\n        if (this.sdk.accounts.msglib_auth === undefined) {\n            throw new Error('sdk accounts msglib_auth is undefined when invoke isAllowed')\n        }\n        const resource: { data: any } = await this.sdk.client.getAccountResource(\n            this.sdk.accounts.msglib_auth,\n            `${this.module}::GlobalStore`\n        )\n        const msglibAcl = resource.data.msglib_acl.list\n        const lib = aptos.HexString.ensure(msglibReceive).toShortString()\n        return msglibAcl.includes(lib)\n    }\n\n    /**\n     * Creates a payload to deny a message library receive address.\n     *\n     * @param {string} msglibReceive - The message library receive address.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    denyPayload(msglibReceive: string): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::deny`,\n            type_arguments: [],\n            arguments: [msglibReceive],\n        }\n    }\n\n    /**\n     * Creates a payload to allow a message library receive address.\n     *\n     * @param {string} msglibReceive - The message library receive address.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    allowPayload(msglibReceive: string): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::allow`,\n            type_arguments: [],\n            arguments: [msglibReceive],\n        }\n    }\n\n    /**\n     * Allows a message library receive address.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} msglibReceive - The message library receive address.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async allow(signer: aptos.AptosAccount, msglibReceive: string): Promise<aptos.Types.Transaction> {\n        const transaction = this.allowPayload(msglibReceive)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n}\n","import * as aptos from 'aptos'\n\nimport { SDK } from '../index'\nimport { isErrorOfApiError } from '../utils'\n\n/**\n * Class representing the MsgLibConfig module.\n */\nexport class MsgLibConfig {\n    /**\n     * The module path.\n     */\n    public readonly module: string\n\n    /**\n     * The module name.\n     */\n    public readonly moduleName: string\n\n    /**\n     * The semver module path.\n     */\n    public readonly semverModule: string\n\n    /**\n     * Creates an instance of the MsgLibConfig class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(private sdk: SDK) {\n        this.module = `${sdk.accounts.layerzero}::msglib_config`\n        this.moduleName = 'layerzero::msglib_config'\n        this.semverModule = `${sdk.accounts.layerzero}::semver`\n    }\n\n    /**\n     * Gets the default send message library version for a remote chain.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @returns {Promise<{ major: aptos.BCS.Uint64; minor: aptos.BCS.Uint8 }>} A promise that resolves to the version.\n     * @throws Will throw an error if the SDK accounts layerzero is undefined.\n     */\n    async getDefaultSendMsgLib(\n        remoteChainId: aptos.BCS.Uint16\n    ): Promise<{ major: aptos.BCS.Uint64; minor: aptos.BCS.Uint8 }> {\n        if (this.sdk.accounts.layerzero === undefined) {\n            throw new Error('sdk accounts layerzero is undefined when invoke getDefaultSendMsgLib')\n        }\n        const resource = await this.sdk.client.getAccountResource(\n            this.sdk.accounts.layerzero,\n            `${this.module}::MsgLibConfig`\n        )\n        const { send_version } = resource.data as { send_version: { handle: string } }\n        try {\n            const response = await this.sdk.client.getTableItem(send_version.handle, {\n                key_type: 'u64',\n                value_type: `${this.semverModule}::SemVer`,\n                key: remoteChainId.toString(),\n            })\n            return {\n                major: BigInt(response.major),\n                minor: Number(response.minor),\n            }\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return {\n                    major: BigInt(0),\n                    minor: 0,\n                }\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Gets the default receive message library version for a remote chain.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @returns {Promise<{ major: aptos.BCS.Uint64; minor: aptos.BCS.Uint8 }>} A promise that resolves to the version.\n     * @throws Will throw an error if the SDK accounts layerzero is undefined.\n     */\n    async getDefaultReceiveMsgLib(\n        remoteChainId: aptos.BCS.Uint16\n    ): Promise<{ major: aptos.BCS.Uint64; minor: aptos.BCS.Uint8 }> {\n        if (this.sdk.accounts.layerzero === undefined) {\n            throw new Error('sdk accounts layerzero is undefined when invoke getDefaultReceiveMsgLib')\n        }\n        const resource = await this.sdk.client.getAccountResource(\n            this.sdk.accounts.layerzero,\n            `${this.module}::MsgLibConfig`\n        )\n        const { receive_version } = resource.data as { receive_version: { handle: string } }\n        try {\n            const response = await this.sdk.client.getTableItem(receive_version.handle, {\n                key_type: 'u64',\n                value_type: `${this.semverModule}::SemVer`,\n                key: remoteChainId.toString(),\n            })\n            return {\n                major: BigInt(response.major),\n                minor: Number(response.minor),\n            }\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return {\n                    major: BigInt(0),\n                    minor: 0,\n                }\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Creates a payload for setting the default send message library version.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint64} major - The major version.\n     * @param {aptos.BCS.Uint8} minor - The minor version.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setDefaultSendMsgLibPayload(\n        remoteChainId: aptos.BCS.Uint16,\n        major: aptos.BCS.Uint64,\n        minor: aptos.BCS.Uint8\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::set_default_send_msglib`,\n            type_arguments: [],\n            arguments: [remoteChainId.toString(), major.toString(), minor.toString()],\n        }\n    }\n\n    /**\n     * Creates a payload for setting the default receive message library version.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint64} major - The major version.\n     * @param {aptos.BCS.Uint8} minor - The minor version.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setDefaultReceiveMsgLibPayload(\n        remoteChainId: aptos.BCS.Uint16,\n        major: aptos.BCS.Uint64,\n        minor: aptos.BCS.Uint8\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::set_default_receive_msglib`,\n            type_arguments: [],\n            arguments: [remoteChainId.toString(), major.toString(), minor.toString()],\n        }\n    }\n}\n","export * from './msglib_v1_0'\nexport * from './packet_event'\nexport * from './uln'\nexport * from './uln_config'\nexport * from './uln_receive'\nexport * from './uln_signer'\n","import { SDK } from '../../index'\n\n/**\n * Class representing the MsgLibV1_0 module.\n */\nexport class MsgLibV1_0 {\n    /**\n     * The module name.\n     */\n    public readonly module\n\n    /**\n     * Creates an instance of the MsgLibV1_0 class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(private sdk: SDK) {\n        this.module = `${sdk.accounts.layerzero}::msglib_v1_0`\n    }\n}\n","import * as aptos from 'aptos'\nimport BN from 'bn.js'\n\nimport { SDK } from '../../index'\n\n/**\n * Class representing packet events.\n */\nexport class PacketEvent {\n    /**\n     * The module name.\n     */\n    public readonly module: string\n\n    /**\n     * The outbound event type.\n     */\n    public readonly OutboundEventType: string\n\n    /**\n     * The inbound event type.\n     */\n    public readonly InboundEventType: string\n\n    /**\n     * Creates an instance of the PacketEvent class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(private sdk: SDK) {\n        this.module = `${sdk.accounts.layerzero}::packet_event`\n        this.OutboundEventType = `${this.module}::OutboundEvent`\n        this.InboundEventType = `${this.module}::InboundEvent`\n    }\n\n    /**\n     * Returns an array of VersionedEvent objects for inbound events.\n     *\n     * @param {bigint} start - The start index of the events, starting from 0.\n     * @param {number} limit - The maximum number of events to return.\n     * @returns {Promise<aptos.Types.VersionedEvent[]>} An array of VersionedEvent objects.\n     * @throws {Error} If sdk accounts layerzero is undefined.\n     * @example\n     * [\n     *   {\n     *     \"version\": \"2527457\",\n     *     \"guid\": {\n     *       \"creation_number\": \"7\",\n     *       \"account_address\": \"0x54ad3d30af77b60d939ae356e6606de9a4da67583f02b962d2d3f2e481484e90\"\n     *     },\n     *     \"sequence_number\": \"0\",\n     *     \"type\": \"0x54ad3d30af77b60d939ae356e6606de9a4da67583f02b962d2d3f2e481484e90::packet_event::InboundEvent\",\n     *     \"data\": {\n     *       \"packet\": {\n     *         \"dst_address\": \"0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa\",\n     *         \"dst_chain_id\": \"108\",\n     *         \"nonce\": \"1\",\n     *         \"payload\": \"0x00000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4857203756ea4273c43f583acd5b7a72aa168098da3fb9ffe4f6505515aae8fc9b0000000002faf080\",\n     *         \"src_address\": \"0x50002cdfe7ccb0c41f519c6eb0653158d11cd907\",\n     *         \"src_chain_id\": \"101\"\n     *       }\n     *     }\n     *   },\n     *   {\n     *     \"version\": \"2617627\",\n     *     \"guid\": {\n     *       \"creation_number\": \"7\",\n     *       \"account_address\": \"0x54ad3d30af77b60d939ae356e6606de9a4da67583f02b962d2d3f2e481484e90\"\n     *     },\n     *     \"sequence_number\": \"1\",\n     *     \"type\": \"0x54ad3d30af77b60d939ae356e6606de9a4da67583f02b962d2d3f2e481484e90::packet_event::InboundEvent\",\n     *     \"data\": {\n     *       \"packet\": {\n     *         \"dst_address\": \"0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa\",\n     *         \"dst_chain_id\": \"108\",\n     *         \"nonce\": \"2\",\n     *         \"payload\": \"0x00000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7495f9f30a60c7cda8a60937b4281d00d8730596409820bbf59b2674624c76d9b00000000000f4240\",\n     *         \"src_address\": \"0x50002cdfe7ccb0c41f519c6eb0653158d11cd907\",\n     *         \"src_chain_id\": \"101\"\n     *       }\n     *     }\n     *   }\n     * ]\n     */\n    async getInboundEvents(start: bigint, limit: number): Promise<aptos.Types.VersionedEvent[]> {\n        if (this.sdk.accounts.layerzero === undefined) {\n            throw new Error('sdk accounts layerzero is undefined when invoke getInboundEvents')\n        }\n        const events = await this.sdk.client.getEventsByEventHandle(\n            this.sdk.accounts.layerzero,\n            `${this.module}::EventStore`,\n            'inbound_events',\n            { start, limit }\n        )\n        return events.map((event) => event as aptos.Types.VersionedEvent)\n    }\n\n    /**\n     * Returns the count of inbound events.\n     *\n     * @returns {Promise<number>} The count of inbound events.\n     * @throws {Error} If sdk accounts layerzero is undefined.\n     */\n    async getInboundEventCount(): Promise<number> {\n        if (this.sdk.accounts.layerzero === undefined) {\n            throw new Error('sdk accounts layerzero is undefined when invoke getInboundEventCount')\n        }\n        const resource = await this.sdk.client.getAccountResource(\n            this.sdk.accounts.layerzero,\n            `${this.module}::EventStore`\n        )\n        const { inbound_events } = resource.data as { inbound_events: { counter: string } }\n        return new BN(inbound_events.counter).toNumber()\n    }\n\n    /**\n     * Returns an array of VersionedEvent objects for outbound events.\n     *\n     * @param {bigint} start - The start index of the events, starting from 0.\n     * @param {number} limit - The maximum number of events to return.\n     * @returns {Promise<aptos.Types.VersionedEvent[]>} An array of VersionedEvent objects.\n     * @throws {Error} If sdk accounts layerzero is undefined.\n     * @example\n     * [\n     *   {\n     *     version: '3290647',\n     *     guid: {\n     *       creation_number: '8',\n     *       account_address: '0x54ad3d30af77b60d939ae356e6606de9a4da67583f02b962d2d3f2e481484e90'\n     *     },\n     *     sequence_number: '0',\n     *     type: '0x54ad3d30af77b60d939ae356e6606de9a4da67583f02b962d2d3f2e481484e90::packet_event::OutboundEvent',\n     *     data: {\n     *       encoded_packet: '0x0000000000000001006cf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa006f86bb63148d17d445ed5398ef26aa05bf76dd5b59010000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000003a983ffaa79e2d12ef94b50f68346a4b9c653a9a00000000001e848000'\n     *     }\n     *   },\n     *   {\n     *     version: '3308828',\n     *     guid: {\n     *       creation_number: '8',\n     *       account_address: '0x54ad3d30af77b60d939ae356e6606de9a4da67583f02b962d2d3f2e481484e90'\n     *     },\n     *     sequence_number: '1',\n     *     type: '0x54ad3d30af77b60d939ae356e6606de9a4da67583f02b962d2d3f2e481484e90::packet_event::OutboundEvent',\n     *     data: {\n     *       encoded_packet: '0x0000000000000001006cf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa006aa5972eee0c9b5bbb89a5b16d1d65f94c9ef25166010000000000000000000000009702230a8ea53601f5cd2dc00fdbc13d4df4a8c700000000000000000000000015028e41c7ed391674505f6ea1213045571564e4000000000000006400'\n     *     }\n     *   }\n     * ]\n     */\n    async getOutboundEvents(start: bigint, limit: number): Promise<aptos.Types.VersionedEvent[]> {\n        if (this.sdk.accounts.layerzero === undefined) {\n            throw new Error('sdk accounts layerzero is undefined when invoke getOutboundEvents')\n        }\n        const events = await this.sdk.client.getEventsByEventHandle(\n            this.sdk.accounts.layerzero,\n            `${this.module}::EventStore`,\n            'outbound_events',\n            {\n                start,\n                limit,\n            }\n        )\n        return events.map((event) => event as aptos.Types.VersionedEvent)\n    }\n\n    /**\n     * Returns the count of outbound events.\n     *\n     * @returns {Promise<number>} The count of outbound events.\n     * @throws {Error} If sdk accounts layerzero is undefined.\n     */\n    async getOutboundEventCount(): Promise<number> {\n        if (this.sdk.accounts.layerzero === undefined) {\n            throw new Error('sdk accounts layerzero is undefined when invoke getOutboundEventCount')\n        }\n        const resource = await this.sdk.client.getAccountResource(\n            this.sdk.accounts.layerzero,\n            `${this.module}::EventStore`\n        )\n        const { outbound_events } = resource.data as { outbound_events: { counter: string } }\n        return new BN(outbound_events.counter).toNumber()\n    }\n}\n","import * as aptos from 'aptos'\n\nimport { SDK } from '../../index'\nimport { UlnConfigType } from '../../types'\nimport { fullAddress, isErrorOfApiError, isZeroAddress } from '../../utils'\n\nexport class UlnConfig {\n    /**\n     * Oracle type identifier.\n     */\n    TYPE_ORACLE = 0\n\n    /**\n     * Relayer type identifier.\n     */\n    TYPE_RELAYER = 1\n\n    /**\n     * Inbound confirmations type identifier.\n     */\n    TYPE_INBOUND_CONFIRMATIONS = 2\n\n    /**\n     * Outbound confirmations type identifier.\n     */\n    TYPE_OUTBOUND_CONFIRMATIONS = 3\n\n    /**\n     * The module name.\n     */\n    public readonly module\n\n    /**\n     * The module name with namespace.\n     */\n    public readonly moduleName\n\n    /**\n     * Creates an instance of the UlnConfig class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(private sdk: SDK) {\n        this.module = `${sdk.accounts.layerzero}::uln_config`\n        this.moduleName = 'layerzero::uln_config'\n    }\n\n    /**\n     * Creates a payload for setting the default app configuration.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {UlnConfigType} config - The configuration.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setDefaultAppConfigPayload(\n        remoteChainId: aptos.BCS.Uint16,\n        config: UlnConfigType\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::set_default_config`,\n            type_arguments: [],\n            arguments: [\n                remoteChainId,\n                config.oracle,\n                config.relayer,\n                config.inbound_confirmations,\n                config.outbound_confirmations,\n            ],\n        }\n    }\n\n    /**\n     * Sets the default app configuration.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {UlnConfigType} config - The configuration.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setDefaultAppConfig(\n        signer: aptos.AptosAccount,\n        remoteChainId: aptos.BCS.Uint16,\n        config: UlnConfigType\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.setDefaultAppConfigPayload(remoteChainId, config)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Creates a payload for setting the chain address size.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint8} addressSize - The address size.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setChainAddressSizePayload(\n        remoteChainId: aptos.BCS.Uint16,\n        addressSize: aptos.BCS.Uint8\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::set_chain_address_size`,\n            type_arguments: [],\n            arguments: [remoteChainId, addressSize],\n        }\n    }\n\n    /**\n     * Sets the chain address size.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint8} addressSize - The address size.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setChainAddressSize(\n        signer: aptos.AptosAccount,\n        remoteChainId: aptos.BCS.Uint16,\n        addressSize: aptos.BCS.Uint8\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.setChainAddressSizePayload(remoteChainId, addressSize)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the chain address size for a given remote chain ID.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @returns {Promise<aptos.BCS.Uint8>} A promise that resolves to the address size.\n     * @throws {Error} If the SDK accounts layerzero is undefined.\n     */\n    async getChainAddressSize(remoteChainId: aptos.BCS.Uint16): Promise<aptos.BCS.Uint8> {\n        if (this.sdk.accounts.layerzero === undefined) {\n            throw new Error('sdk accounts layerzero is undefined when invoke getChainAddressSize')\n        }\n        const resource = await this.sdk.client.getAccountResource(\n            this.sdk.accounts.layerzero,\n            `${this.module}::ChainConfig`\n        )\n        const { chain_address_size } = resource.data as { chain_address_size: { handle: string } }\n        const tableHandle = chain_address_size.handle\n        try {\n            const response = await this.sdk.client.getTableItem(tableHandle, {\n                key_type: 'u64',\n                value_type: 'u64',\n                key: remoteChainId.toString(),\n            })\n            return Number(response)\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return 0\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Gets the default app configuration for a given remote chain ID.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {object} [query] - Optional query parameters.\n     * @param {bigint | number} [query.ledgerVersion] - The ledger version.\n     * @returns {Promise<UlnConfigType>} A promise that resolves to the configuration.\n     * @throws {Error} If the SDK accounts layerzero is undefined.\n     */\n    async getDefaultAppConfig(\n        remoteChainId: aptos.BCS.Uint16,\n        query?: {\n            ledgerVersion?: bigint | number\n        }\n    ): Promise<UlnConfigType> {\n        if (this.sdk.accounts.layerzero === undefined) {\n            throw new Error('sdk accounts layerzero is undefined when invoke getDefaultAppConfig')\n        }\n        const resource = await this.sdk.client.getAccountResource(\n            this.sdk.accounts.layerzero,\n            `${this.module}::DefaultUlnConfig`,\n            query\n        )\n        const { config } = resource.data as { config: { handle: string } }\n        try {\n            return await this.sdk.client.getTableItem(\n                config.handle,\n                {\n                    key_type: 'u64',\n                    value_type: `${this.module}::UlnConfig`,\n                    key: remoteChainId.toString(),\n                },\n                query\n            )\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return {\n                    inbound_confirmations: BigInt(0),\n                    oracle: '',\n                    outbound_confirmations: BigInt(0),\n                    relayer: '',\n                }\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Gets the app configuration for a given user address and remote chain ID.\n     *\n     * @param {aptos.MaybeHexString} uaAddress - The user address.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {object} [query] - Optional query parameters.\n     * @param {bigint | number} [query.ledgerVersion] - The ledger version.\n     * @returns {Promise<UlnConfigType>} A promise that resolves to the configuration.\n     * @throws {Error} If the SDK accounts layerzero is undefined.\n     */\n    async getAppConfig(\n        uaAddress: aptos.MaybeHexString,\n        remoteChainId: aptos.BCS.Uint16,\n        query?: {\n            ledgerVersion?: bigint | number\n        }\n    ): Promise<UlnConfigType> {\n        const defaultConfig = await this.getDefaultAppConfig(remoteChainId, query)\n        console.log(`defaultConfig`, defaultConfig)\n\n        let mergedConfig: UlnConfigType = {\n            ...defaultConfig,\n        }\n        // console.log(`mergedConfig`, mergedConfig)\n        try {\n            if (this.sdk.accounts.layerzero === undefined) {\n                throw new Error('sdk accounts layerzero is undefined when invoke getAppConfig')\n            }\n            const resource = await this.sdk.client.getAccountResource(\n                this.sdk.accounts.layerzero,\n                `${this.module}::UaUlnConfig`,\n                query\n            )\n            const { config } = resource.data as { config: { handle: string } }\n            const Config = await this.sdk.client.getTableItem(\n                config.handle,\n                {\n                    key_type: `${this.module}::UaConfigKey`,\n                    value_type: `${this.module}::UlnConfig`,\n                    key: {\n                        ua_address: aptos.HexString.ensure(uaAddress).toString(),\n                        chain_id: remoteChainId.toString(),\n                    },\n                },\n                query\n            )\n\n            console.log(`Config: `, Config)\n            mergedConfig = this.mergeConfig(Config, defaultConfig)\n        } catch (e) {\n            if (!isErrorOfApiError(e, 404)) {\n                throw e\n            }\n        }\n\n        //address type in move are reutrned as short string\n        mergedConfig.oracle = fullAddress(mergedConfig.oracle).toString()\n        mergedConfig.relayer = fullAddress(mergedConfig.relayer).toString()\n        mergedConfig.inbound_confirmations = BigInt(mergedConfig.inbound_confirmations)\n        mergedConfig.outbound_confirmations = BigInt(mergedConfig.outbound_confirmations)\n        return mergedConfig\n    }\n\n    /**\n     * Merges the given configuration with the default configuration.\n     *\n     * @param {UlnConfigType} config - The configuration.\n     * @param {UlnConfigType} defaultConfig - The default configuration.\n     * @returns {UlnConfigType} The merged configuration.\n     */\n    private mergeConfig(config: UlnConfigType, defaultConfig: UlnConfigType): UlnConfigType {\n        const mergedConfig = { ...defaultConfig }\n        if (!isZeroAddress(config.oracle)) {\n            mergedConfig.oracle = config.oracle\n        }\n        if (!isZeroAddress(config.relayer)) {\n            mergedConfig.relayer = config.relayer\n        }\n        if (config.inbound_confirmations > 0) {\n            mergedConfig.inbound_confirmations = config.inbound_confirmations\n        }\n        if (config.outbound_confirmations > 0) {\n            mergedConfig.outbound_confirmations = config.outbound_confirmations\n        }\n\n        return mergedConfig\n    }\n\n    /**\n     * Quotes the fee for a given user address, destination chain ID, and payload size.\n     *\n     * @param {aptos.MaybeHexString} uaAddress - The user address.\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {number} payloadSize - The payload size.\n     * @param {object} [query] - Optional query parameters.\n     * @param {bigint | number} [query.ledgerVersion] - The ledger version.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the fee.\n     * @throws {Error} If the SDK accounts layerzero is undefined.\n     */\n    async quoteFee(\n        uaAddress: aptos.MaybeHexString,\n        dstChainId: aptos.BCS.Uint16,\n        payloadSize: number,\n        query?: {\n            ledgerVersion?: bigint | number\n        }\n    ): Promise<aptos.BCS.Uint64> {\n        const config = await this.getAppConfig(uaAddress, dstChainId, query)\n\n        const oracleFee = await this.sdk.LayerzeroModule.Uln.Signer.getFee(config.oracle, dstChainId, query)\n        const relayerFee = await this.sdk.LayerzeroModule.Uln.Signer.getFee(config.relayer, dstChainId, query)\n\n        if (this.sdk.accounts.layerzero === undefined) {\n            throw new Error('sdk accounts layerzero is undefined when invoke quoteFee')\n        }\n        const treasuryConfigResource = await this.sdk.client.getAccountResource(\n            this.sdk.accounts.layerzero,\n            `${this.sdk.LayerzeroModule.Uln.MsgLibV1.module}::GlobalStore`,\n            query\n        )\n        console.log(`treasuryConfigResource`, treasuryConfigResource.data)\n        const { treasury_fee_bps: treasuryFeeBps } = treasuryConfigResource.data as { treasury_fee_bps: string }\n\n        // lz fee\n        let totalFee = relayerFee.base_fee + relayerFee.fee_per_byte * BigInt(payloadSize)\n        totalFee += oracleFee.base_fee + oracleFee.fee_per_byte * BigInt(payloadSize)\n        totalFee += (BigInt(treasuryFeeBps) * totalFee) / BigInt(10000)\n\n        return totalFee\n    }\n}\n","import * as aptos from 'aptos'\nimport { ApiError, HexString } from 'aptos'\n\nimport { SDK } from '../../index'\nimport { MultipleSignFunc } from '../../utils'\n\n/**\n * Class representing the ULN Receive module.\n */\nexport class UlnReceive {\n    /**\n     * The module name.\n     */\n    public readonly module\n\n    /**\n     * Creates an instance of the UlnReceive class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(private sdk: SDK) {\n        this.module = `${sdk.accounts.layerzero}::uln_receive`\n    }\n\n    /**\n     * Initializes the module.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async initialize(signer: aptos.AptosAccount): Promise<aptos.Types.Transaction> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::init`,\n            type_arguments: [],\n            arguments: [],\n        }\n\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Checks if the module is initialized.\n     *\n     * @returns {Promise<boolean>} A promise that resolves to true if the module is initialized, false otherwise.\n     */\n    async isInitialize(): Promise<boolean> {\n        try {\n            await this.sdk.client.getAccountResource(this.sdk.accounts.layerzero!, `${this.module}::CapStore`)\n            return true\n        } catch (err: unknown) {\n            if (err instanceof ApiError && err.errorCode === 'resource_not_found') {\n                return false\n            }\n            throw err\n        }\n    }\n\n    /**\n     * Gets the payload for the oracle propose transaction.\n     *\n     * @param {Uint8Array} hash - The hash.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} confirmations - The number of confirmations.\n     * @returns {Promise<aptos.Types.EntryFunctionPayload>} A promise that resolves to the transaction payload.\n     */\n    async getOracleProposePayload(\n        hash: Uint8Array,\n        confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.Types.EntryFunctionPayload> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::oracle_propose`,\n            type_arguments: [],\n            arguments: [Array.from(hash), confirmations],\n        }\n        return transaction\n    }\n\n    /**\n     * Proposes an oracle transaction.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} hash - The hash.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} confirmations - The number of confirmations.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async oraclePropose(\n        signer: aptos.AptosAccount,\n        hash: string,\n        confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = await this.getOracleProposePayload(HexString.ensure(hash).toUint8Array(), confirmations)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the proposal for a given oracle and hash.\n     *\n     * @param {aptos.MaybeHexString} oracle - The oracle address.\n     * @param {string} hash - The hash.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the proposal.\n     */\n    async getProposal(oracle: aptos.MaybeHexString, hash: string): Promise<aptos.BCS.Uint64> {\n        if (this.sdk.accounts.layerzero === undefined) {\n            throw new Error('sdk accounts layerzero is undefined when invoke getProposal')\n        }\n        const resource = await this.sdk.client.getAccountResource(\n            this.sdk.accounts.layerzero,\n            `${this.module}::ProposalStore`\n        )\n        const { proposals } = resource.data as { proposals: { handle: string } }\n        const response = await this.sdk.client.getTableItem(proposals.handle, {\n            key_type: `${this.module}::ProposalKey`,\n            value_type: 'u64',\n            key: {\n                oracle,\n                hash,\n            },\n        })\n        return BigInt(response)\n    }\n\n    /**\n     * Gets the payload for the relayer verify transaction.\n     *\n     * @param {Uint8Array} dstAddress - The destination address.\n     * @param {Uint8Array} packetBytes - The packet bytes.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} confirmations - The number of confirmations.\n     * @returns {Promise<aptos.Types.EntryFunctionPayload>} A promise that resolves to the transaction payload.\n     */\n    async getRelayerVerifyPayload(\n        dstAddress: Uint8Array,\n        packetBytes: Uint8Array,\n        confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.Types.EntryFunctionPayload> {\n        const uaTypeInfo = await this.sdk.LayerzeroModule.Endpoint.getUATypeInfo(\n            Buffer.from(dstAddress).toString('hex')\n        )\n\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::relayer_verify`,\n            type_arguments: [uaTypeInfo.type],\n            arguments: [Array.from(packetBytes), confirmations],\n        }\n        return transaction\n    }\n\n    /**\n     * Verifies a relayer transaction.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {Uint8Array} dstAddress - The destination address.\n     * @param {Uint8Array} packetBytes - The packet bytes.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} confirmations - The number of confirmations.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async relayerVerify(\n        signer: aptos.AptosAccount,\n        dstAddress: Uint8Array,\n        packetBytes: Uint8Array,\n        confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = await this.getRelayerVerifyPayload(dstAddress, packetBytes, confirmations)\n\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the payload for the oracle propose transaction with multisig.\n     *\n     * @param {string} multisigAccountAddress - The multisig account address.\n     * @param {Buffer} hash - The hash.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} confirmations - The number of confirmations.\n     * @returns {Promise<aptos.TxnBuilderTypes.TransactionPayload>} A promise that resolves to the transaction payload.\n     */\n    async oracleProposePayloadMS(\n        multisigAccountAddress: string,\n        hash: Buffer,\n        confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.TxnBuilderTypes.TransactionPayload> {\n        const serializer = new aptos.BCS.Serializer()\n        serializer.serializeBytes(Uint8Array.from(hash))\n        const payloadEntryFunction = new aptos.TxnBuilderTypes.TransactionPayloadEntryFunction(\n            aptos.TxnBuilderTypes.EntryFunction.natural(\n                this.module,\n                'oracle_propose',\n                [],\n                [serializer.getBytes(), aptos.BCS.bcsSerializeUint64(confirmations)]\n            )\n        )\n        return payloadEntryFunction\n    }\n\n    /**\n     * Gets the raw transaction for the oracle propose transaction with multisig.\n     *\n     * @param {string} multisigAccountAddress - The multisig account address.\n     * @param {Buffer} hash - The hash.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} confirmations - The number of confirmations.\n     * @returns {Promise<aptos.TxnBuilderTypes.RawTransaction>} A promise that resolves to the raw transaction.\n     */\n    async oracleProposeTxn(\n        multisigAccountAddress: string,\n        hash: Buffer,\n        confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.TxnBuilderTypes.RawTransaction> {\n        const payloadEntryFunction = await this.oracleProposePayloadMS(multisigAccountAddress, hash, confirmations)\n\n        const [{ sequence_number: sequenceNumber }, chainId] = await Promise.all([\n            this.sdk.client.getAccount(multisigAccountAddress),\n            this.sdk.client.getChainId(),\n        ])\n\n        return new aptos.TxnBuilderTypes.RawTransaction(\n            aptos.TxnBuilderTypes.AccountAddress.fromHex(multisigAccountAddress),\n            BigInt(sequenceNumber),\n            payloadEntryFunction,\n            BigInt(1000),\n            BigInt(1),\n            BigInt(Math.floor(Date.now() / 1000) + 10),\n            new aptos.TxnBuilderTypes.ChainId(chainId)\n        )\n    }\n\n    /**\n     * Gets the signing message for submitting a hash.\n     *\n     * @param {aptos.TxnBuilderTypes.RawTransaction} txn - The raw transaction.\n     * @returns {aptos.TxnBuilderTypes.SigningMessage} The signing message.\n     */\n    getSubmitHashSigningMessage(txn: aptos.TxnBuilderTypes.RawTransaction): aptos.TxnBuilderTypes.SigningMessage {\n        return aptos.TransactionBuilderMultiEd25519.getSigningMessage(txn)\n    }\n\n    /**\n     * Proposes an oracle transaction with multisig.\n     *\n     * @param {string} multisigAccountAddress - The multisig account address.\n     * @param {aptos.TxnBuilderTypes.MultiEd25519PublicKey} multisigAccountPubkey - The multisig account public key.\n     * @param {MultipleSignFunc} signFunc - The sign function.\n     * @param {Buffer} hash - The hash.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} confirmations - The number of confirmations.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async oracleProposeMS(\n        multisigAccountAddress: string,\n        multisigAccountPubkey: aptos.TxnBuilderTypes.MultiEd25519PublicKey,\n        signFunc: MultipleSignFunc,\n        hash: Buffer,\n        confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.Types.Transaction> {\n        const payload = await this.oracleProposePayloadMS(multisigAccountAddress, hash, confirmations)\n        return this.sdk.sendAndConfirmMultiSigTransaction(\n            this.sdk.client,\n            multisigAccountAddress,\n            multisigAccountPubkey,\n            payload,\n            signFunc\n        )\n    }\n}\n","import * as aptos from 'aptos'\n\nimport { SDK } from '../../index'\nimport { UlnSignerFee } from '../../types'\nimport { MultipleSignFunc, isErrorOfApiError } from '../../utils'\n\n/**\n * Class representing a ULN Signer.\n */\nexport class UlnSigner {\n    /**\n     * The module name.\n     */\n    public readonly module: string\n\n    /**\n     * The module name with namespace.\n     */\n    public readonly moduleName: string\n\n    /**\n     * Creates an instance of the UlnSigner class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(private sdk: SDK) {\n        this.module = `${sdk.accounts.layerzero}::uln_signer`\n        this.moduleName = 'layerzero::uln_signer'\n    }\n\n    /**\n     * Creates a transaction payload for registering.\n     *\n     * @returns {Promise<aptos.TxnBuilderTypes.TransactionPayload>} The transaction payload.\n     */\n    async register_TransactionPayload(): Promise<aptos.TxnBuilderTypes.TransactionPayload> {\n        return new aptos.TxnBuilderTypes.TransactionPayloadEntryFunction(\n            aptos.TxnBuilderTypes.EntryFunction.natural(this.module, 'register', [], [])\n        )\n    }\n\n    /**\n     * Registers a multisig account.\n     *\n     * @param {string} multisigAccountAddress - The multisig account address.\n     * @param {aptos.TxnBuilderTypes.MultiEd25519PublicKey} multisigAccountPubkey - The multisig account public key.\n     * @param {MultipleSignFunc} signFunc - The sign function.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction.\n     */\n    async registerMS(\n        multisigAccountAddress: string,\n        multisigAccountPubkey: aptos.TxnBuilderTypes.MultiEd25519PublicKey,\n        signFunc: MultipleSignFunc\n    ): Promise<aptos.Types.Transaction> {\n        const payload = await this.register_TransactionPayload()\n        return this.sdk.sendAndConfirmMultiSigTransaction(\n            this.sdk.client,\n            multisigAccountAddress,\n            multisigAccountPubkey,\n            payload,\n            signFunc\n        )\n    }\n\n    /**\n     * Checks if an address is registered.\n     *\n     * @param {aptos.MaybeHexString} address - The address to check.\n     * @returns {Promise<boolean>} True if the address is registered, false otherwise.\n     */\n    async isRegistered(address: aptos.MaybeHexString): Promise<boolean> {\n        try {\n            await this.sdk.client.getAccountResource(address, `${this.module}::Config`)\n            return true\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return false\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Creates a payload for registering.\n     *\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    registerPayload(): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::register`,\n            type_arguments: [],\n            arguments: [],\n        }\n    }\n\n    /**\n     * Registers an account.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction.\n     */\n    async register(signer: aptos.AptosAccount): Promise<aptos.Types.Transaction> {\n        const transaction = this.registerPayload()\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Creates a transaction payload for setting a fee.\n     *\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} baseFee - The base fee.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} feePerByte - The fee per byte.\n     * @returns {Promise<aptos.TxnBuilderTypes.TransactionPayload>} The transaction payload.\n     */\n    async getSetFee_TransactionPayload(\n        dstChainId: aptos.BCS.Uint16,\n        baseFee: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        feePerByte: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.TxnBuilderTypes.TransactionPayload> {\n        return new aptos.TxnBuilderTypes.TransactionPayloadEntryFunction(\n            aptos.TxnBuilderTypes.EntryFunction.natural(\n                this.module,\n                'set_fee',\n                [],\n                [\n                    aptos.BCS.bcsSerializeUint64(dstChainId),\n                    aptos.BCS.bcsSerializeUint64(baseFee),\n                    aptos.BCS.bcsSerializeUint64(feePerByte),\n                ]\n            )\n        )\n    }\n\n    /**\n     * Creates a payload for setting a fee.\n     *\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} baseFee - The base fee.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} feePerByte - The fee per byte.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setFeePayload(\n        dstChainId: aptos.BCS.Uint16,\n        baseFee: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        feePerByte: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::set_fee`,\n            type_arguments: [],\n            arguments: [dstChainId, baseFee, feePerByte],\n        }\n    }\n\n    /**\n     * Sets a fee.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} baseFee - The base fee.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} feePerByte - The fee per byte.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction.\n     */\n    async setFee(\n        signer: aptos.AptosAccount,\n        dstChainId: aptos.BCS.Uint16,\n        baseFee: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        feePerByte: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.setFeePayload(dstChainId, baseFee, feePerByte)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Sets a fee for a multisig account.\n     *\n     * @param {string} multisigAccountAddress - The multisig account address.\n     * @param {aptos.TxnBuilderTypes.MultiEd25519PublicKey} multisigAccountPubkey - The multisig account public key.\n     * @param {MultipleSignFunc} signFunc - The sign function.\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} baseFee - The base fee.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} feePerByte - The fee per byte.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction.\n     */\n    async setFeeMS(\n        multisigAccountAddress: string,\n        multisigAccountPubkey: aptos.TxnBuilderTypes.MultiEd25519PublicKey,\n        signFunc: MultipleSignFunc,\n        dstChainId: aptos.BCS.Uint16,\n        baseFee: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        feePerByte: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.Types.Transaction> {\n        const payload = await this.getSetFee_TransactionPayload(dstChainId, baseFee, feePerByte)\n        return this.sdk.sendAndConfirmMultiSigTransaction(\n            this.sdk.client,\n            multisigAccountAddress,\n            multisigAccountPubkey,\n            payload,\n            signFunc\n        )\n    }\n\n    /**\n     * Gets the fee for a given address and destination chain ID.\n     *\n     * @param {aptos.MaybeHexString} address - The address.\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {Object} [query] - The query parameters.\n     * @param {bigint | number} [query.ledgerVersion] - The ledger version.\n     * @returns {Promise<UlnSignerFee>} The fee.\n     */\n    public async getFee(\n        address: aptos.MaybeHexString,\n        dstChainId: aptos.BCS.Uint16,\n        query?: {\n            ledgerVersion?: bigint | number\n        }\n    ): Promise<UlnSignerFee> {\n        try {\n            const resource = await this.sdk.client.getAccountResource(address, `${this.module}::Config`, query)\n            const { fees } = resource.data as { fees: { handle: string } }\n            const response = await this.sdk.client.getTableItem(\n                fees.handle,\n                {\n                    key_type: `u64`,\n                    value_type: `${this.module}::Fee`,\n                    key: dstChainId.toString(),\n                },\n                query\n            )\n            return {\n                base_fee: BigInt(response.base_fee),\n                fee_per_byte: BigInt(response.fee_per_byte),\n            }\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return {\n                    base_fee: BigInt(0),\n                    fee_per_byte: BigInt(0),\n                }\n            }\n            throw e\n        }\n    }\n}\n","import { MsgLibV1_0 } from './msglib_v1_0'\nimport { PacketEvent } from './packet_event'\nimport { UlnConfig } from './uln_config'\nimport { UlnReceive } from './uln_receive'\nimport { UlnSigner } from './uln_signer'\nimport { SDK } from '../../index'\n\n/**\n * Class representing the ULN (Universal Layer Network).\n */\nexport class Uln {\n    /**\n     * Instance of UlnReceive.\n     */\n    Receive: UlnReceive\n\n    /**\n     * Instance of UlnSigner.\n     */\n    Signer: UlnSigner\n\n    /**\n     * Instance of UlnConfig.\n     */\n    Config: UlnConfig\n\n    /**\n     * Instance of MsgLibV1_0.\n     */\n    MsgLibV1: MsgLibV1_0\n\n    /**\n     * Instance of PacketEvent.\n     */\n    PacketEvent: PacketEvent\n\n    /**\n     * Creates an instance of the Uln class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(sdk: SDK) {\n        this.Receive = new UlnReceive(sdk)\n        this.Signer = new UlnSigner(sdk)\n        this.Config = new UlnConfig(sdk)\n        this.MsgLibV1 = new MsgLibV1_0(sdk)\n        this.PacketEvent = new PacketEvent(sdk)\n    }\n}\n","import * as aptos from 'aptos'\n\nimport { types } from '@layerzerolabs/lz-movevm-sdk-v2'\n\nimport { SDK } from '../..'\n\nexport class Uln301 {\n    /**\n     * The module name.\n     */\n    public readonly module\n\n    public readonly adminModule\n\n    public readonly routerModule\n\n    /**\n     * Creates an instance of the UlnReceive class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(private sdk: SDK) {\n        this.module = `${sdk.accounts.uln_301}::msglib`\n        this.adminModule = `${sdk.accounts.uln_301}::admin`\n        this.routerModule = `${sdk.accounts.uln_301}::router_calls`\n    }\n\n    private emptyUlnConfig: types.UlnConfig = {\n        confirmations: BigInt(0),\n        optionalDVNThreshold: 0,\n        requiredDVNs: [],\n        optionalDVNs: [],\n        useDefaultForConfirmations: false,\n        useDefaultForRequiredDVNs: false,\n        useDefaultForOptionalDVNs: false,\n    }\n\n    private emptyExecutorConfig: types.ExecutorConfig = {\n        maxMessageSize: 0,\n        executorAddress: '',\n    }\n\n    //--------------------entry functions--------------------\n\n    async createInitializePayload(eid: aptos.BCS.Uint32): Promise<aptos.Types.EntryFunctionPayload> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.adminModule}::initialize`,\n            type_arguments: [],\n            arguments: [eid],\n        }\n        return Promise.resolve(transaction)\n    }\n\n    async isInitialized(): Promise<boolean> {\n        const resource = await this.sdk.client.getAccountResource(\n            `${this.sdk.accounts.uln_301}`,\n            `${this.sdk.accounts.uln_301}::uln_301_store::Store`\n        )\n        const { eid: storeEid } = resource.data as { eid: aptos.BCS.Uint32 }\n        return storeEid !== 0\n    }\n\n    async createSetDefaultUlnSendConfigPayload(\n        dstEid: aptos.BCS.Uint32,\n        ulnConfig: types.UlnConfig\n    ): Promise<aptos.Types.EntryFunctionPayload> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.adminModule}::set_default_uln_send_config`,\n            type_arguments: [],\n            arguments: [\n                dstEid,\n                ulnConfig.confirmations,\n                ulnConfig.optionalDVNThreshold,\n                ulnConfig.requiredDVNs,\n                ulnConfig.optionalDVNs,\n            ],\n        }\n        return Promise.resolve(transaction)\n    }\n\n    async setDefaultUlnSendConfig(\n        signer: aptos.AptosAccount,\n        dstEid: aptos.BCS.Uint32,\n        ulnConfig: types.UlnConfig\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = await this.createSetDefaultUlnSendConfigPayload(dstEid, ulnConfig)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    async createSetDefaultUlnReceiveConfigPayload(\n        srcEid: aptos.BCS.Uint32,\n        ulnConfig: types.UlnConfig\n    ): Promise<aptos.Types.EntryFunctionPayload> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.adminModule}::set_default_uln_receive_config`,\n            type_arguments: [],\n            arguments: [\n                srcEid,\n                ulnConfig.confirmations,\n                ulnConfig.optionalDVNThreshold,\n                ulnConfig.requiredDVNs,\n                ulnConfig.optionalDVNs,\n            ],\n        }\n        return Promise.resolve(transaction)\n    }\n\n    async setDefaultUlnReceiveConfig(\n        signer: aptos.AptosAccount,\n        srcEid: aptos.BCS.Uint32,\n        ulnConfig: types.UlnConfig\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = await this.createSetDefaultUlnReceiveConfigPayload(srcEid, ulnConfig)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    async createSetDefaultExecutorConfigPayload(\n        eid: aptos.BCS.Uint32,\n        executorConfig: types.ExecutorConfig\n    ): Promise<aptos.Types.EntryFunctionPayload> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.adminModule}::set_default_executor_config`,\n            type_arguments: [],\n            arguments: [eid, executorConfig.maxMessageSize, executorConfig.executorAddress],\n        }\n        return Promise.resolve(transaction)\n    }\n\n    async setDefaultExecutorConfig(\n        signer: aptos.AptosAccount,\n        eid: aptos.BCS.Uint32,\n        executorConfig: types.ExecutorConfig\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = await this.createSetDefaultExecutorConfigPayload(eid, executorConfig)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    async createSetWorkerConfigForFeeLibRoutingOptInPayload(optIn: boolean): Promise<aptos.Types.EntryFunctionPayload> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::set_worker_config_for_fee_lib_routing_opt_in`,\n            type_arguments: [],\n            arguments: [optIn],\n        }\n        return Promise.resolve(transaction)\n    }\n\n    async setWorkerConfigForFeeLibRoutingOptIn(\n        signer: aptos.AptosAccount,\n        optIn: boolean\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = await this.createSetWorkerConfigForFeeLibRoutingOptInPayload(optIn)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    //--------------------view functions--------------------\n    async getTreasury(): Promise<aptos.MaybeHexString> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::get_treasury`,\n            type_arguments: [],\n            arguments: [],\n        }\n        const ret = await this.sdk.client.view(payload)\n        return ret[0] as aptos.MaybeHexString\n    }\n\n    async getDefaultUlnSendConfig(dstEid: aptos.BCS.Uint32): Promise<types.UlnConfig> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::get_default_uln_send_config`,\n            type_arguments: [],\n            arguments: [dstEid],\n        }\n        const view = await this.sdk.viewFunction(payload)\n        if (view.length === 0) {\n            return this.emptyUlnConfig\n        }\n        return this.parseUlnConfig(view[0] as types.UlnConfigResponse)\n    }\n\n    async getDefaultUlnReceiveConfig(srcEid: aptos.BCS.Uint32): Promise<types.UlnConfig> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::get_default_uln_receive_config`,\n            type_arguments: [],\n            arguments: [srcEid],\n        }\n        const view = await this.sdk.viewFunction(payload)\n        if (view.length === 0) {\n            return this.emptyUlnConfig\n        }\n        return this.parseUlnConfig(view[0] as types.UlnConfigResponse)\n    }\n\n    async getDefaultExecutorConfig(eid: aptos.BCS.Uint32): Promise<types.ExecutorConfig> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::get_default_executor_config`,\n            type_arguments: [],\n            arguments: [eid],\n        }\n        const view = await this.sdk.viewFunction(payload)\n        if (view.length === 0) {\n            return this.emptyExecutorConfig\n        }\n        return this.parseExecutorConfig(view[0] as types.ExecutorConfigResponse)\n    }\n\n    async getAppSendConfig(oappAddress: string, dstEid: aptos.BCS.Uint32): Promise<types.UlnConfig> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::get_app_send_config`,\n            type_arguments: [],\n            arguments: [oappAddress, dstEid],\n        }\n        const view = await this.sdk.viewFunction(payload)\n        if (view.length === 0) {\n            return this.emptyUlnConfig\n        }\n        return this.parseUlnConfig(view[0] as types.UlnConfigResponse)\n    }\n\n    async getAppReceiveConfig(oappAddress: string, srcEid: aptos.BCS.Uint32): Promise<types.UlnConfig> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::get_app_receive_config`,\n            type_arguments: [],\n            arguments: [oappAddress, srcEid],\n        }\n        const view = await this.sdk.viewFunction(payload)\n        if (view.length === 0) {\n            return this.emptyUlnConfig\n        }\n        return this.parseUlnConfig(view[0] as types.UlnConfigResponse)\n    }\n\n    async getAppExecutorConfig(oappAddress: string, eid: aptos.BCS.Uint32): Promise<types.ExecutorConfig> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::get_app_executor_config`,\n            type_arguments: [],\n            arguments: [oappAddress, eid],\n        }\n        const view = await this.sdk.viewFunction(payload)\n        if (view.length === 0) {\n            return this.emptyExecutorConfig\n        }\n        return this.parseExecutorConfig(view[0] as types.ExecutorConfigResponse)\n    }\n\n    async workerConfigForFeeLibRoutingOptIn(): Promise<boolean> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::worker_config_for_fee_lib_routing_opt_in`,\n            type_arguments: [],\n            arguments: [],\n        }\n        const ret = await this.sdk.client.view(payload)\n        return ret[0] as boolean\n    }\n\n    async verifiable(packetHeader: string, payloadHash: string): Promise<boolean> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::verifiable`,\n            type_arguments: [],\n            arguments: [packetHeader, payloadHash],\n        }\n        const ret = await this.sdk.client.view(payload)\n        return ret[0] as boolean\n    }\n\n    async getVerificationConfirmations(\n        packetHeaderHash: string,\n        payloadHash: string,\n        dvnAddress: string\n    ): Promise<aptos.BCS.Uint64> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::get_verification_confirmations`,\n            type_arguments: [],\n            arguments: [packetHeaderHash, payloadHash, dvnAddress],\n        }\n        const ret = await this.sdk.client.view(payload)\n        return ret[0] as aptos.BCS.Uint64\n    }\n\n    async version(): Promise<[aptos.BCS.Uint64, aptos.BCS.Uint64, aptos.BCS.Uint64]> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::version`,\n            type_arguments: [],\n            arguments: [],\n        }\n        const ret = await this.sdk.client.view(payload)\n        return ret[0] as [aptos.BCS.Uint64, aptos.BCS.Uint64, aptos.BCS.Uint64]\n    }\n\n    async getUaConfig(\n        uaAddress: string,\n        chainId: aptos.BCS.Uint64,\n        configType: types.ConfigType\n    ): Promise<types.UlnConfig> {\n        // todo: Currently, this function is only used in the worker SDK, and there is no need to support fetching the executor config.\n        if (configType === types.ConfigType.Executor) {\n            throw new Error('Executor config is not supported')\n        }\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.routerModule}::get_ua_config`,\n            type_arguments: [],\n            arguments: [uaAddress, chainId.toString(), configType],\n        }\n        const view = await this.sdk.viewFunction(payload)\n        return types.deserializeUlnConfig(view[0] as Uint8Array)\n    }\n\n    /**\n     * Parses the ULN configuration response.\n     *\n     * @param {UlnConfigResponse} ulnConfigResponse - The ULN configuration response.\n     * @returns {UlnConfig} The parsed ULN configuration.\n     */\n    private parseUlnConfig(ulnConfigResponse: types.UlnConfigResponse): types.UlnConfig {\n        return {\n            confirmations: ulnConfigResponse.confirmations,\n            optionalDVNThreshold: ulnConfigResponse.optional_dvn_threshold,\n            requiredDVNs: ulnConfigResponse.required_dvns,\n            optionalDVNs: ulnConfigResponse.optional_dvns,\n            useDefaultForConfirmations: ulnConfigResponse.use_default_for_confirmations,\n            useDefaultForOptionalDVNs: ulnConfigResponse.use_default_for_optional_dvns,\n            useDefaultForRequiredDVNs: ulnConfigResponse.use_default_for_required_dvns,\n        } satisfies types.UlnConfig\n    }\n\n    /**\n     * Parses the executor configuration response.\n     *\n     * @param {ExecutorConfigResponse} executorConfigResponse - The executor configuration response.\n     * @returns {ExecutorConfig} The parsed executor configuration.\n     */\n    private parseExecutorConfig(executorConfigResponse: types.ExecutorConfigResponse): types.ExecutorConfig {\n        return {\n            maxMessageSize: executorConfigResponse.max_message_size,\n            executorAddress: executorConfigResponse.executor_address,\n        } satisfies types.ExecutorConfig\n    }\n}\n","import * as aptos from 'aptos'\nimport { ApiError } from 'aptos'\n\nimport { SDK } from '../..'\nimport { isErrorOfApiError } from '../../utils'\n\nexport class Uln301Receiver {\n    /**\n     * The module name.\n     */\n    public readonly module\n\n    /**\n     * Creates an instance of the UlnReceive class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(private sdk: SDK) {\n        this.module = `${sdk.accounts.uln_301_receiver}::uln_301_receive_helper`\n    }\n\n    //--------------------entry functions--------------------\n    async createSetChainAddressSizePayload(\n        eid: aptos.BCS.Uint32,\n        size: aptos.BCS.Uint64\n    ): Promise<aptos.Types.EntryFunctionPayload> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::set_address_size`,\n            type_arguments: [],\n            arguments: [eid, size],\n        }\n        return Promise.resolve(transaction)\n    }\n\n    async setChainAddressSize(\n        signer: aptos.AptosAccount,\n        eid: aptos.BCS.Uint32,\n        size: aptos.BCS.Uint64\n    ): Promise<aptos.Types.Transaction> {\n        const payload = await this.createSetChainAddressSizePayload(eid, size)\n        return this.sdk.sendAndConfirmTransaction(signer, payload)\n    }\n\n    async createCommitVerificationPayload(\n        uaType: string,\n        rawPacketBytes: Uint8Array\n    ): Promise<aptos.Types.EntryFunctionPayload> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::commit_verification`,\n            type_arguments: [uaType],\n            arguments: [rawPacketBytes],\n        }\n        return Promise.resolve(transaction)\n    }\n\n    async commitVerification(\n        signer: aptos.AptosAccount,\n        uaType: string,\n        rawPacketBytes: Uint8Array\n    ): Promise<aptos.Types.Transaction> {\n        const payload = await this.createCommitVerificationPayload(uaType, rawPacketBytes)\n        return this.sdk.sendAndConfirmTransaction(signer, payload)\n    }\n\n    //--------------------view functions--------------------\n    /**\n     * Checks if the module is initialized.\n     *\n     * @returns {Promise<boolean>} A promise that resolves to true if the module is initialized, false otherwise.\n     */\n    async isInitialize(): Promise<boolean> {\n        try {\n            await this.sdk.client.getAccountResource(`${this.sdk.accounts.uln_301_receiver}`, `${this.module}::Store`)\n            return true\n        } catch (err: unknown) {\n            if (err instanceof ApiError && err.errorCode === 'resource_not_found') {\n                return false\n            }\n            throw err\n        }\n    }\n\n    async getAddressSize(chainId: aptos.BCS.Uint32): Promise<aptos.BCS.Uint64> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::get_address_size`,\n            type_arguments: [],\n            arguments: [chainId],\n        }\n        try {\n            const ret = await this.sdk.client.view(payload)\n            return ret[0] as aptos.BCS.Uint64\n        } catch (e: unknown) {\n            // not found address size of chain\n            if (isErrorOfApiError(e, 400)) {\n                return BigInt(-1)\n            }\n            throw e\n        }\n    }\n}\n","import { Channel } from './channel'\nimport { Endpoint } from './endpoint'\nimport { Executor } from './executor'\nimport { ExecutorConfig } from './executor_config'\nimport { ExecutorV2 } from './executor_v2'\nimport { MsgLib } from './msglib'\nimport { MsgLibAuth } from './msglib_auth'\nimport { MsgLibConfig } from './msglib_config'\nimport { Uln } from './uln'\nimport { Uln301, Uln301Receiver } from './uln301'\nimport { SDK } from '../index'\n\n/**\n * Class representing the Layerzero module.\n */\nexport class Layerzero {\n    /**\n     * The Channel instance.\n     * @see {@link Channel}\n     */\n    Channel: Channel\n\n    /**\n     * The Executor instance.\n     * @see {@link Executor}\n     */\n    Executor: Executor\n\n    /**\n     * The ExecutorV2 instance.\n     * @see {@link ExecutorV2}\n     */\n    ExecutorV2: ExecutorV2\n\n    /**\n     * The Endpoint instance.\n     * @see {@link Endpoint}\n     */\n    Endpoint: Endpoint\n\n    /**\n     * The Uln instance.\n     * @see {@link Uln}\n     */\n    Uln: Uln\n\n    /**\n     * The Uln301 instance.\n     * @see {@link Uln301}\n     */\n    Uln301: Uln301\n    /**\n     * The Uln301Receiver instance.\n     * @see {@link Uln301Receiver}\n     */\n    Uln301Receiver: Uln301Receiver\n\n    /**\n     * The MsgLibConfig instance.\n     * @see {@link MsgLibConfig}\n     */\n    MsgLibConfig: MsgLibConfig\n\n    /**\n     * The MsgLibAuth instance.\n     * @see {@link MsgLibAuth}\n     */\n    MsgLibAuth: MsgLibAuth\n\n    /**\n     * The ExecutorConfig instance.\n     * @see {@link ExecutorConfig}\n     */\n    ExecutorConfig: ExecutorConfig\n\n    /**\n     * The MsgLib instance.\n     * @see {@link MsgLib}\n     */\n    MsgLib: MsgLib\n\n    /**\n     * Creates an instance of the Layerzero class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(sdk: SDK) {\n        this.Channel = new Channel(sdk)\n        this.Executor = new Executor(sdk)\n        this.ExecutorV2 = new ExecutorV2(sdk)\n        this.Endpoint = new Endpoint(sdk)\n        this.MsgLibConfig = new MsgLibConfig(sdk)\n        this.MsgLibAuth = new MsgLibAuth(sdk)\n        this.ExecutorConfig = new ExecutorConfig(sdk)\n        this.Uln = new Uln(sdk)\n        this.Uln301 = new Uln301(sdk)\n        this.Uln301Receiver = new Uln301Receiver(sdk)\n        this.MsgLib = new MsgLib(sdk)\n    }\n}\n","import * as aptos from 'aptos'\n\n/**\n * Consistent with aptos_std::type_info::TypeInfo\n */\nexport interface TypeInfo {\n    /**\n     * The account address.\n     */\n    account_address: string\n    /**\n     * The module name.\n     */\n    module_name: string\n    /**\n     * The struct name.\n     */\n    struct_name: string\n}\n\n/**\n * Extends {@link TypeInfo}\n */\nexport interface TypeInfoEx extends TypeInfo {\n    /**\n     * A value in `account_address::module_name::struct_name` format.\n     */\n    type: string\n}\n\n/**\n * Interface representing coin information.\n */\nexport interface CoinInfo {\n    /**\n     * The name of the coin.\n     */\n    name: string\n    /**\n     * The symbol of the coin.\n     */\n    symbol: string\n    /**\n     * The number of decimals the coin uses.\n     */\n    decimals: number\n    /**\n     * The total supply of the coin.\n     */\n    supply: bigint\n}\n\n/**\n * Extends {@link CoinInfo}\n */\nexport interface CoinInfoEx extends CoinInfo {\n    /**\n     * The type of the coin.\n     */\n    type: string\n}\n\n/**\n * Interface representing coin information resource.\n */\nexport interface CoinInfoResource {\n    /**\n     * The type of the resource.\n     */\n    type: string\n    /**\n     * The data of the resource.\n     */\n    data: {\n        /**\n         * The number of decimals the coin uses.\n         */\n        decimals: number\n        /**\n         * The name of the coin.\n         */\n        name: string\n        /**\n         * The supply of the coin.\n         */\n        supply: {\n            vec: [{ integer: { vec: [{ value: string }] } }]\n        }\n        /**\n         * The symbol of the coin.\n         */\n        symbol: string\n    }\n}\n\n/**\n * Interface representing ULN configuration type.\n */\nexport interface UlnConfigType {\n    /**\n     * The number of inbound confirmations.\n     */\n    inbound_confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    /**\n     * The oracle address.\n     */\n    oracle: string\n    /**\n     * The number of outbound confirmations.\n     */\n    outbound_confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    /**\n     * The relayer address.\n     */\n    relayer: string\n}\n\n/**\n * Interface representing a packet.\n */\nexport interface Packet {\n    /**\n     * The nonce of the packet.\n     */\n    nonce: string | aptos.BCS.Uint64\n    /**\n     * The source chain ID.\n     */\n    src_chain_id: string | aptos.BCS.Uint16\n    /**\n     * The source address.\n     */\n    src_address: Buffer\n    /**\n     * The destination chain ID.\n     */\n    dst_chain_id: string | aptos.BCS.Uint16\n    /**\n     * The destination address.\n     */\n    dst_address: Buffer\n    /**\n     * The payload of the packet.\n     */\n    payload: Buffer\n}\n\n/**\n * Interface representing ULN signer fee.\n */\nexport interface UlnSignerFee {\n    /**\n     * The base fee.\n     */\n    base_fee: aptos.BCS.Uint64\n    /**\n     * The fee per byte.\n     */\n    fee_per_byte: aptos.BCS.Uint64\n}\n\n/**\n * Interface representing the ULN configuration.\n */\nexport interface UlnConfig {\n    /**\n     * The number of confirmations.\n     */\n    confirmations: aptos.BCS.Uint64\n\n    /**\n     * The optional DVN threshold.\n     */\n    optionalDVNThreshold: aptos.BCS.Uint32\n\n    /**\n     * The required DVNs.\n     */\n    requiredDVNs: string[]\n\n    /**\n     * The optional DVNs.\n     */\n    optionalDVNs: string[]\n\n    /**\n     * Whether to use the default for confirmations.\n     */\n    useDefaultForConfirmations: boolean\n\n    /**\n     * Whether to use the default for required DVNs.\n     */\n    useDefaultForRequiredDVNs: boolean\n\n    /**\n     * Whether to use the default for optional DVNs.\n     */\n    useDefaultForOptionalDVNs: boolean\n}\n\n/**\n * Use to parse the ULN configuration response from the contract method,\n * Everyone who needs to use the ULN configuration should use @see UlnConfig instead of this.\n */\nexport interface UlnConfigResponse {\n    confirmations: bigint\n    optional_dvn_threshold: number\n    required_dvns: string[]\n    optional_dvns: string[]\n    use_default_for_confirmations: boolean\n    use_default_for_required_dvns: boolean\n    use_default_for_optional_dvns: boolean\n}\n\n/**\n * Interface representing the executor configuration.\n */\nexport interface ExecutorConfig {\n    /**\n     * The maximum message size.\n     */\n    maxMessageSize: aptos.BCS.Uint32\n\n    /**\n     * The executor address.\n     */\n    executorAddress: string\n}\n\n/**\n * Use to parse the Executor configuration response from the contract method,\n * Everyone who needs to use the Executor configuration should use @see ExecutorConfig instead of this.\n */\nexport interface ExecutorConfigResponse {\n    max_message_size: number\n    executor_address: string\n}\n","export * as bridge from './bridge'\nexport { Coin } from './coin'\nexport { Counter } from './counter'\nexport { MultisigOracle } from './multisig_oracle'\nexport { MultisigOracleTss } from './multisig_oracle_tss'\nexport { OFT } from './oft'\nexport { Oracle } from './oracle'\nexport { LzApp } from './lzapp'\nexport { PreCrime } from './precrime'\n","import * as aptos from 'aptos'\n\nimport { BRIDGE_ADDRESS } from '../../constants'\nimport { SDK } from '../../index'\nimport { CoinInfoEx, CoinInfoResource, Packet, TypeInfo, TypeInfoEx } from '../../types'\nimport * as utils from '../../utils'\nimport {\n    buildStructTagFromTypeInfo,\n    decodePayload,\n    isErrorOfApiError,\n    normalizeTypeInfo,\n    stringToPaddedUint8Array,\n} from '../../utils'\n\nimport { BridgeCoinType, Coin, MayBeBridgeCoinType } from './coin'\nimport { LzApp } from './lzapp'\n\nexport const DEFAULT_LIMITER_CAP_SD = 1000000000000\nexport const DEFAULT_LIMITER_WINDOW_SEC = 3600 * 4\n\n/**\n * Interface representing a remote coin.\n */\nexport interface RemoteCoin {\n    /**\n     * The address of the remote coin.\n     */\n    address: aptos.BCS.Bytes\n\n    /**\n     * The total value locked (TVL) in SD.\n     */\n    tvlSD: aptos.BCS.Uint64\n\n    /**\n     * Indicates whether the coin is unwrappable.\n     */\n    unwrappable: boolean\n}\n\n/**\n * Enum representing packet types.\n */\nexport enum PacketType {\n    RECIEVE,\n    SEND,\n}\n\n/**\n * Class representing a bridge.\n */\nexport class Bridge {\n    private sdk: SDK\n    private coin: Coin\n    private lzApp: LzApp\n    private readonly uaType: string\n\n    readonly address: aptos.MaybeHexString\n    readonly module: string\n    readonly moduleName: string\n    SEND_PAYLOAD_LENGTH = 74\n\n    /**\n     * Creates an instance of Bridge.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     * @param {Coin} coin - The coin instance.\n     * @param {aptos.MaybeHexString} [bridge] - The bridge address.\n     * @param {aptos.MaybeHexString} [lzApp] - The LzApp address.\n     */\n    constructor(sdk: SDK, coin: Coin, bridge?: aptos.MaybeHexString, lzApp?: aptos.MaybeHexString) {\n        this.sdk = sdk\n        this.coin = coin\n        this.address = bridge ?? BRIDGE_ADDRESS[sdk.stage]!\n        this.lzApp = new LzApp(sdk, lzApp || sdk.accounts.layerzero!, this.address)\n        this.uaType = `${this.address}::coin_bridge::BridgeUA`\n        this.module = `${this.address}::coin_bridge`\n        this.moduleName = 'bridge::coin_bridge'\n    }\n\n    /**\n     * Sets the application configuration.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} major - The major version.\n     * @param {aptos.BCS.Uint8} minor - The minor version.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint8} configType - The configuration type.\n     * @param {aptos.BCS.Bytes} configBytes - The configuration bytes.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction.\n     */\n    async setAppConfig(\n        signer: aptos.AptosAccount,\n        major: aptos.BCS.Uint16,\n        minor: aptos.BCS.Uint8,\n        remoteChainId: aptos.BCS.Uint16,\n        configType: aptos.BCS.Uint8,\n        configBytes: aptos.BCS.Bytes\n    ): Promise<aptos.Types.Transaction> {\n        return this.lzApp.setConfig(signer, this.uaType, major, minor, remoteChainId, configType, configBytes)\n    }\n\n    /**\n     * Gets the minimum destination gas.\n     *\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Uint64} type - The type.\n     * @returns {Promise<aptos.BCS.Uint64>} The minimum destination gas.\n     */\n    async getMinDstGas(dstChainId: aptos.BCS.Uint16, type: aptos.BCS.Uint64): Promise<aptos.BCS.Uint64> {\n        return this.lzApp.getMinDstGas(this.uaType, dstChainId, type)\n    }\n\n    /**\n     * Sets the minimum destination gas payload.\n     *\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Uint64} packetType - The packet type.\n     * @param {aptos.BCS.Uint64} minGas - The minimum gas.\n     * @returns {aptos.Types.EntryFunctionPayload} The entry function payload.\n     */\n    setMinDstGasPayload(\n        dstChainId: aptos.BCS.Uint16,\n        packetType: aptos.BCS.Uint64,\n        minGas: aptos.BCS.Uint64\n    ): aptos.Types.EntryFunctionPayload {\n        return this.lzApp.setMinDstPayload(this.uaType, dstChainId, packetType, minGas)\n    }\n\n    /**\n     * @deprecated use {@link isCustomAdapterParamsEnabled} instead\n     */\n    async customAdapterParamsEnabled(): Promise<boolean> {\n        return this.isCustomAdapterParamsEnabled()\n    }\n\n    /**\n     * Checks if custom adapter parameters are enabled.\n     *\n     * @returns {Promise<boolean>} True if custom adapter parameters are enabled, false otherwise.\n     */\n    async isCustomAdapterParamsEnabled(): Promise<boolean> {\n        const resource = await this.sdk.client.getAccountResource(this.address, `${this.address}::coin_bridge::Config`)\n        const { custom_adapter_params } = resource.data as { custom_adapter_params: boolean }\n        return custom_adapter_params\n    }\n\n    /**\n     * Enables or disables custom adapter parameters.\n     *\n     * @param {boolean} enable - Whether to enable custom adapter parameters.\n     * @returns {aptos.Types.EntryFunctionPayload} The entry function payload.\n     */\n    enableCustomAdapterParamsPayload(enable: boolean): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::enable_custom_adapter_params`,\n            type_arguments: [],\n            arguments: [enable],\n        }\n    }\n\n    /**\n     * Sets the remote bridge payload.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Bytes} remoteBridgeAddr - The remote bridge address.\n     * @returns {aptos.Types.EntryFunctionPayload} The entry function payload.\n     */\n    setRemoteBridgePayload(\n        remoteChainId: aptos.BCS.Uint16,\n        remoteBridgeAddr: aptos.BCS.Bytes\n    ): aptos.Types.EntryFunctionPayload {\n        return this.lzApp.setRemotePaylaod(remoteChainId, remoteBridgeAddr)\n    }\n\n    /**\n     * Sets the remote bridge.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Bytes} remoteBridgeAddr - The remote bridge address.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction.\n     */\n    async setRemoteBridge(\n        signer: aptos.AptosAccount,\n        remoteChainId: aptos.BCS.Uint16,\n        remoteBridgeAddr: aptos.BCS.Bytes\n    ): Promise<aptos.Types.Transaction> {\n        return this.lzApp.setRemote(signer, remoteChainId, remoteBridgeAddr)\n    }\n\n    /**\n     * Registers a coin payload.\n     *\n     * @param {BridgeCoinType} coin - The coin type.\n     * @param {string} name - The name of the coin.\n     * @param {string} symbol - The symbol of the coin.\n     * @param {aptos.BCS.Uint8} decimals - The decimals of the coin.\n     * @param {aptos.BCS.Uint32 | aptos.BCS.Uint64} limiterCapSD - The limiter cap in SD.\n     * @returns {aptos.Types.EntryFunctionPayload} The entry function payload.\n     */\n    registerCoinPayload(\n        coin: BridgeCoinType,\n        name: string,\n        symbol: string,\n        decimals: aptos.BCS.Uint8,\n        limiterCapSD: aptos.BCS.Uint32 | aptos.BCS.Uint64\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::register_coin`,\n            type_arguments: [this.coin.getCoinType(coin)],\n            arguments: [name, symbol, decimals, limiterCapSD],\n        }\n    }\n\n    /**\n     * Registers a coin.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {BridgeCoinType} coin - The coin type.\n     * @param {string} name - The name of the coin.\n     * @param {string} symbol - The symbol of the coin.\n     * @param {aptos.BCS.Uint8} decimals - The decimals of the coin.\n     * @param {aptos.BCS.Uint32 | aptos.BCS.Uint64} limiterCapSD - The limiter cap in SD.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction.\n     */\n    async registerCoin(\n        signer: aptos.AptosAccount,\n        coin: BridgeCoinType,\n        name: string,\n        symbol: string,\n        decimals: aptos.BCS.Uint8,\n        limiterCapSD: aptos.BCS.Uint32 | aptos.BCS.Uint64\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.registerCoinPayload(coin, name, symbol, decimals, limiterCapSD)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Sets the remote coin payload.\n     *\n     * @param {BridgeCoinType} coin - The coin type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.MaybeHexString} remoteCoinAddr - The remote coin address.\n     * @param {boolean} unwrappable - Whether the coin is unwrappable.\n     * @returns {aptos.Types.EntryFunctionPayload} The entry function payload.\n     */\n    setRemoteCoinPayload(\n        coin: BridgeCoinType,\n        remoteChainId: aptos.BCS.Uint16,\n        remoteCoinAddr: aptos.MaybeHexString,\n        unwrappable: boolean\n    ): aptos.Types.EntryFunctionPayload {\n        const remoteCoinAddrBytes = stringToPaddedUint8Array(remoteCoinAddr.toString(), 32)\n        return {\n            function: `${this.module}::set_remote_coin`,\n            type_arguments: [this.coin.getCoinType(coin)],\n            arguments: [remoteChainId, Array.from(remoteCoinAddrBytes), unwrappable],\n        }\n    }\n\n    /**\n     * Sets the remote coin.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {BridgeCoinType} coin - The coin type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.MaybeHexString} remoteCoinAddr - The remote coin address.\n     * @param {boolean} unwrappable - Whether the coin is unwrappable.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction.\n     */\n    async setRemoteCoin(\n        signer: aptos.AptosAccount,\n        coin: BridgeCoinType,\n        remoteChainId: aptos.BCS.Uint16,\n        remoteCoinAddr: aptos.MaybeHexString,\n        unwrappable: boolean\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.setRemoteCoinPayload(coin, remoteChainId, remoteCoinAddr, unwrappable)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Sets the force resume payload.\n     *\n     * @param {aptos.BCS.Uint16} srcChainId - The source chain ID.\n     * @returns {aptos.Types.EntryFunctionPayload} The entry function payload.\n     */\n    forceResumePayload(srcChainId: aptos.BCS.Uint16): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::force_resume`,\n            type_arguments: [],\n            arguments: [srcChainId],\n        }\n    }\n\n    /**\n     * Sets the force resume.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} srcChainId - The source chain ID.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction.\n     */\n    async forceResume(signer: aptos.AptosAccount, srcChainId: aptos.BCS.Uint16): Promise<aptos.Types.Transaction> {\n        const transaction = this.forceResumePayload(srcChainId)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Sets the pause state for a coin.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {BridgeCoinType} coin - The coin type.\n     * @param {boolean} paused - Whether to pause the coin.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction.\n     */\n    async setPause(\n        signer: aptos.AptosAccount,\n        coin: BridgeCoinType,\n        paused: boolean\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = {\n            function: `${this.module}::set_pause`,\n            type_arguments: [coin],\n            arguments: [paused],\n        }\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Sets the send coin payload.\n     *\n     * @param {BridgeCoinType} coin - The coin type.\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Bytes} dstReceiver - The destination receiver address.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} amountLD - The amount in LD.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} nativeFee - The native fee.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} zroFee - The ZRO fee.\n     * @param {boolean} unwrap - Whether to unwrap the coin.\n     * @param {aptos.BCS.Bytes} adapterParams - The adapter parameters.\n     * @param {aptos.BCS.Bytes} msglibParams - The message library parameters.\n     * @returns {aptos.Types.EntryFunctionPayload} The entry function payload.\n     */\n    sendCoinPayload(\n        coin: BridgeCoinType,\n        dstChainId: aptos.BCS.Uint16,\n        dstReceiver: aptos.BCS.Bytes,\n        amountLD: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        nativeFee: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        zroFee: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        unwrap: boolean,\n        adapterParams: aptos.BCS.Bytes,\n        msglibPararms: aptos.BCS.Bytes\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::send_coin_from`,\n            type_arguments: [this.coin.getCoinType(coin)],\n            arguments: [\n                dstChainId.toString(),\n                Array.from(dstReceiver),\n                amountLD.toString(),\n                nativeFee.toString(),\n                zroFee.toString(),\n                unwrap.toString(),\n                Array.from(adapterParams),\n                Array.from(msglibPararms),\n            ],\n        }\n    }\n\n    /**\n     * Sends a coin.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {BridgeCoinType} coin - The coin type.\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Bytes} dstReceiver - The destination receiver address.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} amountLD - The amount in LD.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} nativeFee - The native fee.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} zroFee - The ZRO fee.\n     * @param {boolean} unwrap - Whether to unwrap the coin.\n     * @param {aptos.BCS.Bytes} adapterParams - The adapter parameters.\n     * @param {aptos.BCS.Bytes} msglibParams - The message library parameters.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction.\n     */\n    async sendCoin(\n        signer: aptos.AptosAccount,\n        coin: BridgeCoinType,\n        dstChainId: aptos.BCS.Uint16,\n        dstReceiver: aptos.BCS.Bytes,\n        amountLD: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        nativeFee: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        zroFee: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        unwrap: boolean,\n        adapterParams: aptos.BCS.Bytes,\n        msglibParams: aptos.BCS.Bytes\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.sendCoinPayload(\n            coin,\n            dstChainId,\n            dstReceiver,\n            amountLD,\n            nativeFee,\n            zroFee,\n            unwrap,\n            adapterParams,\n            msglibParams\n        )\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Sets the lz receive payload.\n     *\n     * @param {BridgeCoinType} coin - The coin type.\n     * @param {aptos.BCS.Uint16} srcChainId - The source chain ID.\n     * @param {aptos.BCS.Bytes} srcAddress - The source address.\n     * @param {aptos.BCS.Bytes} payload - The payload.\n     * @returns {aptos.Types.EntryFunctionPayload} The entry function payload.\n     */\n    lzReceivePayload(\n        coin: BridgeCoinType,\n        srcChainId: aptos.BCS.Uint16,\n        srcAddress: aptos.BCS.Bytes,\n        payload: aptos.BCS.Bytes\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::lz_receive`,\n            type_arguments: [this.coin.getCoinType(coin)],\n            arguments: [srcChainId, Array.from(srcAddress), Array.from(payload)],\n        }\n    }\n\n    /**\n     * Receives a LayerZero message.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {BridgeCoinType} coin - The coin type.\n     * @param {aptos.BCS.Uint16} srcChainId - The source chain ID.\n     * @param {aptos.BCS.Bytes} srcAddress - The source address.\n     * @param {aptos.BCS.Bytes} payload - The payload.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async lzReceive(\n        signer: aptos.AptosAccount,\n        coin: BridgeCoinType,\n        srcChainId: aptos.BCS.Uint16,\n        srcAddress: aptos.BCS.Bytes,\n        payload: aptos.BCS.Bytes\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.lzReceivePayload(coin, srcChainId, srcAddress, payload)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the types from a packet.\n     *\n     * @param {Packet} packet - The packet.\n     * @returns {Promise<string[]>} A promise that resolves to the types.\n     */\n    async getTypesFromPacket(packet: Packet): Promise<string[]> {\n        const payload = decodePayload(packet.payload)\n        const coinType = await this.getCoinTypeByRemoteCoin(packet.src_chain_id, payload.remoteCoinAddr)\n        return [coinType.type]\n    }\n\n    /**\n     * Creates a payload for claiming a coin.\n     *\n     * @param {BridgeCoinType} coin - The coin type.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    claimCoinPayload(coin: BridgeCoinType): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::claim_coin`,\n            type_arguments: [this.coin.getCoinType(coin)],\n            arguments: [],\n        }\n    }\n\n    /**\n     * Claims a coin.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {BridgeCoinType} coin - The coin type.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async claimCoin(signer: aptos.AptosAccount, coin: BridgeCoinType): Promise<aptos.Types.Transaction> {\n        const transaction = this.claimCoinPayload(coin)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Checks if the global pause is enabled.\n     *\n     * @returns {Promise<boolean>} A promise that resolves to true if the global pause is enabled, false otherwise.\n     */\n    async globalPaused(): Promise<boolean> {\n        const resource = await this.sdk.client.getAccountResource(this.address, `${this.module}::Config`)\n        const { paused_global } = resource.data as { paused_global: boolean }\n        return paused_global\n    }\n\n    // todo: add version\n    // async getAppConfig(remoteChainId: aptos.BCS.Uint16): Promise<UlnConfigType> {\n    //\n    // }\n\n    /**\n     * Gets the remote bridge address for a given remote chain ID.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @returns {Promise<aptos.BCS.Bytes>} A promise that resolves to the remote bridge address.\n     */\n    async getRemoteBridge(remoteChainId: aptos.BCS.Uint16): Promise<aptos.BCS.Bytes> {\n        try {\n            return await this.lzApp.getRemote(remoteChainId)\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return new Uint8Array(0)\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Gets the coin type by remote coin address.\n     *\n     * @param {string | aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Bytes} remoteCoinAddr - The remote coin address.\n     * @returns {Promise<TypeInfoEx>} A promise that resolves to the coin type information.\n     */\n    async getCoinTypeByRemoteCoin(\n        remoteChainId: string | aptos.BCS.Uint16,\n        remoteCoinAddr: aptos.BCS.Bytes\n    ): Promise<TypeInfoEx> {\n        const resource = await this.getCoinTypeStore()\n        const { type_lookup } = resource.data as { type_lookup: { handle: string } }\n        const coinInfosHandle = type_lookup.handle\n        const typeInfo = await this.sdk.client.getTableItem(coinInfosHandle, {\n            key_type: `${this.module}::Path`,\n            value_type: `0x1::type_info::TypeInfo`,\n            key: {\n                remote_chain_id: remoteChainId.toString(),\n                remote_coin_addr: Buffer.from(remoteCoinAddr).toString('hex'),\n            },\n        })\n\n        const info = normalizeTypeInfo(typeInfo)\n        return {\n            ...info,\n            type: buildStructTagFromTypeInfo(info),\n        }\n    }\n\n    /**\n     * Gets the remote coin information.\n     *\n     * @param {MayBeBridgeCoinType} coin - The coin type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @returns {Promise<RemoteCoin>} A promise that resolves to the remote coin information.\n     */\n    async getRemoteCoin(coin: MayBeBridgeCoinType, remoteChainId: aptos.BCS.Uint16): Promise<RemoteCoin> {\n        const resource = await this.getCoinStore(coin)\n        const { remote_coins } = resource.data as { remote_coins: { handle: string } }\n        const remoteCoinHandle = remote_coins.handle\n\n        const remoteCoin = await this.sdk.client.getTableItem(remoteCoinHandle, {\n            key_type: 'u64',\n            value_type: `${this.module}::RemoteCoin`,\n            key: remoteChainId.toString(),\n        })\n        // console.log(`remoteCoin ${JSON.stringify(remoteCoin)}`)\n\n        const address = Uint8Array.from(\n            Buffer.from(aptos.HexString.ensure(remoteCoin.remote_address).noPrefix(), 'hex')\n        )\n        const tvlSD = BigInt(remoteCoin.tvl_sd)\n        const { unwrappable } = remoteCoin\n        return {\n            address,\n            tvlSD,\n            unwrappable,\n        }\n    }\n\n    /**\n     * Gets the coin store resource.\n     *\n     * @param {MayBeBridgeCoinType} coin - The coin type.\n     * @returns {Promise<aptos.Types.MoveResource>} A promise that resolves to the coin store resource.\n     */\n    private async getCoinStore(coin: MayBeBridgeCoinType): Promise<aptos.Types.MoveResource> {\n        return this.sdk.client.getAccountResource(\n            this.address,\n            `${this.module}::CoinStore<${this.coin.getCoinType(coin)}>`\n        )\n    }\n\n    /**\n     * Gets the remote chains for a given coin.\n     *\n     * @param {MayBeBridgeCoinType} coin - The coin type.\n     * @returns {Promise<string[]>} A promise that resolves to the remote chains.\n     */\n    async getRemoteChains(coin: MayBeBridgeCoinType): Promise<string[]> {\n        const resource = await this.getCoinStore(coin)\n\n        const { remote_chains: remoteChains } = resource.data as { remote_chains: string[] }\n        return remoteChains\n    }\n\n    /**\n     * Gets the remote coins for a given coin.\n     *\n     * @param {MayBeBridgeCoinType} coin - The coin type.\n     * @returns {Promise<RemoteCoin[]>} A promise that resolves to the remote coins.\n     */\n    async getRemoteCoins(coin: MayBeBridgeCoinType): Promise<RemoteCoin[]> {\n        const remoteChains = await this.getRemoteChains(coin)\n        const rtn: RemoteCoin[] = []\n        for (const remoteChainId of remoteChains) {\n            const remoteCoin = await this.getRemoteCoin(coin, parseInt(remoteChainId))\n            rtn.push(remoteCoin)\n        }\n        return rtn\n    }\n\n    /**\n     * Checks if a remote coin exists for a given coin and remote chain ID.\n     *\n     * @param {BridgeCoinType} coin - The coin type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @returns {Promise<boolean>} A promise that resolves to true if the remote coin exists, false otherwise.\n     */\n    async hasRemoteCoin(coin: BridgeCoinType, remoteChainId: aptos.BCS.Uint16): Promise<boolean> {\n        try {\n            const remoteCoin = await this.getRemoteCoin(coin, remoteChainId)\n            return remoteCoin !== undefined\n        } catch (e) {\n            if (utils.isErrorOfApiError(e, 404)) {\n                return false\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Gets the claimable coin amount for a given coin and owner.\n     *\n     * @param {BridgeCoinType} coin - The coin type.\n     * @param {aptos.MaybeHexString} owner - The owner address.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the claimable coin amount.\n     */\n    async getClaimableCoin(coin: BridgeCoinType, owner: aptos.MaybeHexString): Promise<aptos.BCS.Uint64> {\n        const resource = await this.getCoinStore(coin)\n        const { claimable_amt_ld } = resource.data as { claimable_amt_ld: { handle: string } }\n        const claimableAmtLDHandle = claimable_amt_ld.handle\n\n        try {\n            const response = await this.sdk.client.getTableItem(claimableAmtLDHandle, {\n                key_type: 'address',\n                value_type: 'u64',\n                key: owner,\n            })\n            return BigInt(response)\n        } catch (e) {\n            if (utils.isErrorOfApiError(e, 404)) {\n                return BigInt(0)\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Checks if a coin is registered.\n     *\n     * @param {BridgeCoinType} coin - The coin type.\n     * @returns {Promise<boolean>} A promise that resolves to true if the coin is registered, false otherwise.\n     */\n    async hasCoinRegistered(coin: BridgeCoinType): Promise<boolean> {\n        try {\n            const resource = await this.getCoinStore(coin)\n            return resource !== undefined\n        } catch (e) {\n            if (utils.isErrorOfApiError(e, 404)) {\n                return false\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Gets the LD to SD rate for a given coin.\n     *\n     * @param {BridgeCoinType} coin - The coin type.\n     * @returns {Promise<string>} A promise that resolves to the LD to SD rate.\n     */\n    async getLd2SdRate(coin: BridgeCoinType): Promise<string> {\n        const resource = await this.getCoinStore(coin)\n        const { ld2sd_rate } = resource.data as { ld2sd_rate: string }\n        return ld2sd_rate\n    }\n\n    /**\n     * Converts an amount from SD to LD.\n     *\n     * @param {BridgeCoinType} coin - The coin type.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} amountSD - The amount in SD.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the amount in LD.\n     */\n    async convertAmountToLD(\n        coin: BridgeCoinType,\n        amountSD: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.BCS.Uint64> {\n        const rate = await this.getLd2SdRate(coin)\n        return BigInt(amountSD) * BigInt(rate)\n    }\n\n    /**\n     * Converts an amount from LD to SD.\n     *\n     * @param {BridgeCoinType} coin - The coin type.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} amountLD - The amount in LD.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the amount in SD.\n     */\n    async convertAmountToSD(\n        coin: BridgeCoinType,\n        amountLD: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.BCS.Uint64> {\n        const rate = await this.getLd2SdRate(coin)\n        return BigInt(amountLD) / BigInt(rate)\n    }\n\n    /**\n     * Creates a payload for registering a coin.\n     *\n     * @param {BridgeCoinType} coin - The coin type.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    registerPayload(coin: BridgeCoinType): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `0x1::managed_coin::register`,\n            type_arguments: [this.coin.getCoinType(coin)],\n            arguments: [],\n        }\n    }\n\n    /**\n     * Registers a coin.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {BridgeCoinType} coin - The coin type.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async coinRegister(signer: aptos.AptosAccount, coin: BridgeCoinType): Promise<aptos.Types.Transaction> {\n        const transaction = this.registerPayload(coin)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the coin type store resource.\n     *\n     * @returns {Promise<aptos.Types.MoveResource>} A promise that resolves to the coin type store resource.\n     */\n    private async getCoinTypeStore(): Promise<aptos.Types.MoveResource> {\n        return this.sdk.client.getAccountResource(this.address, `${this.module}::CoinTypeStore`)\n    }\n\n    /**\n     * Gets the coin types.\n     *\n     * @returns {Promise<TypeInfoEx[]>} A promise that resolves to the coin types.\n     */\n    async getCoinTypes(): Promise<TypeInfoEx[]> {\n        const resource = await this.getCoinTypeStore()\n        const { types: coinTypes } = resource.data as { types: TypeInfo[] }\n\n        const rtn: any[] = []\n        for (const typeInfo of coinTypes) {\n            const info = normalizeTypeInfo(typeInfo)\n            rtn.push({\n                ...info,\n                type: buildStructTagFromTypeInfo(info),\n            })\n        }\n        return rtn\n    }\n\n    /**\n     * Gets the coin information for a given coin type.\n     *\n     * @param {MayBeBridgeCoinType} coinType - The coin type.\n     * @returns {Promise<CoinInfoEx>} A promise that resolves to the coin information.\n     */\n    async getCoinInfo(coinType: MayBeBridgeCoinType): Promise<CoinInfoEx> {\n        const coinStructTag = this.coin.getCoinType(coinType)\n        const typeInfo = `0x1::coin::CoinInfo<${coinStructTag}>`\n        const resource = await this.sdk.client.getAccountResource(this.address, typeInfo)\n        const coinInfo = resource as CoinInfoResource\n        const { name } = coinInfo.data\n        const { symbol } = coinInfo.data\n        const { decimals } = coinInfo.data\n        const supply = coinInfo.data.supply.vec[0].integer.vec[0].value\n        return {\n            name: name,\n            symbol: symbol,\n            decimals: decimals,\n            supply: BigInt(supply),\n            type: coinStructTag,\n        }\n    }\n\n    /**\n     * Gets the limited amount for a given coin.\n     *\n     * @param {BridgeCoinType} coin - The coin type.\n     * @returns {Promise<{ limited: boolean; amount: aptos.BCS.Uint64 }>} A promise that resolves to the limited amount.\n     */\n    async getLimitedAmount(coin: BridgeCoinType): Promise<{ limited: boolean; amount: aptos.BCS.Uint64 }> {\n        const resource = await this.sdk.client.getAccountResource(\n            this.address,\n            `${this.address}::limiter::Limiter<${this.coin.getCoinType(coin)}>`\n        )\n\n        const { enabled } = resource.data as { enabled: boolean }\n\n        if (!enabled) {\n            return {\n                limited: false,\n                amount: BigInt(0),\n            }\n        }\n\n        const data = resource.data as { [key: string]: string }\n        const limiter = {\n            t0Sec: BigInt(data.t0_sec),\n            windowSec: BigInt(data.window_sec),\n            sumSD: BigInt(data.sum_sd),\n            capSD: BigInt(data.cap_sd),\n        }\n\n        const now = await this.getCurrentTimestamp()\n        let count = (now - limiter.t0Sec) / limiter.windowSec\n\n        while (count > 0) {\n            limiter.sumSD /= BigInt(2)\n            count -= BigInt(1)\n        }\n\n        const limitedAmtSD = limiter.capSD - limiter.sumSD\n        return {\n            limited: true,\n            amount: await this.convertAmountToLD(coin, limitedAmtSD),\n        }\n    }\n\n    /**\n     * Gets the current timestamp.\n     *\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the current timestamp.\n     */\n    private async getCurrentTimestamp(): Promise<aptos.BCS.Uint64> {\n        const resource = await this.sdk.client.getAccountResource('0x1', '0x1::timestamp::CurrentTimeMicroseconds')\n        const { microseconds } = resource.data as { microseconds: string }\n        return BigInt(microseconds) / BigInt(1000000)\n    }\n\n    /**\n     * Creates a payload for setting the limiter cap.\n     *\n     * @param {BridgeCoinType} coin - The coin type.\n     * @param {boolean} enable - Whether to enable the limiter.\n     * @param {aptos.BCS.Uint32 | aptos.BCS.Uint64} capSD - The cap in SD.\n     * @param {aptos.BCS.Uint32 | aptos.BCS.Uint64} windowSec - The window in seconds.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setLimiterCapPayload(\n        coin: BridgeCoinType,\n        enable: boolean,\n        capSD: aptos.BCS.Uint32 | aptos.BCS.Uint64,\n        windowSec: aptos.BCS.Uint32 | aptos.BCS.Uint64\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::set_limiter_cap`,\n            type_arguments: [this.coin.getCoinType(coin)],\n            arguments: [enable, capSD.toString(), windowSec.toString()],\n        }\n    }\n\n    /**\n     * Sets the limiter cap.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {BridgeCoinType} coin - The coin type.\n     * @param {boolean} enable - Whether to enable the limiter.\n     * @param {aptos.BCS.Uint32 | aptos.BCS.Uint64} capSD - The cap in SD.\n     * @param {aptos.BCS.Uint32 | aptos.BCS.Uint64} windowSec - The window in seconds.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setLimiterCap(\n        signer: aptos.AptosAccount,\n        coin: BridgeCoinType,\n        enable: boolean,\n        capSD: aptos.BCS.Uint32 | aptos.BCS.Uint64,\n        windowSec: aptos.BCS.Uint32 | aptos.BCS.Uint64\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.setLimiterCapPayload(coin, enable, capSD, windowSec)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the limit cap for a given coin.\n     *\n     * @param {BridgeCoinType} coin - The coin type.\n     * @returns {Promise<{ enabled: boolean; capSD: aptos.BCS.Uint64; windowSec: aptos.BCS.Uint64 }>} A promise that resolves to an object containing the limit cap information.\n     * @throws {Error} If an error occurs while fetching the limit cap.\n     */\n    async getLimitCap(\n        coin: BridgeCoinType\n    ): Promise<{ enabled: boolean; capSD: aptos.BCS.Uint64; windowSec: aptos.BCS.Uint64 }> {\n        try {\n            const resource = await this.sdk.client.getAccountResource(\n                this.address,\n                `${this.address}::limiter::Limiter<${this.coin.getCoinType(coin)}>`\n            )\n            const { enabled, cap_sd, window_sec } = resource.data as {\n                enabled: boolean\n                cap_sd: string\n                window_sec: string\n            }\n            return {\n                enabled,\n                capSD: BigInt(cap_sd),\n                windowSec: BigInt(window_sec),\n            }\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return {\n                    enabled: true,\n                    capSD: BigInt(DEFAULT_LIMITER_CAP_SD),\n                    windowSec: BigInt(DEFAULT_LIMITER_WINDOW_SEC),\n                }\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Sets the global pause state.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {boolean} pause - The pause state to set.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setGlobalPause(signer: aptos.AptosAccount, pause: boolean): Promise<aptos.Types.Transaction> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::set_global_pause`,\n            type_arguments: [],\n            arguments: [pause],\n        }\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n}\n","import * as aptos from 'aptos'\n\nimport { SDK } from '../../index'\nimport { UlnConfigType } from '../../types'\nimport { isErrorOfApiError } from '../../utils'\n\n/**\n * Class representing the LzApp.\n */\nexport class LzApp {\n    /**\n     * The SDK instance.\n     */\n    private sdk: SDK\n\n    /**\n     * The LzApp address.\n     */\n    private readonly lzApp: aptos.MaybeHexString\n\n    /**\n     * The UA address.\n     */\n    private readonly ua: aptos.MaybeHexString\n\n    /**\n     * Creates an instance of the LzApp class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     * @param {aptos.MaybeHexString} lzApp - The LzApp address.\n     * @param {aptos.MaybeHexString} ua - The UA address.\n     */\n    constructor(sdk: SDK, lzApp: aptos.MaybeHexString, ua: aptos.MaybeHexString) {\n        this.sdk = sdk\n        this.lzApp = lzApp\n        this.ua = ua\n    }\n\n    /**\n     * Gets the remote address for a given remote chain ID.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @returns {Promise<aptos.BCS.Bytes>} A promise that resolves to the remote address.\n     */\n    async getRemote(remoteChainId: aptos.BCS.Uint16): Promise<aptos.BCS.Bytes> {\n        const resource = await this.sdk.client.getAccountResource(this.ua, `${this.lzApp}::remote::Remotes`)\n        const { peers } = resource.data as { peers: { handle: string } }\n        const trustedRemoteHandle = peers.handle\n\n        const response = await this.sdk.client.getTableItem(trustedRemoteHandle, {\n            key_type: 'u64',\n            value_type: 'vector<u8>',\n            key: remoteChainId.toString(),\n        })\n\n        return Uint8Array.from(Buffer.from(aptos.HexString.ensure(response).noPrefix(), 'hex'))\n    }\n\n    /**\n     * Gets the minimum destination gas for a given UA type, remote chain ID, and packet type.\n     *\n     * @param {string} uaType - The UA type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint64} packetType - The packet type.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the minimum destination gas.\n     */\n    async getMinDstGas(\n        uaType: string,\n        remoteChainId: aptos.BCS.Uint16,\n        packetType: aptos.BCS.Uint64\n    ): Promise<aptos.BCS.Uint64> {\n        const resource = await this.sdk.client.getAccountResource(this.ua, `${this.lzApp}::lzapp::Config`)\n        const { min_dst_gas_lookup } = resource.data as { min_dst_gas_lookup: { handle: string } }\n\n        try {\n            const response = await this.sdk.client.getTableItem(min_dst_gas_lookup.handle, {\n                key_type: `${this.lzApp}::lzapp::Path`,\n                value_type: 'u64',\n                key: {\n                    chain_id: remoteChainId.toString(),\n                    packet_type: packetType.toString(),\n                },\n            })\n            return response\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return BigInt(0)\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Creates a payload for setting the minimum destination gas.\n     *\n     * @param {string} uaType - The UA type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint64} packetType - The packet type.\n     * @param {aptos.BCS.Uint64} minDstGas - The minimum destination gas.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setMinDstPayload(\n        uaType: string,\n        remoteChainId: aptos.BCS.Uint16,\n        packetType: aptos.BCS.Uint64,\n        minDstGas: aptos.BCS.Uint64\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.lzApp}::lzapp::set_min_dst_gas`,\n            type_arguments: [uaType],\n            arguments: [remoteChainId, packetType.toString(), minDstGas.toString()],\n        }\n    }\n\n    /**\n     * Sets the minimum destination gas.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} uaType - The UA type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint64} packetType - The packet type.\n     * @param {aptos.BCS.Uint64} minDstGas - The minimum destination gas.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setMinDstGas(\n        signer: aptos.AptosAccount,\n        uaType: string,\n        remoteChainId: aptos.BCS.Uint16,\n        packetType: aptos.BCS.Uint64,\n        minDstGas: aptos.BCS.Uint64\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.setMinDstPayload(uaType, remoteChainId, packetType, minDstGas)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Creates a payload for setting the remote address.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Bytes} remoteAddress - The remote address.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setRemotePaylaod(\n        remoteChainId: aptos.BCS.Uint16,\n        remoteAddress: aptos.BCS.Bytes\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.lzApp}::remote::set`,\n            type_arguments: [],\n            arguments: [remoteChainId, Array.from(remoteAddress)],\n        }\n    }\n\n    /**\n     * Sets the remote address.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Bytes} remoteAddress - The remote address.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setRemote(\n        signer: aptos.AptosAccount,\n        remoteChainId: aptos.BCS.Uint16,\n        remoteAddress: aptos.BCS.Bytes\n    ): Promise<aptos.Types.Transaction> {\n        const expectedAddressSize = await this.sdk.LayerzeroModule.Uln.Config.getChainAddressSize(remoteChainId)\n        if (expectedAddressSize !== remoteAddress.length) {\n            const address = Buffer.from(remoteAddress).toString('hex')\n            throw new Error(`address(${address}) doesn't match expected size(${expectedAddressSize})`)\n        }\n\n        const transaction = this.setRemotePaylaod(remoteChainId, remoteAddress)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Creates a payload for setting the executor version and address.\n     *\n     * @param {string} uaType - The user application type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint8} executorVersion - The executor version.\n     * @param {string} executorAddress - The executor address.\n     * @returns {aptos.Types.EntryFunctionPayload} The entry function payload.\n     */\n    setExecutorPayload(\n        uaType: string,\n        remoteChainId: aptos.BCS.Uint16,\n        executorVersion: aptos.BCS.Uint8,\n        executorAddress: string\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.lzApp}::lzapp::set_executor`,\n            type_arguments: [uaType],\n            arguments: [remoteChainId, executorVersion, executorAddress],\n        }\n    }\n\n    /**\n     * Sets the executor version and address.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} uaType - The user application type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint8} executorVersion - The executor version.\n     * @param {string} executorAddress - The executor address.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction result.\n     */\n    async setExecutor(\n        signer: aptos.AptosAccount,\n        uaType: string,\n        remoteChainId: aptos.BCS.Uint16,\n        executorVersion: aptos.BCS.Uint8,\n        executorAddress: string\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.setExecutorPayload(uaType, remoteChainId, executorVersion, executorAddress)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Creates a payload for setting the send msglib.\n     *\n     * @param {string} uaType - The user application type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint16} majorVersion - The major version.\n     * @param {aptos.BCS.Uint8} minorVersion - The minor version.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setSendMsglibPayload(\n        uaType: string,\n        remoteChainId: aptos.BCS.Uint16,\n        majorVersion: aptos.BCS.Uint16,\n        minorVersion: aptos.BCS.Uint8\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.lzApp}::lzapp::set_send_msglib`,\n            type_arguments: [uaType],\n            arguments: [remoteChainId, majorVersion, minorVersion],\n        }\n    }\n\n    /**\n     * Creates a payload for setting the receive msglib.\n     *\n     * @param {string} uaType - The user application type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint16} majorVersion - The major version.\n     * @param {aptos.BCS.Uint8} minorVersion - The minor version.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setReceiveMsglibPayload(\n        uaType: string,\n        remoteChainId: aptos.BCS.Uint16,\n        majorVersion: aptos.BCS.Uint16,\n        minorVersion: aptos.BCS.Uint8\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.lzApp}::lzapp::set_receive_msglib`,\n            type_arguments: [uaType],\n            arguments: [remoteChainId, majorVersion, minorVersion],\n        }\n    }\n\n    /**\n     * Creates a payload for setting the configuration.\n     *\n     * @param {string} uaType - The UA type.\n     * @param {aptos.BCS.Uint16} majorVersion - The major version.\n     * @param {aptos.BCS.Uint8} minorVersion - The minor version.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint8} configType - The configuration type.\n     * @param {aptos.BCS.Bytes} configBytes - The configuration bytes.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setConfigPayload(\n        uaType: string,\n        majorVersion: aptos.BCS.Uint16,\n        minorVersion: aptos.BCS.Uint8,\n        remoteChainId: aptos.BCS.Uint16,\n        configType: aptos.BCS.Uint8,\n        configBytes: aptos.BCS.Bytes\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.lzApp}::lzapp::set_config`,\n            type_arguments: [uaType],\n            arguments: [majorVersion, minorVersion, remoteChainId, configType, Array.from(configBytes)],\n        }\n    }\n\n    /**\n     * Sets the configuration.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} uaType - The UA type.\n     * @param {aptos.BCS.Uint16} majorVersion - The major version.\n     * @param {aptos.BCS.Uint8} minorVersion - The minor version.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint8} configType - The configuration type.\n     * @param {aptos.BCS.Bytes} configBytes - The configuration bytes.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setConfig(\n        signer: aptos.AptosAccount,\n        uaType: string,\n        majorVersion: aptos.BCS.Uint16,\n        minorVersion: aptos.BCS.Uint8,\n        remoteChainId: aptos.BCS.Uint16,\n        configType: aptos.BCS.Uint8,\n        configBytes: aptos.BCS.Bytes\n    ): Promise<aptos.Types.Transaction> {\n        console.log(`configType: ${configType}, configBytes: ${configBytes}`)\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.lzApp}::lzapp::set_config`,\n            type_arguments: [uaType],\n            arguments: [majorVersion, minorVersion, remoteChainId, configType, Array.from(configBytes)],\n        }\n\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Sets the configuration bundle.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} uaType - The UA type.\n     * @param {aptos.BCS.Uint16} majorVersion - The major version.\n     * @param {aptos.BCS.Uint8} minorVersion - The minor version.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {UlnConfigType} config - The configuration.\n     * @returns {Promise<void>} A promise that resolves when the configuration bundle is set.\n     */\n    async setConfigBundle(\n        signer: aptos.AptosAccount,\n        uaType: string,\n        majorVersion: aptos.BCS.Uint16,\n        minorVersion: aptos.BCS.Uint8,\n        remoteChainId: aptos.BCS.Uint16,\n        config: UlnConfigType\n    ): Promise<void> {\n        await this.setConfig(\n            signer,\n            uaType,\n            majorVersion,\n            minorVersion,\n            remoteChainId,\n            this.sdk.LayerzeroModule.Uln.Config.TYPE_ORACLE,\n            Buffer.from(aptos.HexString.ensure(config.oracle).noPrefix(), 'hex')\n        )\n        await this.setConfig(\n            signer,\n            uaType,\n            majorVersion,\n            minorVersion,\n            remoteChainId,\n            this.sdk.LayerzeroModule.Uln.Config.TYPE_RELAYER,\n            Buffer.from(aptos.HexString.ensure(config.relayer).noPrefix(), 'hex')\n        )\n        console.log(`setAppConfig inbound_confirmations: ${config.inbound_confirmations}`)\n        await this.setConfig(\n            signer,\n            uaType,\n            majorVersion,\n            minorVersion,\n            remoteChainId,\n            this.sdk.LayerzeroModule.Uln.Config.TYPE_INBOUND_CONFIRMATIONS,\n            aptos.BCS.bcsSerializeUint64(config.inbound_confirmations).reverse() // BCS is little endian, but we want big endian\n        )\n        await this.setConfig(\n            signer,\n            uaType,\n            majorVersion,\n            minorVersion,\n            remoteChainId,\n            this.sdk.LayerzeroModule.Uln.Config.TYPE_OUTBOUND_CONFIRMATIONS,\n            aptos.BCS.bcsSerializeUint64(config.outbound_confirmations).reverse() // BCS is little endian, but we want big endian\n        )\n    }\n}\n","import * as aptos from 'aptos'\n\nimport { BRIDGE_ADDRESS } from '../../constants'\nimport { SDK } from '../../index'\nimport { TypeInfo } from '../../types'\nimport { buildStructTagFromTypeInfo, isErrorOfApiError, isTypeInfo } from '../../utils'\n\n/**\n * Enum representing different coin types.\n */\nexport enum CoinType {\n    APTOS = 'AptosCoin', // native coin\n    // coin that bridge supports, same to bridge::coin module\n    WETH = 'WETH',\n    WBTC = 'WBTC',\n\n    USDC = 'USDC',\n    USDT = 'USDT',\n    BUSD = 'BUSD',\n    USDD = 'USDD',\n}\n\n/**\n * Array of supported coin types.\n */\nexport const supportedTypes = [CoinType.WETH, CoinType.WBTC, CoinType.USDC, CoinType.USDT, CoinType.BUSD, CoinType.USDD]\n\n/**\n * Type representing a bridge coin type.\n */\nexport type BridgeCoinType =\n    | CoinType.WETH\n    | CoinType.WBTC\n    | CoinType.USDC\n    | CoinType.USDT\n    | CoinType.BUSD\n    | CoinType.USDD\n\n/**\n * Type representing a coin type that may be a bridge coin type, a string, or a TypeInfo object.\n */\nexport type MayBeBridgeCoinType = BridgeCoinType | string | TypeInfo\n\n/**\n * Checks if a value is a valid CoinType.\n *\n * @param {CoinType | any} value - The value to check.\n * @returns {boolean} True if the value is a valid CoinType, false otherwise.\n */\nexport function isCoinType(value: CoinType | any): value is CoinType {\n    return Object.values(CoinType).includes(value)\n}\n\n/**\n * Class representing a coin.\n */\nexport class Coin {\n    private sdk: SDK\n    private readonly bridge: aptos.MaybeHexString\n\n    /**\n     * Creates an instance of the Coin class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     * @param {aptos.MaybeHexString} [bridge] - The bridge address.\n     */\n    constructor(sdk: SDK, bridge?: aptos.MaybeHexString) {\n        this.sdk = sdk\n        this.bridge = bridge ?? BRIDGE_ADDRESS[sdk.stage]!\n    }\n\n    /**\n     * Gets the coin type as a string.\n     *\n     * @param {CoinType | string | TypeInfo} coin - The coin type.\n     * @returns {string} The coin type as a string.\n     */\n    getCoinType(coin: CoinType | string | TypeInfo): string {\n        if (isTypeInfo(coin)) {\n            return buildStructTagFromTypeInfo(coin)\n        }\n\n        if (isCoinType(coin)) {\n            switch (coin) {\n                case CoinType.APTOS:\n                    return `0x1::aptos_coin::${coin}`\n                default:\n                    return `${this.bridge}::asset::${coin}`\n            }\n        }\n\n        return coin\n    }\n\n    /**\n     * Creates a payload for transferring a coin.\n     *\n     * @param {CoinType} coin - The coin type.\n     * @param {aptos.MaybeHexString} to - The recipient address.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} amount - The amount to transfer.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    transferPayload(\n        coin: CoinType,\n        to: aptos.MaybeHexString,\n        amount: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): aptos.Types.EntryFunctionPayload {\n        if (coin === CoinType.APTOS) {\n            return {\n                function: `0x1::aptos_account::transfer`,\n                type_arguments: [],\n                arguments: [to, amount],\n            }\n        } else {\n            return {\n                function: `0x1::aptos_account::transfer_coins`,\n                type_arguments: [this.getCoinType(coin)],\n                arguments: [to, amount],\n            }\n        }\n    }\n\n    /**\n     * Transfers a coin.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {CoinType} coin - The coin type.\n     * @param {aptos.MaybeHexString} to - The recipient address.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} amount - The amount to transfer.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async transfer(\n        signer: aptos.AptosAccount,\n        coin: CoinType,\n        to: aptos.MaybeHexString,\n        amount: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.transferPayload(coin, to, amount)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    // ------------------------------ view functions ------------------------------\n\n    /**\n     * Gets the balance of a coin for a given owner.\n     *\n     * @param {CoinType} coin - The coin type.\n     * @param {aptos.MaybeHexString} owner - The owner address.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the balance.\n     */\n    async balance(coin: CoinType, owner: aptos.MaybeHexString): Promise<aptos.BCS.Uint64> {\n        try {\n            const resource = await this.sdk.client.getAccountResource(\n                owner,\n                `0x1::coin::CoinStore<${this.getCoinType(coin)}>`\n            )\n            const { coin: c } = resource.data as { coin: { value: string } }\n            return BigInt(c.value)\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return BigInt(0)\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Checks if an account is registered for a given coin.\n     *\n     * @param {CoinType} coin - The coin type.\n     * @param {aptos.MaybeHexString} accountAddr - The account address.\n     * @returns {Promise<boolean>} A promise that resolves to true if the account is registered, false otherwise.\n     */\n    async isAccountRegistered(coin: CoinType, accountAddr: aptos.MaybeHexString): Promise<boolean> {\n        try {\n            await this.sdk.client.getAccountResource(accountAddr, `0x1::coin::CoinStore<${this.getCoinType(coin)}>`)\n            return true\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return false\n            }\n            throw e\n        }\n    }\n}\n","import * as aptos from 'aptos'\n\nimport { LzApp } from './lzapp'\nimport { SDK } from '../../index'\nimport { UlnConfigType } from '../../types'\nimport { isErrorOfApiError } from '../../utils'\n\n/**\n * Class representing a Counter application.\n */\nexport class Counter {\n    /**\n     * The SDK instance.\n     */\n    private sdk: SDK\n\n    /**\n     * The LzApp instance.\n     */\n    private lzApp: LzApp\n\n    /**\n     * The user application type.\n     */\n    private readonly uaType: string\n\n    /**\n     * The address of the counter.\n     */\n    readonly address: aptos.MaybeHexString\n\n    /**\n     * The length of the send payload.\n     */\n    SEND_PAYLOAD_LENGTH = 4\n\n    /**\n     * Creates an instance of Counter.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     * @param {aptos.MaybeHexString} counter - The counter address.\n     * @param {aptos.MaybeHexString} [lzApp] - The LzApp address.\n     */\n    constructor(sdk: SDK, counter: aptos.MaybeHexString, lzApp?: aptos.MaybeHexString) {\n        this.sdk = sdk\n        this.address = counter\n        this.lzApp = new LzApp(sdk, lzApp || sdk.accounts.layerzero!, counter)\n        this.uaType = `${this.address}::counter::CounterUA`\n    }\n\n    /**\n     * Initializes the counter.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction result.\n     */\n    async initialize(signer: aptos.AptosAccount): Promise<aptos.Types.Transaction> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.address}::counter::init`,\n            type_arguments: [],\n            arguments: [],\n        }\n\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the remote address for a given chain ID.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @returns {Promise<aptos.BCS.Bytes>} The remote address.\n     */\n    async getRemote(remoteChainId: aptos.BCS.Uint16): Promise<aptos.BCS.Bytes> {\n        return this.lzApp.getRemote(remoteChainId)\n    }\n\n    /**\n     * Gets the current count.\n     *\n     * @returns {Promise<aptos.BCS.Uint64>} The current count.\n     */\n    async getCount(): Promise<aptos.BCS.Uint64> {\n        const resource = await this.sdk.client.getAccountResource(this.address, `${this.address}::counter::Counter`)\n        const { i } = resource.data as { i: string }\n        return BigInt(i)\n    }\n\n    /**\n     * Creates a payload for setting a remote address.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Bytes} remoteAddress - The remote address.\n     * @returns {aptos.Types.EntryFunctionPayload} The entry function payload.\n     */\n    setRemotePayload(\n        remoteChainId: aptos.BCS.Uint16,\n        remoteAddress: aptos.BCS.Bytes\n    ): aptos.Types.EntryFunctionPayload {\n        return this.lzApp.setRemotePaylaod(remoteChainId, remoteAddress)\n    }\n\n    /**\n     * Sets a remote address.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Bytes} remoteAddress - The remote address.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction result.\n     */\n    async setRemote(\n        signer: aptos.AptosAccount,\n        remoteChainId: aptos.BCS.Uint16,\n        remoteAddress: aptos.BCS.Bytes\n    ): Promise<aptos.Types.Transaction> {\n        return this.lzApp.setRemote(signer, remoteChainId, remoteAddress)\n    }\n\n    /**\n     * Creates a payload for setting the executor version and address.\n     *\n     * @param {string} uaType - The user application type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint8} executorVersion - The executor version.\n     * @param {string} executorAddress - The executor address.\n     * @returns {aptos.Types.EntryFunctionPayload} The entry function payload.\n     */\n    setExecutorPayload(\n        uaType: string,\n        remoteChainId: aptos.BCS.Uint16,\n        executorVersion: aptos.BCS.Uint8,\n        executorAddress: string\n    ): aptos.Types.EntryFunctionPayload {\n        return this.lzApp.setExecutorPayload(uaType, remoteChainId, executorVersion, executorAddress)\n    }\n\n    /**\n     * Sets the executor version and address.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} uaType - The user application type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint8} executorVersion - The executor version.\n     * @param {string} executorAddress - The executor address.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction result.\n     */\n    async setExecutor(\n        signer: aptos.AptosAccount,\n        uaType: string,\n        remoteChainId: aptos.BCS.Uint16,\n        executorVersion: aptos.BCS.Uint8,\n        executorAddress: string\n    ): Promise<aptos.Types.Transaction> {\n        return this.lzApp.setExecutor(signer, uaType, remoteChainId, executorVersion, executorAddress)\n    }\n\n    /**\n     * Creates a payload for setting the send msglib.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint16} majorVersion - The major version.\n     * @param {aptos.BCS.Uint8} minorVersion - The minor version.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setAppSendMsglibPayload(\n        remoteChainId: aptos.BCS.Uint16,\n        majorVersion: aptos.BCS.Uint16,\n        minorVersion: aptos.BCS.Uint8\n    ): aptos.Types.EntryFunctionPayload {\n        return this.lzApp.setSendMsglibPayload(this.uaType, remoteChainId, majorVersion, minorVersion)\n    }\n\n    /**\n     * Creates a payload for setting the receive msglib.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint16} majorVersion - The major version.\n     * @param {aptos.BCS.Uint8} minorVersion - The minor version.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setAppReceiveMsglibPayload(\n        remoteChainId: aptos.BCS.Uint16,\n        majorVersion: aptos.BCS.Uint16,\n        minorVersion: aptos.BCS.Uint8\n    ): aptos.Types.EntryFunctionPayload {\n        return this.lzApp.setReceiveMsglibPayload(this.uaType, remoteChainId, majorVersion, minorVersion)\n    }\n\n    /**\n     * Creates a payload for setting the application configuration.\n     *\n     * @param {aptos.BCS.Uint16} majorVersion - The major version.\n     * @param {aptos.BCS.Uint8} minorVersion - The minor version.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint8} configType - The configuration type.\n     * @param {aptos.BCS.Bytes} configBytes - The configuration bytes.\n     * @returns {aptos.Types.EntryFunctionPayload} The entry function payload.\n     */\n    setAppConfigPayload(\n        majorVersion: aptos.BCS.Uint16,\n        minorVersion: aptos.BCS.Uint8,\n        remoteChainId: aptos.BCS.Uint16,\n        configType: aptos.BCS.Uint8,\n        configBytes: aptos.BCS.Bytes\n    ): aptos.Types.EntryFunctionPayload {\n        return this.lzApp.setConfigPayload(\n            this.uaType,\n            majorVersion,\n            minorVersion,\n            remoteChainId,\n            configType,\n            configBytes\n        )\n    }\n\n    /**\n     * Sets the application configuration.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} majorVersion - The major version.\n     * @param {aptos.BCS.Uint8} minorVersion - The minor version.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint8} configType - The configuration type.\n     * @param {aptos.BCS.Bytes} configBytes - The configuration bytes.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction result.\n     */\n    async setAppConfig(\n        signer: aptos.AptosAccount,\n        majorVersion: aptos.BCS.Uint16,\n        minorVersion: aptos.BCS.Uint8,\n        remoteChainId: aptos.BCS.Uint16,\n        configType: aptos.BCS.Uint8,\n        configBytes: aptos.BCS.Bytes\n    ): Promise<aptos.Types.Transaction> {\n        console.log(`configType: ${configType}, configBytes: ${configBytes}`)\n        return this.lzApp.setConfig(\n            signer,\n            this.uaType,\n            majorVersion,\n            minorVersion,\n            remoteChainId,\n            configType,\n            configBytes\n        )\n    }\n\n    /**\n     * Sets the application configuration bundle.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} majorVersion - The major version.\n     * @param {aptos.BCS.Uint8} minorVersion - The minor version.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {UlnConfigType} config - The configuration bundle.\n     * @returns {Promise<void>} A promise that resolves when the configuration is set.\n     */\n    async setAppConfigBundle(\n        signer: aptos.AptosAccount,\n        majorVersion: aptos.BCS.Uint16,\n        minorVersion: aptos.BCS.Uint8,\n        remoteChainId: aptos.BCS.Uint16,\n        config: UlnConfigType\n    ): Promise<void> {\n        await this.lzApp.setConfigBundle(signer, this.uaType, majorVersion, minorVersion, remoteChainId, config)\n    }\n\n    /**\n     * Creates a payload for sending data to a remote chain.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} fee - The fee amount.\n     * @param {Uint8Array} adapterParams - The adapter parameters.\n     * @param {Uint8Array} msglibParams - The msglib parameters.\n     * @returns {aptos.Types.EntryFunctionPayload} The entry function payload.\n     */\n    sendToRemotePayload(\n        remoteChainId: aptos.BCS.Uint16,\n        fee: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        adapterParams: Uint8Array,\n        msglibParams: Uint8Array\n    ): aptos.Types.EntryFunctionPayload {\n        const result: aptos.Types.EntryFunctionPayload = {\n            function: `${this.address}::counter::send_to_remote`,\n            type_arguments: [],\n            arguments: [remoteChainId, fee, Array.from(adapterParams), Array.from(msglibParams)],\n        }\n        return result\n    }\n\n    /**\n     * Sends data to a remote chain.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} fee - The fee amount.\n     * @param {Uint8Array} adapterParams - The adapter parameters.\n     * @param {Uint8Array} msglibParams - The msglib parameters.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction result.\n     */\n    async sendToRemote(\n        signer: aptos.AptosAccount,\n        remoteChainId: aptos.BCS.Uint16,\n        fee: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        adapterParams: Uint8Array,\n        msglibParams: Uint8Array\n    ): Promise<aptos.Types.Transaction> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.address}::counter::send_to_remote`,\n            type_arguments: [],\n            arguments: [remoteChainId, fee, Array.from(adapterParams), Array.from(msglibParams)],\n        }\n\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Receives data from a remote chain.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Bytes} remoteAddress - The remote address.\n     * @param {aptos.BCS.Bytes} payload - The payload data.\n     * @returns {Promise<aptos.Types.Transaction>} The transaction result.\n     */\n    async lzReceive(\n        signer: aptos.AptosAccount,\n        remoteChainId: aptos.BCS.Uint16,\n        remoteAddress: aptos.BCS.Bytes,\n        payload: aptos.BCS.Bytes\n    ): Promise<aptos.Types.Transaction> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.address}::counter::lz_receive`,\n            type_arguments: [],\n            arguments: [remoteChainId, Array.from(remoteAddress), Array.from(payload)],\n        }\n\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Checks if a counter is created for a given address.\n     *\n     * @param {aptos.MaybeHexString} address - The address to check.\n     * @returns {Promise<boolean>} True if the counter is created, false otherwise.\n     */\n    async isCounterCreated(address: aptos.MaybeHexString): Promise<boolean> {\n        try {\n            const owner = aptos.HexString.ensure(address).toString()\n            await this.sdk.client.getAccountResource(this.address, `${owner}::counter::Counter`)\n            return true\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return false\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Gets the fee quote for sending a message to a remote chain.\n     *\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {string} adapterParams - The adapter parameters.\n     * @param {string} msglibParams - The msglib parameters.\n     * @param {boolean} payInZro - Whether to pay the fee in ZRO tokens.\n     * @returns {Promise<[aptos.BCS.Uint64, aptos.BCS.Uint64]>} A tuple containing the native fee and ZRO fee.\n     */\n    async quoteFee(\n        remoteChainId: aptos.BCS.Uint16,\n        adapterParams: string,\n        msglibParams: string,\n        payInZro: boolean\n    ): Promise<[aptos.BCS.Uint64, aptos.BCS.Uint64]> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.address}::counter::quote_fee`,\n            type_arguments: [],\n            arguments: [remoteChainId.toString(), adapterParams, msglibParams, payInZro],\n        }\n        const view = await this.sdk.viewFunction(payload)\n        return view[0] as [aptos.BCS.Uint64, aptos.BCS.Uint64]\n    }\n}\n","import * as aptos from 'aptos'\n\nimport { SDK } from '../../index'\nimport { fullAddress, generateMultisig, stringToUint8Array } from '../../utils'\n\n/**\n * Class representing a Multisig Oracle.\n */\nexport class MultisigOracle {\n    readonly address: aptos.MaybeHexString\n    public readonly module\n    public readonly moduleName\n\n    /**\n     * Creates an instance of the MultisigOracle class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     * @param {aptos.MaybeHexString} address - The address of the multisig oracle.\n     */\n    constructor(\n        public sdk: SDK,\n        address: aptos.MaybeHexString\n    ) {\n        this.address = address\n        this.module = `${this.address}::multisig_oracle`\n        this.moduleName = 'multisig_oracle::multisig_oracle'\n    }\n\n    // Validator Functions\n    /**\n     * Gets the payload for proposing a transaction.\n     *\n     * @param {Uint8Array} hash - The hash of the transaction.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} confirmations - The number of confirmations required.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    getProposePayload(\n        hash: Uint8Array,\n        confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::propose`,\n            type_arguments: [],\n            arguments: [hash, confirmations],\n        }\n    }\n\n    /**\n     * Proposes a transaction.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {Uint8Array} hash - The hash of the transaction.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} confirmations - The number of confirmations required.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async propose(\n        signer: aptos.AptosAccount,\n        hash: Uint8Array,\n        confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.getProposePayload(hash, confirmations)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the entry function for proposing a transaction.\n     *\n     * @param {aptos.MaybeHexString} hash - The hash of the transaction.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} confirmations - The number of confirmations required.\n     * @returns {aptos.TxnBuilderTypes.TransactionPayloadEntryFunction} The entry function.\n     */\n    getProposeEntryFunction(\n        hash: aptos.MaybeHexString,\n        confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): aptos.TxnBuilderTypes.TransactionPayloadEntryFunction {\n        const serializer = new aptos.BCS.Serializer()\n        serializer.serializeBytes(Uint8Array.from(Buffer.from(hash.toString(), 'hex')))\n        return new aptos.TxnBuilderTypes.TransactionPayloadEntryFunction(\n            aptos.TxnBuilderTypes.EntryFunction.natural(\n                this.module,\n                'propose',\n                [],\n                [serializer.getBytes(), aptos.BCS.bcsSerializeUint64(confirmations)]\n            )\n        )\n    }\n\n    /**\n     * Gets the payload for transferring the validator role.\n     *\n     * @param {aptos.MaybeHexString} newValidator - The new validator address.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    getTransferValidatorPayload(newValidator: aptos.MaybeHexString): aptos.Types.EntryFunctionPayload {\n        const result: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::transfer_validator`,\n            type_arguments: [],\n            arguments: [newValidator],\n        }\n        return result\n    }\n\n    /**\n     * Sets the validator.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.MaybeHexString} newValidator - The new validator address.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setValidator(\n        signer: aptos.AptosAccount,\n        newValidator: aptos.MaybeHexString\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.getTransferValidatorPayload(newValidator)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the payload for setting an admin.\n     *\n     * @param {aptos.MaybeHexString} candidate - The candidate address.\n     * @param {boolean} active - The active state.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    getSetAdminPayload(candidate: aptos.MaybeHexString, active: boolean): aptos.Types.EntryFunctionPayload {\n        const result: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::set_admin`,\n            type_arguments: [],\n            arguments: [candidate, active],\n        }\n        return result\n    }\n\n    /**\n     * Sets an admin.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.MaybeHexString} candidate - The candidate address.\n     * @param {boolean} active - The active state.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setAdmin(\n        signer: aptos.AptosAccount,\n        candidate: aptos.MaybeHexString,\n        active: boolean\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.getSetAdminPayload(candidate, active)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the payload for allowlisting a user address.\n     *\n     * @param {aptos.MaybeHexString} ua - The user address.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    getAllowlistPayload(ua: aptos.MaybeHexString): aptos.Types.EntryFunctionPayload {\n        const result: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::allowlist`,\n            type_arguments: [],\n            arguments: [ua],\n        }\n        return result\n    }\n\n    /**\n     * Allowlists a user address.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.MaybeHexString} ua - The user address.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async allowlist(signer: aptos.AptosAccount, ua: aptos.MaybeHexString): Promise<aptos.Types.Transaction> {\n        const transaction = this.getAllowlistPayload(ua)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the payload for denylisting a user address.\n     *\n     * @param {aptos.MaybeHexString} ua - The user address.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    getDenylistPayload(ua: aptos.MaybeHexString): aptos.Types.EntryFunctionPayload {\n        const result: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::denylist`,\n            type_arguments: [],\n            arguments: [ua],\n        }\n        return result\n    }\n\n    /**\n     * Denylists a user address.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.MaybeHexString} ua - The user address.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async denylist(signer: aptos.AptosAccount, ua: aptos.MaybeHexString): Promise<aptos.Types.Transaction> {\n        const transaction = this.getDenylistPayload(ua)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    // Admin Functions\n    /**\n     * Gets the payload for setting the fee.\n     *\n     * @param {aptos.BCS.Uint64} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint64} baseFee - The base fee.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    getSetFeePayload(remoteChainId: aptos.BCS.Uint64, baseFee: aptos.BCS.Uint64): aptos.Types.EntryFunctionPayload {\n        const result: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::set_fee`,\n            type_arguments: [],\n            arguments: [remoteChainId, baseFee],\n        }\n        return result\n    }\n\n    /**\n     * Sets the fee.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint64} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint64} baseFee - The base fee.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setFee(\n        signer: aptos.AptosAccount,\n        remoteChainId: aptos.BCS.Uint64,\n        baseFee: aptos.BCS.Uint64\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.getSetFeePayload(remoteChainId, baseFee)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the payload for withdrawing the fee.\n     *\n     * @param {aptos.MaybeHexString} receiver - The receiver address.\n     * @param {aptos.BCS.Uint64} amount - The amount to withdraw.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    getWithdrawFeePayload(receiver: aptos.MaybeHexString, amount: aptos.BCS.Uint64): aptos.Types.EntryFunctionPayload {\n        const result: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::withdraw_fee`,\n            type_arguments: [],\n            arguments: [receiver, amount],\n        }\n        return result\n    }\n\n    /**\n     * Withdraws the fee.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.MaybeHexString} receiver - The receiver address.\n     * @param {aptos.BCS.Uint64} amount - The amount to withdraw.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async withdrawFee(\n        signer: aptos.AptosAccount,\n        receiver: aptos.MaybeHexString,\n        amount: aptos.BCS.Uint64\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.getWithdrawFeePayload(receiver, amount)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    // View Functions\n    /**\n     * Checks if an account is an admin.\n     *\n     * @param {aptos.MaybeHexString} account - The account address.\n     * @returns {Promise<boolean>} A promise that resolves to true if the account is an admin, false otherwise.\n     */\n    async isAdmin(account: aptos.MaybeHexString): Promise<boolean> {\n        const resource: { data: any } = await this.sdk.client.getAccountResource(this.address, `${this.module}::Config`)\n        const { admins } = resource.data\n        const acc = aptos.HexString.ensure(account).toShortString()\n        return admins.includes(acc)\n    }\n\n    /**\n     * Gets the validator address.\n     *\n     * @returns {Promise<aptos.MaybeHexString>} A promise that resolves to the validator address.\n     */\n    async getValidator(): Promise<aptos.MaybeHexString> {\n        const resource: { data: any } = await this.sdk.client.getAccountResource(this.address, `${this.module}::Config`)\n        return resource.data.validator as aptos.MaybeHexString\n    }\n\n    /**\n     * Checks if an account is a validator.\n     *\n     * @param {aptos.MaybeHexString} validator - The validator address.\n     * @returns {Promise<boolean>} A promise that resolves to true if the account is a validator, false otherwise.\n     */\n    async isValidator(validator: aptos.MaybeHexString): Promise<boolean> {\n        const _validator = await this.getValidator()\n        const val = aptos.HexString.ensure(validator).toShortString()\n        return _validator === val\n    }\n\n    /**\n     * Gets the multisig public key and address.\n     *\n     * @param {string[]} validatorPubKeys - The validator public keys.\n     * @returns {Promise<[aptos.TxnBuilderTypes.MultiEd25519PublicKey, string]>} A promise that resolves to the multisig public key and address.\n     */\n    async getMultisigPubKeyAndAddress(\n        validatorPubKeys: string[]\n    ): Promise<[aptos.TxnBuilderTypes.MultiEd25519PublicKey, string]> {\n        const pubKeys = Object.keys(validatorPubKeys).map((key) => stringToUint8Array(key))\n        return generateMultisig([...pubKeys], pubKeys.length)\n    }\n\n    /**\n     * Gets the resource address.\n     *\n     * @returns {Promise<string>} A promise that resolves to the resource address.\n     */\n    async getResourceAddress(): Promise<string> {\n        const resource = await this.sdk.client.getAccountResource(this.address, `${this.module}::Config`)\n        const { resource_addr } = resource.data as { resource_addr: string }\n        return fullAddress(resource_addr).toString()\n    }\n}\n","import { keccak_256 } from '@noble/hashes/sha3'\nimport { bytesToHex } from '@noble/hashes/utils'\nimport * as aptos from 'aptos'\nimport BN from 'bn.js'\nimport { ExtendedBuffer } from 'extended-buffer'\n\nimport { SDK } from '../../index'\nimport { fullAddress, stringToUint8Array } from '../../utils'\n\n/**\n * Class representing a Multisig Oracle TSS.\n */\nexport class MultisigOracleTss {\n    readonly address: aptos.MaybeHexString\n    public readonly module\n    public readonly moduleName\n\n    /**\n     * Creates an instance of the MultisigOracleTss class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     * @param {aptos.MaybeHexString} address - The address of the multisig oracle.\n     */\n    constructor(\n        public sdk: SDK,\n        address: aptos.MaybeHexString\n    ) {\n        this.address = address\n        this.module = `${this.address}::oracle`\n        this.moduleName = 'oracle::oracle'\n    }\n\n    // Validator Functions\n    /**\n     * Gets the payload for proposing a transaction.\n     *\n     * @param {Uint8Array} hash - The hash of the transaction.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} confirmations - The number of confirmations.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} expiration - The expiration time.\n     * @param {Uint8Array} signatures - The signatures.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    public getProposePayload(\n        hash: Uint8Array,\n        confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        signatures: Uint8Array\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::mso_propose`,\n            type_arguments: [],\n            arguments: [Array.from(hash), confirmations, expiration, Array.from(signatures)],\n        }\n    }\n\n    /**\n     * Proposes a transaction.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {Uint8Array} hash - The hash of the transaction.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} confirmations - The number of confirmations.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} expiration - The expiration time.\n     * @param {Uint8Array} signatures - The signatures.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    public async propose(\n        signer: aptos.AptosAccount,\n        hash: Uint8Array,\n        confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        signatures: Uint8Array\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.getProposePayload(hash, confirmations, expiration, signatures)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the payload for setting a validator.\n     *\n     * @param {Uint8Array} validator - The validator address.\n     * @param {boolean} active - Whether the validator is active.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} expiration - The expiration time.\n     * @param {Uint8Array} signatures - The signatures.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    public getSetValidatorPayload(\n        validator: Uint8Array,\n        active: boolean,\n        expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        signatures: Uint8Array\n    ): aptos.Types.EntryFunctionPayload {\n        const result: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::mso_set_validator`,\n            type_arguments: [],\n            arguments: [Array.from(validator), active, expiration, Array.from(signatures)],\n        }\n        return result\n    }\n\n    /**\n     * Sets a validator.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {Uint8Array} validator - The validator address.\n     * @param {boolean} active - Whether the validator is active.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} expiration - The expiration time.\n     * @param {Uint8Array} signatures - The signatures.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    public async setValidator(\n        signer: aptos.AptosAccount,\n        validator: Uint8Array,\n        active: boolean,\n        expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        signatures: Uint8Array\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.getSetValidatorPayload(validator, active, expiration, signatures)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the payload for setting the threshold.\n     *\n     * @param {aptos.BCS.Uint8} threshold - The threshold.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} expiration - The expiration time.\n     * @param {Uint8Array} signatures - The signatures.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    public getSetThresholdPayload(\n        threshold: aptos.BCS.Uint8,\n        expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        signatures: Uint8Array\n    ): aptos.Types.EntryFunctionPayload {\n        const result: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::mso_set_threshold`,\n            type_arguments: [],\n            arguments: [threshold, expiration, Array.from(signatures)],\n        }\n        return result\n    }\n\n    /**\n     * Sets the threshold.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint8} threshold - The threshold.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} expiration - The expiration time.\n     * @param {Uint8Array} signatures - The signatures.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    public async setThreshold(\n        signer: aptos.AptosAccount,\n        threshold: aptos.BCS.Uint8,\n        expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        signatures: Uint8Array\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.getSetThresholdPayload(threshold, expiration, signatures)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the payload for setting an admin.\n     *\n     * @param {aptos.MaybeHexString} candidate - The candidate address.\n     * @param {boolean} active - Whether the admin is active.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} expiration - The expiration time.\n     * @param {Uint8Array} signatures - The signatures.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    public getSetAdminPayload(\n        candidate: aptos.MaybeHexString,\n        active: boolean,\n        expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        signatures: Uint8Array\n    ): aptos.Types.EntryFunctionPayload {\n        const result: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::mso_set_admin`,\n            type_arguments: [],\n            arguments: [candidate, active, expiration, Array.from(signatures)],\n        }\n        return result\n    }\n\n    /**\n     * Sets an admin.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.MaybeHexString} candidate - The candidate address.\n     * @param {boolean} active - Whether the admin is active.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} expiration - The expiration time.\n     * @param {Uint8Array} signatures - The signatures.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    public async setAdmin(\n        signer: aptos.AptosAccount,\n        candidate: aptos.MaybeHexString,\n        active: boolean,\n        expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        signatures: Uint8Array\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.getSetAdminPayload(candidate, active, expiration, signatures)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the payload for allowlisting a user.\n     *\n     * @param {aptos.MaybeHexString} ua - The user address.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} expiration - The expiration time.\n     * @param {Uint8Array} signatures - The signatures.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    public getAllowlistPayload(\n        ua: aptos.MaybeHexString,\n        expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        signatures: Uint8Array\n    ): aptos.Types.EntryFunctionPayload {\n        const result: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::mso_allowlist`,\n            type_arguments: [],\n            arguments: [ua, expiration, Array.from(signatures)],\n        }\n        return result\n    }\n\n    /**\n     * Allowlists a user.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.MaybeHexString} ua - The user address.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} expiration - The expiration time.\n     * @param {Uint8Array} signatures - The signatures.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    public async allowlist(\n        signer: aptos.AptosAccount,\n        ua: aptos.MaybeHexString,\n        expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        signatures: Uint8Array\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.getAllowlistPayload(ua, expiration, signatures)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the payload for denylisting a user.\n     *\n     * @param {aptos.MaybeHexString} ua - The user address.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} expiration - The expiration time.\n     * @param {Uint8Array} signatures - The signatures.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    public getDenylistPayload(\n        ua: aptos.MaybeHexString,\n        expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        signatures: Uint8Array\n    ): aptos.Types.EntryFunctionPayload {\n        const result: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::mso_denylist`,\n            type_arguments: [],\n            arguments: [ua, expiration, Array.from(signatures)],\n        }\n        return result\n    }\n\n    /**\n     * Denylists a user.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.MaybeHexString} ua - The user address.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} expiration - The expiration time.\n     * @param {Uint8Array} signatures - The signatures.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    public async denylist(\n        signer: aptos.AptosAccount,\n        ua: aptos.MaybeHexString,\n        expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        signatures: Uint8Array\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.getDenylistPayload(ua, expiration, signatures)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    // Admin Functions\n    /**\n     * Gets the payload for initializing the configuration.\n     *\n     * @param {Uint8Array[]} validators - The validators.\n     * @param {aptos.BCS.Uint8} threshold - The threshold.\n     * @param {aptos.MaybeHexString[]} admins - The admins.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    public getInitConfigPayload(validators: Uint8Array[], threshold: aptos.BCS.Uint8, admins: aptos.MaybeHexString[]) {\n        return {\n            function: `${this.module}::mso_init_config`,\n            type_arguments: [],\n            arguments: [validators, threshold, admins],\n        }\n    }\n\n    /**\n     * Initializes the configuration.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {Uint8Array[]} validators - The validators.\n     * @param {aptos.BCS.Uint8} threshold - The threshold.\n     * @param {aptos.MaybeHexString[]} admins - The admins.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    public async initConfig(\n        signer: aptos.AptosAccount,\n        validators: Uint8Array[],\n        threshold: aptos.BCS.Uint8,\n        admins: aptos.MaybeHexString[]\n    ) {\n        const transaction = this.getInitConfigPayload(validators, threshold, admins)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the payload for setting the fee.\n     *\n     * @param {aptos.BCS.Uint64} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint64} baseFee - The base fee.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    public getSetFeePayload(remoteChainId: aptos.BCS.Uint64, baseFee: aptos.BCS.Uint64) {\n        return {\n            function: `${this.module}::mso_set_fee`,\n            type_arguments: [],\n            arguments: [remoteChainId, baseFee],\n        }\n    }\n\n    /**\n     * Gets the payload for upgrading the contract.\n     *\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    public getUpgradePayload() {\n        return {\n            function: `${this.module}::upgrade`,\n            type_arguments: [],\n            arguments: [],\n        }\n    }\n\n    /**\n     * Upgrades the contract.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    public async upgrade(signer: aptos.AptosAccount): Promise<aptos.Types.Transaction> {\n        const transaction = this.getUpgradePayload()\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the payload for setting the use of MSO.\n     *\n     * @param {boolean} useMso - Whether to use MSO.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    public getSetUseMsoPayload(useMso: boolean) {\n        return {\n            function: `${this.module}::mso_set_use_mso`,\n            type_arguments: [],\n            arguments: [useMso],\n        }\n    }\n\n    /**\n     * Sets the use of MSO.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {boolean} useMso - Whether to use MSO.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    public async setUseMso(signer: aptos.AptosAccount, useMso: boolean): Promise<aptos.Types.Transaction> {\n        const transaction = this.getSetUseMsoPayload(useMso)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Sets the fee.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint64} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint64} baseFee - The base fee.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    public async setFee(\n        signer: aptos.AptosAccount,\n        remoteChainId: aptos.BCS.Uint64,\n        baseFee: aptos.BCS.Uint64\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.getSetFeePayload(remoteChainId, baseFee)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the payload for withdrawing the fee.\n     *\n     * @param {aptos.MaybeHexString} receiver - The receiver address.\n     * @param {aptos.BCS.Uint64} amount - The amount to withdraw.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    public getWithdrawFeePayload(\n        receiver: aptos.MaybeHexString,\n        amount: aptos.BCS.Uint64\n    ): aptos.Types.EntryFunctionPayload {\n        const result: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::mso_withdraw_fee`,\n            type_arguments: [],\n            arguments: [receiver, amount],\n        }\n        return result\n    }\n\n    /**\n     * Withdraws the fee.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.MaybeHexString} receiver - The receiver address.\n     * @param {aptos.BCS.Uint64} amount - The amount to withdraw.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    public async withdrawFee(\n        signer: aptos.AptosAccount,\n        receiver: aptos.MaybeHexString,\n        amount: aptos.BCS.Uint64\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.getWithdrawFeePayload(receiver, amount)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    // View Functions\n    /**\n     * Gets the list of admin addresses.\n     *\n     * @returns {Promise<aptos.MaybeHexString[]>} A promise that resolves to the list of admin addresses.\n     */\n    public async getAdmins(): Promise<aptos.MaybeHexString[]> {\n        const resource: { data: any } = await this.sdk.client.getAccountResource(\n            this.address,\n            `${this.module}::MsoConfig`\n        )\n        return resource.data.admins as aptos.MaybeHexString[]\n    }\n\n    /**\n     * Gets the list of validator addresses.\n     *\n     * @returns {Promise<aptos.MaybeHexString[]>} A promise that resolves to the list of validator addresses.\n     */\n    public async getValidators(): Promise<aptos.MaybeHexString[]> {\n        const resource: { data: any } = await this.sdk.client.getAccountResource(\n            this.address,\n            `${this.module}::MsoConfig`\n        )\n        return resource.data.validators as aptos.MaybeHexString[]\n    }\n\n    /**\n     * Gets the threshold value.\n     *\n     * @returns {Promise<aptos.BCS.Uint8>} A promise that resolves to the threshold value.\n     */\n    public async getThreshold(): Promise<aptos.BCS.Uint8> {\n        const resource: { data: any } = await this.sdk.client.getAccountResource(\n            this.address,\n            `${this.module}::MsoConfig`\n        )\n        return parseInt(resource.data.threshold)\n    }\n\n    /**\n     * Gets the resource address.\n     *\n     * @returns {Promise<string>} A promise that resolves to the resource address.\n     */\n    public async getResourceAddress(): Promise<string> {\n        const resource = await this.sdk.client.getAccountResource(this.address, `${this.module}::Config`)\n        const { resource_addr } = resource.data as { resource_addr: string }\n        return fullAddress(resource_addr).toString()\n    }\n\n    /**\n     * Checks if an account is an admin.\n     *\n     * @param {aptos.MaybeHexString} account - The account address.\n     * @returns {Promise<boolean>} A promise that resolves to true if the account is an admin, false otherwise.\n     */\n    public async isAdmin(account: aptos.MaybeHexString): Promise<boolean> {\n        const admins = await this.getAdmins()\n        const _admins = admins.map((a) => a.toString().toLowerCase())\n        const acc = aptos.HexString.ensure(account).toShortString()\n        return _admins.includes(acc.toString().toLowerCase())\n    }\n\n    /**\n     * Checks if an account is a validator.\n     *\n     * @param {aptos.MaybeHexString} validator - The validator address.\n     * @returns {Promise<boolean>} A promise that resolves to true if the account is a validator, false otherwise.\n     */\n    public async isValidator(validator: aptos.MaybeHexString): Promise<boolean> {\n        const validators = await this.getValidators()\n        const _validators = validators.map((v) => v.toString().toLowerCase())\n        const val = aptos.HexString.ensure(validator)\n        return _validators.includes(val.toString().toLowerCase())\n    }\n\n    // Hashing functions\n    /**\n     * Hashes the propose function data.\n     *\n     * @param {aptos.MaybeHexString} hash - The hash.\n     * @param {number} blockConfirmation - The block confirmation.\n     * @param {number} expiration - The expiration time.\n     * @returns {string} The hashed propose function data.\n     */\n    public hashPropose(hash: aptos.MaybeHexString, blockConfirmation: number, expiration: number): string {\n        const encoded_data = new ExtendedBuffer()\n        encoded_data.writeBuffer(Buffer.from(stringToUint8Array(getAptosFunctionSignature('propose'))))\n        encoded_data.writeBuffer(Buffer.from(stringToUint8Array(hash.toString())))\n        encoded_data.writeBuffer(new BN(blockConfirmation.toString()).toArrayLike(Buffer, 'be', 8))\n        encoded_data.writeBuffer(new BN(expiration.toString()).toArrayLike(Buffer, 'be', 8))\n        return keccak256Hash(encoded_data.buffer.toString('hex'))\n    }\n\n    /**\n     * Hashes the set validator function data.\n     *\n     * @param {aptos.MaybeHexString} validator - The validator address.\n     * @param {boolean} active - The active state.\n     * @param {number} expiration - The expiration time.\n     * @returns {string} The hashed set validator function data.\n     */\n    public hashSetValidator(validator: aptos.MaybeHexString, active: boolean, expiration: number): string {\n        const encoded_data = new ExtendedBuffer()\n        encoded_data.writeBuffer(Buffer.from(stringToUint8Array(getAptosFunctionSignature('set_validator'))))\n        encoded_data.writeBuffer(Buffer.from(stringToUint8Array(validator.toString())))\n        encoded_data.writeUInt8(active ? 1 : 0)\n        encoded_data.writeBuffer(new BN(expiration.toString()).toArrayLike(Buffer, 'be', 8))\n        return keccak256Hash(encoded_data.buffer.toString('hex'))\n    }\n\n    /**\n     * Hashes the set threshold function data.\n     *\n     * @param {aptos.BCS.Uint8} threshold - The threshold value.\n     * @param {number} expiration - The expiration time.\n     * @returns {string} The hashed set threshold function data.\n     */\n    public hashSetThreshold(threshold: aptos.BCS.Uint8, expiration: number): string {\n        const encoded_data = new ExtendedBuffer()\n        encoded_data.writeBuffer(Buffer.from(stringToUint8Array(getAptosFunctionSignature('set_threshold'))))\n        encoded_data.writeBuffer(new BN(threshold).toArrayLike(Buffer, 'be', 8))\n        encoded_data.writeBuffer(new BN(expiration.toString()).toArrayLike(Buffer, 'be', 8))\n        return keccak256Hash(encoded_data.buffer.toString('hex'))\n    }\n\n    /**\n     * Hashes the allowlist function data.\n     *\n     * @param {aptos.MaybeHexString} ua - The user address.\n     * @param {number} expiration - The expiration time.\n     * @returns {string} The hashed allowlist function data.\n     */\n    public hashAllowlist(ua: aptos.MaybeHexString, expiration: number): string {\n        const encoded_data = new ExtendedBuffer()\n        encoded_data.writeBuffer(Buffer.from(stringToUint8Array(getAptosFunctionSignature('allowlist'))))\n        encoded_data.writeBuffer(Buffer.from(stringToUint8Array(ua.toString())))\n        encoded_data.writeBuffer(new BN(expiration.toString()).toArrayLike(Buffer, 'be', 8))\n        return keccak256Hash(encoded_data.buffer.toString('hex'))\n    }\n\n    /**\n     * Hashes the denylist function data.\n     *\n     * @param {aptos.MaybeHexString} ua - The user address.\n     * @param {number} expiration - The expiration time.\n     * @returns {string} The hashed denylist function data.\n     */\n    public hashDenylist(ua: aptos.MaybeHexString, expiration: number): string {\n        const encoded_data = new ExtendedBuffer()\n        encoded_data.writeBuffer(Buffer.from(stringToUint8Array(getAptosFunctionSignature('denylist'))))\n        encoded_data.writeBuffer(Buffer.from(stringToUint8Array(ua.toString())))\n        encoded_data.writeBuffer(new BN(expiration.toString()).toArrayLike(Buffer, 'be', 8))\n        return keccak256Hash(encoded_data.buffer.toString('hex'))\n    }\n}\n\n/**\n * Get the Aptos function signature.\n * This is the first 4 bytes of the keccak256 hash of the BCS serialized function name in hex.\n *\n * @param {string} funcName - The name of the function.\n * @returns {string} The function signature as a hex string.\n */\nexport function getAptosFunctionSignature(funcName: string): string {\n    const encoded_data = new ExtendedBuffer()\n    const funcNameHexStr = Buffer.from(funcName).toString('hex')\n    const funcNameBcs = aptos.BCS.bcsSerializeBytes(stringToUint8Array(funcNameHexStr))\n    encoded_data.writeBuffer(Buffer.from(funcNameBcs))\n    return bytesToHex(keccak_256(encoded_data.buffer)).slice(0, 8)\n}\n\n/**\n * Computes the Keccak-256 hash of the given data.\n *\n * @param {string} data - The data to hash.\n * @returns {string} The Keccak-256 hash as a hex string.\n */\nexport function keccak256Hash(data: string): string {\n    const encoded_data = new ExtendedBuffer()\n    encoded_data.writeBuffer(Buffer.from(stringToUint8Array(data)))\n    return bytesToHex(keccak_256(encoded_data.buffer))\n}\n","import * as aptos from 'aptos'\n\nimport { SDK } from '../../index'\nimport { isErrorOfApiError } from '../../utils'\n\nimport { LzApp } from './lzapp'\n\n/**\n * Interface representing the fee configuration.\n */\nexport interface FeeConfig {\n    /**\n     * The owner of the fee.\n     */\n    fee_owner: string\n\n    /**\n     * The default fee basis points.\n     */\n    default_fee_bp: string\n\n    /**\n     * The handle for the chain ID to fee basis points mapping.\n     */\n    chain_id_to_fee_bp: {\n        /**\n         * The handle for the mapping.\n         */\n        handle: string\n    }\n}\n\n/**\n * Interface representing the global store.\n */\nexport interface GlobalStore {\n    /**\n     * Indicates if the proxy is enabled.\n     */\n    proxy: boolean\n\n    /**\n     * The LD to SD rate.\n     */\n    ld2sd_rate: string\n\n    /**\n     * The fee configuration.\n     */\n    fee_config: FeeConfig\n\n    /**\n     * Indicates if custom adapter parameters are enabled.\n     */\n    custom_adapter_params: boolean\n}\n\n/**\n * Enum representing the packet types.\n */\nexport enum PacketType {\n    /**\n     * Send packet type.\n     */\n    SEND,\n}\n\n/**\n * Class representing an OFT (Omnichain Fungible Token).\n */\nexport class OFT {\n    readonly address: aptos.MaybeHexString\n    readonly module: string\n    SEND_PAYLOAD_LENGTH = 41 //\n    private sdk: SDK\n    private lzApp: aptos.MaybeHexString\n\n    /**\n     * Creates an instance of the OFT class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     */\n    constructor(sdk: SDK) {\n        this.sdk = sdk\n        this.address = sdk.accounts.layerzero_apps!\n        this.lzApp = sdk.accounts.layerzero!\n        this.module = `${this.address}::oft`\n    }\n\n    /**\n     * Sets the application configuration.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} oftType - The OFT type.\n     * @param {aptos.BCS.Uint16} major - The major version.\n     * @param {aptos.BCS.Uint8} minor - The minor version.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Uint8} configType - The configuration type.\n     * @param {aptos.BCS.Bytes} configBytes - The configuration bytes.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setAppConfig(\n        signer: aptos.AptosAccount,\n        oftType: string,\n        major: aptos.BCS.Uint16,\n        minor: aptos.BCS.Uint8,\n        remoteChainId: aptos.BCS.Uint16,\n        configType: aptos.BCS.Uint8,\n        configBytes: aptos.BCS.Bytes\n    ): Promise<aptos.Types.Transaction> {\n        const address = this.getTypeAddress(oftType)\n        const lzApp = new LzApp(this.sdk, this.lzApp, address)\n        return lzApp.setConfig(signer, oftType, major, minor, remoteChainId, configType, configBytes)\n    }\n\n    /**\n     * Gets the minimum destination gas.\n     *\n     * @param {string} oftType - The OFT type.\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Uint64} type - The type.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the minimum destination gas.\n     */\n    async getMinDstGas(\n        oftType: string,\n        dstChainId: aptos.BCS.Uint16,\n        type: aptos.BCS.Uint64\n    ): Promise<aptos.BCS.Uint64> {\n        const address = this.getTypeAddress(oftType)\n        const lzApp = new LzApp(this.sdk, this.lzApp, address)\n        return lzApp.getMinDstGas(oftType, dstChainId, type)\n    }\n\n    /**\n     * Gets the payload for setting the minimum destination gas.\n     *\n     * @param {string} oftType - The OFT type.\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Uint64} packetType - The packet type.\n     * @param {aptos.BCS.Uint64} minGas - The minimum gas.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setMinDstGasPayload(\n        oftType: string,\n        dstChainId: aptos.BCS.Uint16,\n        packetType: aptos.BCS.Uint64,\n        minGas: aptos.BCS.Uint64\n    ): aptos.Types.EntryFunctionPayload {\n        const address = this.getTypeAddress(oftType)\n        const lzApp = new LzApp(this.sdk, this.lzApp, address)\n        return lzApp.setMinDstPayload(oftType, dstChainId, packetType, minGas)\n    }\n\n    /**\n     * Checks if custom adapter parameters are enabled.\n     *\n     * @param {string} oftType - The OFT type.\n     * @returns {Promise<boolean>} A promise that resolves to true if custom adapter parameters are enabled, false otherwise.\n     */\n    async customAdapterParamsEnabled(oftType: string): Promise<boolean> {\n        const resource = await this.getGlobalStore(oftType)\n        const { custom_adapter_params } = resource.data as GlobalStore\n        return custom_adapter_params\n    }\n\n    /**\n     * Gets the payload for enabling custom adapter parameters.\n     *\n     * @param {string} oftType - The OFT type.\n     * @param {boolean} enable - Whether to enable custom adapter parameters.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    enableCustomAdapterParamsPayload(oftType: string, enable: boolean): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::enable_custom_adapter_params`,\n            type_arguments: [oftType],\n            arguments: [enable],\n        }\n    }\n\n    /**\n     * Gets the payload for setting the remote address.\n     *\n     * @param {string} oftType - The OFT type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Bytes} remoteOftAddr - The remote OFT address.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setRemotePayload(\n        oftType: string,\n        remoteChainId: aptos.BCS.Uint16,\n        remoteOftAddr: aptos.BCS.Bytes\n    ): aptos.Types.EntryFunctionPayload {\n        const address = this.getTypeAddress(oftType)\n        const lzApp = new LzApp(this.sdk, this.lzApp, address)\n        return lzApp.setRemotePaylaod(remoteChainId, remoteOftAddr)\n    }\n\n    /**\n     * Sets the remote address.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} oftType - The OFT type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {aptos.BCS.Bytes} remoteOftAddr - The remote OFT address.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setRemote(\n        signer: aptos.AptosAccount,\n        oftType: string,\n        remoteChainId: aptos.BCS.Uint16,\n        remoteOftAddr: aptos.BCS.Bytes\n    ): Promise<aptos.Types.Transaction> {\n        const address = this.getTypeAddress(oftType)\n        const lzApp = new LzApp(this.sdk, this.lzApp, address)\n        return lzApp.setRemote(signer, remoteChainId, remoteOftAddr)\n    }\n\n    /**\n     * Gets the remote address.\n     *\n     * @param {string} oftType - The OFT type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @returns {Promise<aptos.BCS.Bytes>} A promise that resolves to the remote address.\n     */\n    async getRemote(oftType: string, remoteChainId: aptos.BCS.Uint16): Promise<aptos.BCS.Bytes> {\n        try {\n            const address = this.getTypeAddress(oftType)\n            const lzApp = new LzApp(this.sdk, this.lzApp, address)\n            return await lzApp.getRemote(remoteChainId)\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return new Uint8Array(0)\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Gets the payload for setting the default fee.\n     *\n     * @param {string} oftType - The OFT type.\n     * @param {aptos.BCS.Uint64} feeBp - The fee basis points.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    payloadOfSetDefaultFee(oftType: string, feeBp: aptos.BCS.Uint64): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::set_default_fee`,\n            type_arguments: [oftType],\n            arguments: [feeBp.toString()],\n        }\n    }\n\n    /**\n     * Sets the default fee.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} oftType - The OFT type.\n     * @param {aptos.BCS.Uint64} feeBp - The fee basis points.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setDefaultFee(\n        signer: aptos.AptosAccount,\n        oftType: string,\n        feeBp: aptos.BCS.Uint64\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.payloadOfSetDefaultFee(oftType, feeBp)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the default fee.\n     *\n     * @param {string} oftType - The OFT type.\n     * @returns {Promise<string>} A promise that resolves to the default fee.\n     */\n    async getDefaultFee(oftType: string): Promise<string> {\n        const resource = await this.getGlobalStore(oftType)\n        const { fee_config } = resource.data as GlobalStore\n        return fee_config.default_fee_bp\n    }\n\n    /**\n     * Gets the payload for setting the fee.\n     *\n     * @param {string} oftType - The OFT type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {boolean} enabled - Whether the fee is enabled.\n     * @param {aptos.BCS.Uint64} feeBp - The fee basis points.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    payloadOfSetFee(\n        oftType: string,\n        remoteChainId: aptos.BCS.Uint16,\n        enabled: boolean,\n        feeBp: aptos.BCS.Uint64\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::set_fee`,\n            type_arguments: [oftType],\n            arguments: [remoteChainId, enabled, feeBp],\n        }\n    }\n\n    /**\n     * Sets the fee.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} oftType - The OFT type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @param {boolean} enabled - Whether the fee is enabled.\n     * @param {aptos.BCS.Uint64} feeBp - The fee basis points.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setFee(\n        signer: aptos.AptosAccount,\n        oftType: string,\n        remoteChainId: aptos.BCS.Uint16,\n        enabled: boolean,\n        feeBp: aptos.BCS.Uint64\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.payloadOfSetFee(oftType, remoteChainId, enabled, feeBp)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the fee.\n     *\n     * @param {string} oftType - The OFT type.\n     * @param {aptos.BCS.Uint16} remoteChainId - The remote chain ID.\n     * @returns {Promise<string>} A promise that resolves to the fee.\n     */\n    async getFee(oftType: string, remoteChainId: aptos.BCS.Uint16): Promise<string> {\n        const resource = await this.getGlobalStore(oftType)\n        const { fee_config } = resource.data as GlobalStore\n\n        try {\n            return await this.sdk.client.getTableItem(fee_config.chain_id_to_fee_bp.handle, {\n                key_type: `u64`,\n                value_type: `u64`,\n                key: remoteChainId.toString(),\n            })\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return fee_config.default_fee_bp\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Gets the payload for setting the fee owner.\n     *\n     * @param {string} oftType - The OFT type.\n     * @param {aptos.MaybeHexString} owner - The owner address.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    payloadOfSetFeeOwner(oftType: string, owner: aptos.MaybeHexString): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::set_fee_owner`,\n            type_arguments: [oftType],\n            arguments: [owner],\n        }\n    }\n\n    /**\n     * Sets the fee owner.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} oftType - The OFT type.\n     * @param {aptos.MaybeHexString} owner - The owner address.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setFeeOwner(\n        signer: aptos.AptosAccount,\n        oftType: string,\n        owner: aptos.MaybeHexString\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.payloadOfSetFeeOwner(oftType, owner)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the fee owner.\n     *\n     * @param {string} oftType - The OFT type.\n     * @returns {Promise<aptos.HexString>} A promise that resolves to the fee owner.\n     */\n    async getFeeOwner(oftType: string): Promise<aptos.HexString> {\n        const resource = await this.getGlobalStore(oftType)\n        const { fee_config } = resource.data as GlobalStore\n        return aptos.HexString.ensure(fee_config.fee_owner)\n    }\n\n    /**\n     * Gets the payload for sending a coin.\n     *\n     * @param {string} oftType - The OFT type.\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Bytes} dstReceiver - The destination receiver address.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} amount - The amount to send.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} minAmount - The minimum amount.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} nativeFee - The native fee.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} zroFee - The ZRO fee.\n     * @param {aptos.BCS.Bytes} adapterParams - The adapter parameters.\n     * @param {aptos.BCS.Bytes} msglibParams - The message library parameters.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    sendCoinPayload(\n        oftType: string,\n        dstChainId: aptos.BCS.Uint16,\n        dstReceiver: aptos.BCS.Bytes,\n        amount: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        minAmount: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        nativeFee: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        zroFee: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        adapterParams: aptos.BCS.Bytes,\n        msglibPararms: aptos.BCS.Bytes\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::send`,\n            type_arguments: [oftType],\n            arguments: [\n                dstChainId.toString(),\n                Array.from(dstReceiver),\n                amount.toString(),\n                minAmount.toString(),\n                nativeFee.toString(),\n                zroFee.toString(),\n                Array.from(adapterParams),\n                Array.from(msglibPararms),\n            ],\n        }\n    }\n\n    /**\n     * Sends a coin.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} oftType - The OFT type.\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Bytes} dstReceiver - The destination receiver address.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} amount - The amount to send.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} minAmount - The minimum amount.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} nativeFee - The native fee.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} zroFee - The ZRO fee.\n     * @param {aptos.BCS.Bytes} adapterParams - The adapter parameters.\n     * @param {aptos.BCS.Bytes} msglibParams - The message library parameters.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async sendCoin(\n        signer: aptos.AptosAccount,\n        oftType: string,\n        dstChainId: aptos.BCS.Uint16,\n        dstReceiver: aptos.BCS.Bytes,\n        amount: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        minAmount: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        nativeFee: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        zroFee: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n        adapterParams: aptos.BCS.Bytes,\n        msglibParams: aptos.BCS.Bytes\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.sendCoinPayload(\n            oftType,\n            dstChainId,\n            dstReceiver,\n            amount,\n            minAmount,\n            nativeFee,\n            zroFee,\n            adapterParams,\n            msglibParams\n        )\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Creates the payload for the LayerZero receive function.\n     *\n     * @param {string} oftType - The type of the OFT.\n     * @param {aptos.BCS.Uint16} srcChainId - The source chain ID.\n     * @param {aptos.BCS.Bytes} srcAddress - The source address.\n     * @param {aptos.BCS.Bytes} payload - The payload.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload for the LayerZero receive function.\n     */\n    payloadOfLzReceive(\n        oftType: string,\n        srcChainId: aptos.BCS.Uint16,\n        srcAddress: aptos.BCS.Bytes,\n        payload: aptos.BCS.Bytes\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::lz_receive`,\n            type_arguments: [oftType],\n            arguments: [srcChainId, Array.from(srcAddress), Array.from(payload)],\n        }\n    }\n\n    /**\n     * Executes the LayerZero receive function.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} oftType - The type of the OFT.\n     * @param {aptos.BCS.Uint16} srcChainId - The source chain ID.\n     * @param {aptos.BCS.Bytes} srcAddress - The source address.\n     * @param {aptos.BCS.Bytes} payload - The payload.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async lzReceive(\n        signer: aptos.AptosAccount,\n        oftType: string,\n        srcChainId: aptos.BCS.Uint16,\n        srcAddress: aptos.BCS.Bytes,\n        payload: aptos.BCS.Bytes\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.payloadOfLzReceive(oftType, srcChainId, srcAddress, payload)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Creates the payload for claiming a coin.\n     *\n     * @param {string} oftType - The type of the OFT.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload for claiming a coin.\n     */\n    payloadOfClaimCoin(oftType: string): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::claim`,\n            type_arguments: [oftType],\n            arguments: [],\n        }\n    }\n\n    /**\n     * Claims a coin.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} oftType - The type of the OFT.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async claimCoin(signer: aptos.AptosAccount, oftType: string): Promise<aptos.Types.Transaction> {\n        const transaction = this.payloadOfClaimCoin(oftType)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Checks if the OFT is initialized.\n     *\n     * @param {string} oftType - The type of the OFT.\n     * @returns {Promise<boolean>} A promise that resolves to true if the OFT is initialized, false otherwise.\n     */\n    async isInitialized(oftType: string): Promise<boolean> {\n        try {\n            const remoteCoin = await this.getGlobalStore(oftType)\n            return remoteCoin !== undefined\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return false\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Gets the claimable coin amount for a given owner.\n     *\n     * @param {string} oftType - The type of the OFT.\n     * @param {aptos.MaybeHexString} owner - The owner address.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the claimable coin amount.\n     */\n    async getClaimableCoin(oftType: string, owner: aptos.MaybeHexString): Promise<aptos.BCS.Uint64> {\n        const resource = await this.getCoinStore(oftType)\n        const { claimable_amount } = resource.data as { claimable_amount: { handle: string } }\n        const claimableAmtLDHandle = claimable_amount.handle\n\n        try {\n            const response = await this.sdk.client.getTableItem(claimableAmtLDHandle, {\n                key_type: 'address',\n                value_type: 'u64',\n                key: owner,\n            })\n            return BigInt(response)\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return BigInt('0')\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Gets the total value locked for the OFT.\n     *\n     * @param {string} oftType - The type of the OFT.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the total value locked.\n     */\n    async getTotalValueLocked(oftType: string): Promise<aptos.BCS.Uint64> {\n        const resource = await this.getCoinStore(oftType)\n        const { locked_coin } = resource.data as { locked_coin: { value: string } }\n        return BigInt(locked_coin.value)\n    }\n\n    /**\n     * Gets the LD to SD rate for the OFT.\n     *\n     * @param {string} oftType - The type of the OFT.\n     * @returns {Promise<string>} A promise that resolves to the LD to SD rate.\n     */\n    async getLd2SdRate(oftType: string): Promise<string> {\n        const resource = await this.getGlobalStore(oftType)\n        const { ld2sd_rate } = resource.data as GlobalStore\n        return ld2sd_rate\n    }\n\n    /**\n     * Converts an amount from SD to LD.\n     *\n     * @param {string} oftType - The type of the OFT.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} amountSD - The amount in SD.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the amount in LD.\n     */\n    async convertAmountToLD(oftType: string, amountSD: aptos.BCS.Uint64 | aptos.BCS.Uint32): Promise<aptos.BCS.Uint64> {\n        const rate = await this.getLd2SdRate(oftType)\n        return BigInt(amountSD) * BigInt(rate)\n    }\n\n    /**\n     * Converts an amount from LD to SD.\n     *\n     * @param {string} oftType - The type of the OFT.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} amountLD - The amount in LD.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the amount in SD.\n     */\n    async convertAmountToSD(oftType: string, amountLD: aptos.BCS.Uint64 | aptos.BCS.Uint32): Promise<aptos.BCS.Uint64> {\n        const rate = await this.getLd2SdRate(oftType)\n        return BigInt(amountLD) / BigInt(rate)\n    }\n\n    /**\n     * Creates the payload for registering a coin.\n     *\n     * @param {string} oftType - The type of the OFT.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload for registering a coin.\n     */\n    payloadOfCoinRegister(oftType: string): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `0x1::managed_coin::register`,\n            type_arguments: [oftType],\n            arguments: [],\n        }\n    }\n\n    /**\n     * Registers a coin.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} oftType - The type of the OFT.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async coinRegister(signer: aptos.AptosAccount, oftType: string): Promise<aptos.Types.Transaction> {\n        const transaction = this.payloadOfCoinRegister(oftType)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Gets the address from the OFT type.\n     *\n     * @param {string} oftType - The type of the OFT.\n     * @returns {string} The address.\n     * @throws {Error} If the OFT type is invalid.\n     */\n    getTypeAddress(oftType: string): string {\n        const match = oftType.match(/0x(?<address>.*)::(?<module>.*)::(?<struct>.*)/i)\n        if (!match) {\n            throw new Error(`Invalid oft type: ${oftType}`)\n        }\n        const { address } = match.groups!\n        return address\n    }\n\n    /**\n     * Gets the global store resource for the OFT.\n     *\n     * @param {string} oftType - The type of the OFT.\n     * @returns {Promise<aptos.Types.MoveResource>} A promise that resolves to the global store resource.\n     */\n    private async getGlobalStore(oftType: string): Promise<aptos.Types.MoveResource> {\n        const address = this.getTypeAddress(oftType)\n        return this.sdk.client.getAccountResource(address, `${this.module}::GlobalStore<${oftType}>`)\n    }\n\n    /**\n     * Gets the coin store resource for the OFT.\n     *\n     * @param {string} oftType - The type of the OFT.\n     * @returns {Promise<aptos.Types.MoveResource>} A promise that resolves to the coin store resource.\n     */\n    private async getCoinStore(oftType: string): Promise<aptos.Types.MoveResource> {\n        const address = this.getTypeAddress(oftType)\n        return this.sdk.client.getAccountResource(address, `${this.module}::CoinStore<${oftType}>`)\n    }\n\n    /**\n     * Creates the payload for transferring a coin.\n     *\n     * @param {string} oftType - The type of the OFT.\n     * @param {aptos.MaybeHexString} to - The recipient address.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} amount - The amount to transfer.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload for transferring a coin.\n     */\n    transferPayload(\n        oftType: string,\n        to: aptos.MaybeHexString,\n        amount: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `0x1::coin::transfer`,\n            type_arguments: [oftType],\n            arguments: [to, amount],\n        }\n    }\n\n    /**\n     * Transfers a coin.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {string} oftType - The type of the OFT.\n     * @param {aptos.MaybeHexString} to - The recipient address.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} amount - The amount to transfer.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async transfer(\n        signer: aptos.AptosAccount,\n        oftType: string,\n        to: aptos.MaybeHexString,\n        amount: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.transferPayload(oftType, to, amount)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    // ------------------------------ view functions ------------------------------\n\n    /**\n     * Gets the balance of a coin for a given owner.\n     *\n     * @param {string} oftType - The type of the OFT.\n     * @param {aptos.MaybeHexString} owner - The owner address.\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the balance.\n     */\n    async balance(oftType: string, owner: aptos.MaybeHexString): Promise<aptos.BCS.Uint64> {\n        try {\n            const resource = await this.sdk.client.getAccountResource(owner, `0x1::coin::CoinStore<${oftType}>`)\n            const { coin: c } = resource.data as { coin: { value: string } }\n            return BigInt(c.value)\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return BigInt(0)\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Checks if an account is registered for a given coin.\n     *\n     * @param {string} oftType - The type of the OFT.\n     * @param {aptos.MaybeHexString} accountAddr - The account address.\n     * @returns {Promise<boolean>} A promise that resolves to true if the account is registered, false otherwise.\n     */\n    async isAccountRegistered(oftType: string, accountAddr: aptos.MaybeHexString): Promise<boolean> {\n        try {\n            await this.sdk.client.getAccountResource(accountAddr, `0x1::coin::CoinStore<${oftType}>`)\n            return true\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return false\n            }\n            throw e\n        }\n    }\n\n    /**\n     * Gets the current timestamp.\n     *\n     * @returns {Promise<aptos.BCS.Uint64>} A promise that resolves to the current timestamp.\n     */\n    private async getCurrentTimestamp(): Promise<aptos.BCS.Uint64> {\n        const resource = await this.sdk.client.getAccountResource('0x1', '0x1::timestamp::CurrentTimeMicroseconds')\n        const { microseconds } = resource.data as { microseconds: string }\n        return BigInt(microseconds) / BigInt(1000000)\n    }\n\n    /**\n     * Gets the supply of a coin for a given owner.\n     *\n     * @param {string} oftType - The type of the OFT.\n     * @param {aptos.MaybeHexString} oftOwner - The owner address.\n     * @returns {Promise<aptos.BCS.Uint128>} A promise that resolves to the supply.\n     */\n    async supply(oftType: string, oftOwner: aptos.MaybeHexString): Promise<aptos.BCS.Uint128> {\n        try {\n            const resource: { data: any } = await this.sdk.client.getAccountResource(\n                oftOwner,\n                `0x1::coin::CoinInfo<${oftType}>`\n            )\n            return BigInt(resource.data.supply.vec[0].integer.vec[0].value)\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return BigInt(0)\n            }\n            throw e\n        }\n    }\n}\n","import * as aptos from 'aptos'\n\nimport { SDK } from '../../index'\nimport { fullAddress, isErrorOfApiError } from '../../utils'\n\n/**\n * Class representing an Oracle.\n */\nexport class Oracle {\n    /**\n     * The address of the Oracle.\n     */\n    readonly address: aptos.MaybeHexString\n\n    /**\n     * The module of the Oracle.\n     */\n    public readonly module\n\n    /**\n     * The module name of the Oracle.\n     */\n    public readonly moduleName\n\n    /**\n     * Creates an instance of the Oracle class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     * @param {aptos.MaybeHexString} address - The address of the Oracle.\n     */\n    constructor(\n        public sdk: SDK,\n        address: aptos.MaybeHexString\n    ) {\n        this.address = address\n        this.module = `${this.address}::oracle`\n        this.moduleName = 'oracle::oracle'\n    }\n\n    /**\n     * Gets the threshold value.\n     *\n     * @returns {Promise<aptos.BCS.Uint8>} A promise that resolves to the threshold value.\n     */\n    async getThreshold(): Promise<aptos.BCS.Uint8> {\n        const resource: { data: any } = await this.sdk.client.getAccountResource(this.address, `${this.module}::Config`)\n        const { threshold } = resource.data as { threshold: number }\n        return Number(threshold)\n    }\n\n    /**\n     * Creates a payload for setting the threshold.\n     *\n     * @param {aptos.BCS.Uint8} threshold - The threshold value.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setThresholdPayload(threshold: aptos.BCS.Uint8): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::set_threshold`,\n            type_arguments: [],\n            arguments: [threshold],\n        }\n    }\n\n    /**\n     * Sets the threshold value.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint8} threshold - The threshold value.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setThreshold(signer: aptos.AptosAccount, threshold: aptos.BCS.Uint8): Promise<aptos.Types.Transaction> {\n        const transaction = this.setThresholdPayload(threshold)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Checks if a validator is valid.\n     *\n     * @param {aptos.MaybeHexString} validator - The validator address.\n     * @returns {Promise<boolean>} A promise that resolves to true if the validator is valid, false otherwise.\n     */\n    async isValidator(validator: aptos.MaybeHexString): Promise<boolean> {\n        const resource: { data: any } = await this.sdk.client.getAccountResource(this.address, `${this.module}::Config`)\n        const { validators } = resource.data\n        const val = aptos.HexString.ensure(validator).toShortString()\n        return validators.includes(val)\n    }\n\n    /**\n     * Creates a payload for setting a validator.\n     *\n     * @param {aptos.MaybeHexString} validator - The validator address.\n     * @param {boolean} active - The active status of the validator.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setValidatorPayload(validator: aptos.MaybeHexString, active: boolean): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::set_validator`,\n            type_arguments: [],\n            arguments: [validator, active],\n        }\n    }\n\n    /**\n     * Sets a validator.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.MaybeHexString} validator - The validator address.\n     * @param {boolean} active - The active status of the validator.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setValidator(\n        signer: aptos.AptosAccount,\n        validator: aptos.MaybeHexString,\n        active: boolean\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.setValidatorPayload(validator, active)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Creates a payload for setting a fee.\n     *\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} baseFee - The base fee.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    setFeePayload(\n        dstChainId: aptos.BCS.Uint16,\n        baseFee: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::set_fee`,\n            type_arguments: [],\n            arguments: [dstChainId, baseFee],\n        }\n    }\n\n    /**\n     * Sets a fee.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.BCS.Uint16} dstChainId - The destination chain ID.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} baseFee - The base fee.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async setFee(\n        signer: aptos.AptosAccount,\n        dstChainId: aptos.BCS.Uint16,\n        baseFee: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.setFeePayload(dstChainId, baseFee)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Creates a payload for proposing a transaction.\n     *\n     * @param {Uint8Array} hash - The hash of the transaction.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} confirmations - The number of confirmations.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload.\n     */\n    getProposePayload(\n        hash: Uint8Array,\n        confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): aptos.Types.EntryFunctionPayload {\n        return {\n            function: `${this.module}::propose`,\n            type_arguments: [],\n            arguments: [Array.from(hash), confirmations],\n        }\n    }\n\n    /**\n     * Proposes a transaction.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {Uint8Array} hash - The hash of the transaction.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} confirmations - The number of confirmations.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async propose(\n        signer: aptos.AptosAccount,\n        hash: Uint8Array,\n        confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<aptos.Types.Transaction> {\n        const transaction = this.getProposePayload(hash, confirmations)\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n\n    /**\n     * Checks if a proposal is submitted.\n     *\n     * @param {aptos.MaybeHexString} validator - The validator address.\n     * @param {string} hash - The hash of the transaction.\n     * @param {aptos.BCS.Uint64 | aptos.BCS.Uint32} confirmations - The number of confirmations.\n     * @returns {Promise<boolean>} A promise that resolves to true if the proposal is submitted, false otherwise.\n     */\n    async isSubmitted(\n        validator: aptos.MaybeHexString,\n        hash: string,\n        confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n    ): Promise<boolean> {\n        const resource: { data: any } = await this.sdk.client.getAccountResource(\n            this.address,\n            `${this.module}::ProposalStore`\n        )\n        const { proposals } = resource.data as { proposals: { handle: string } }\n\n        try {\n            const proposal = await this.sdk.client.getTableItem(proposals.handle, {\n                key_type: `${this.module}::ProposalKey`,\n                value_type: `${this.module}::Proposal`,\n                key: {\n                    hash,\n                    confirmations: confirmations.toString(),\n                },\n            })\n\n            if (proposal.submitted) {\n                return true\n            }\n\n            const val = aptos.HexString.ensure(validator).toShortString()\n            return proposal.approved_by.includes(val)\n        } catch (e) {\n            if (isErrorOfApiError(e, 404)) {\n                return false\n            } else {\n                throw e\n            }\n        }\n    }\n\n    /**\n     * Gets the resource address.\n     *\n     * @returns {Promise<string>} A promise that resolves to the resource address.\n     */\n    async getResourceAddress(): Promise<string> {\n        const resource = await this.sdk.client.getAccountResource(this.address, `${this.module}::Config`)\n        const { resource_addr } = resource.data as { resource_addr: string }\n        return fullAddress(resource_addr).toString()\n    }\n\n    /**\n     * Withdraws a fee.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.MaybeHexString} receiver - The receiver address.\n     * @param {aptos.BCS.Uint64} amount - The amount to withdraw.\n     * @returns {Promise<aptos.Types.Transaction>} A promise that resolves to the transaction.\n     */\n    async withdrawFee(\n        signer: aptos.AptosAccount,\n        receiver: aptos.MaybeHexString,\n        amount: aptos.BCS.Uint64\n    ): Promise<aptos.Types.Transaction> {\n        const transaction: aptos.Types.EntryFunctionPayload = {\n            function: `${this.module}::withdraw_fee`,\n            type_arguments: [],\n            arguments: [receiver, amount],\n        }\n        return this.sdk.sendAndConfirmTransaction(signer, transaction)\n    }\n}\n","import * as aptos from 'aptos'\n\nimport { OFT_PRECRIME_ADDRESS } from '../../constants'\nimport { SDK } from '../../index'\nimport { TypeInfo } from '../../types'\nimport { buildStructTagFromTypeInfo, normalizeTypeInfo, stringToPaddedUint8Array } from '../../utils'\n\n/**\n * Class representing the PreCrime module.\n */\nexport class PreCrime {\n    private sdk: SDK\n\n    /**\n     * The address of the PreCrime module.\n     */\n    readonly address: aptos.MaybeHexString\n\n    /**\n     * The module path for the PreCrime module.\n     */\n    readonly module: string\n\n    /**\n     * The module name for the PreCrime module.\n     */\n    readonly moduleName: string\n\n    /**\n     * Creates an instance of the PreCrime class.\n     *\n     * @param {SDK} sdk - The SDK instance.\n     * @param {aptos.MaybeHexString} address - The address of the PreCrime module.\n     */\n    constructor(sdk: SDK, address: aptos.MaybeHexString) {\n        this.sdk = sdk\n        this.address = address\n        this.module = `${this.address}::precrime`\n        this.moduleName = 'oft_precrime::precrime'\n    }\n\n    // --------------- admin ---------------\n    /**\n     * Set the precrime peers for a given OFT type.\n     *\n     * @param {string} oftType - The OFT type, e.g. 0x1::BTCbOFT::BTCb.\n     * @param {aptos.BCS.Uint32[]} eids - The EIDs to set the precrime peers for, e.g. [101, 102, 106] for [ETHEREUM, BSC, AVALANCHE].\n     * @param {aptos.MaybeHexString[]} precrimePeers - The precrime peers to set.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload to be used in the transaction.\n     */\n    setPreCrimePeersPayload(\n        oftType: string,\n        eids: aptos.BCS.Uint32[],\n        precrimePeers: aptos.MaybeHexString[]\n    ): aptos.Types.EntryFunctionPayload {\n        this.assertType(oftType)\n        const precrimePeerBytes = precrimePeers.map((peer) => {\n            return Array.from(stringToPaddedUint8Array(peer.toString(), 32))\n        })\n        return {\n            function: `${OFT_PRECRIME_ADDRESS[this.sdk.stage]}::oft_precrime::set_precrime_peers`,\n            type_arguments: [oftType],\n            arguments: [eids, Array.from(precrimePeerBytes)],\n        }\n    }\n\n    /**\n     * Set the max batch size for a given OFT type.\n     *\n     * @param {string} oftType - The OFT type, e.g. 0x1::BTCbOFT::BTCb.\n     * @param {aptos.BCS.Uint64} maxBatchSize - The max batch size to set.\n     * @returns {aptos.Types.EntryFunctionPayload} The payload to be used in the transaction.\n     */\n    setMaxBatchSizePayload(oftType: string, maxBatchSize: aptos.BCS.Uint64): aptos.Types.EntryFunctionPayload {\n        this.assertType(oftType)\n        return {\n            function: `${OFT_PRECRIME_ADDRESS[this.sdk.stage]}::oft_precrime::set_max_batch_size`,\n            type_arguments: [oftType],\n            arguments: [maxBatchSize],\n        }\n    }\n\n    // --------------- workflow ---------------\n    // 1. getConfig, parse precrime peers\n    // 2. simulate to all precrime peers\n    // 3. precrime with all precrime peers simulations\n\n    /**\n     * Get the configuration for the given packets.\n     *\n     * @param {aptos.MaybeHexString[]} packets - The packets to get the configuration for.\n     * @param {string} [ledger_version] - The ledger version.\n     * @returns {Promise<aptos.MaybeHexString>} The configuration.\n     */\n    async getConfig(packets: aptos.MaybeHexString[], ledger_version?: string): Promise<aptos.MaybeHexString> {\n        const types = await this.getConfigTypes(packets, ledger_version)\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::get_config`,\n            type_arguments: types,\n            arguments: [packets],\n        }\n        const ret = await this.sdk.client.view(payload, ledger_version)\n        return ret[0] as aptos.MaybeHexString\n    }\n\n    /**\n     * Simulate the given packets.\n     *\n     * @param {aptos.MaybeHexString[]} packets - The packets to simulate.\n     * @param {string} [ledger_version] - The ledger version.\n     * @returns {Promise<aptos.MaybeHexString>} The simulation result.\n     */\n    async simulate(packets: aptos.MaybeHexString[], ledger_version?: string): Promise<aptos.MaybeHexString> {\n        const types = await this.getSimulateTypes(packets, ledger_version)\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::simulate`,\n            type_arguments: types,\n            arguments: [packets],\n        }\n        const ret = await this.sdk.client.view(payload, ledger_version)\n        return ret[0] as aptos.MaybeHexString\n    }\n\n    /**\n     * Perform precrime with the given packets and simulations.\n     *\n     * @param {aptos.MaybeHexString[]} packets - The packets to precrime.\n     * @param {aptos.MaybeHexString[]} simulations - The simulations to use for precrime.\n     * @param {string} [ledger_version] - The ledger version.\n     * @returns {Promise<boolean>} The result of the precrime.\n     */\n    async precrime(\n        packets: aptos.MaybeHexString[],\n        simulations: aptos.MaybeHexString[],\n        ledger_version?: string\n    ): Promise<boolean> {\n        const types = await this.getPreCrimeTypes(packets, simulations, ledger_version)\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::precrime`,\n            type_arguments: types,\n            arguments: [packets, simulations],\n        }\n        const ret = await this.sdk.client.view(payload, ledger_version)\n        return ret[0] as boolean\n    }\n\n    /**\n     * Get the configuration types for the given packets.\n     *\n     * @param {aptos.MaybeHexString[]} packets - The packets to get the configuration types for.\n     * @param {string} [ledger_version] - The ledger version.\n     * @returns {Promise<string[]>} The configuration types.\n     */\n    async getConfigTypes(packets: aptos.MaybeHexString[], ledger_version?: string): Promise<string[]> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::get_config_types`,\n            type_arguments: [],\n            arguments: [packets],\n        }\n        const ret = await this.sdk.client.view(payload, ledger_version)\n        const types = ret[0] as TypeInfo[]\n        return this.formatTypes(types)\n    }\n\n    /**\n     * Get the simulation types for the given packets.\n     *\n     * @param {aptos.MaybeHexString[]} packets - The packets to get the simulation types for.\n     * @param {string} [ledger_version] - The ledger version.\n     * @returns {Promise<string[]>} The simulation types.\n     */\n    async getSimulateTypes(packets: aptos.MaybeHexString[], ledger_version?: string): Promise<string[]> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::simulate_types`,\n            type_arguments: [],\n            arguments: [packets],\n        }\n        const ret = await this.sdk.client.view(payload, ledger_version)\n        const types = ret[0] as TypeInfo[]\n        return this.formatTypes(types)\n    }\n\n    /**\n     * Get the precrime types for the given packets and simulations.\n     *\n     * @param {aptos.MaybeHexString[]} packets - The packets to get the precrime types for.\n     * @param {aptos.MaybeHexString[]} simulations - The simulations to use for precrime.\n     * @param {string} [ledger_version] - The ledger version.\n     * @returns {Promise<string[]>} The precrime types.\n     */\n    async getPreCrimeTypes(\n        packets: aptos.MaybeHexString[],\n        simulations: aptos.MaybeHexString[],\n        ledger_version?: string\n    ): Promise<string[]> {\n        const payload: aptos.Types.ViewRequest = {\n            function: `${this.module}::precrime_types`,\n            type_arguments: [],\n            arguments: [packets, simulations],\n        }\n        const ret = await this.sdk.client.view(payload, ledger_version)\n        const types = ret[0] as TypeInfo[]\n        return this.formatTypes(types)\n    }\n\n    /**\n     * Format the given types.\n     *\n     * @param {TypeInfo[]} types - The types to format.\n     * @returns {string[]} The formatted types.\n     */\n    private formatTypes(types: TypeInfo[]): string[] {\n        const rtn: string[] = []\n        for (const typeInfo of types) {\n            const info = normalizeTypeInfo(typeInfo)\n            rtn.push(buildStructTagFromTypeInfo(info))\n        }\n        return rtn\n    }\n\n    /**\n     * Assert that the given OFT type is valid.\n     *\n     * @param {string} oftType - The OFT type to assert.\n     * @throws {Error} If the OFT type is invalid.\n     */\n    private assertType(oftType: string): void {\n        const match = oftType.match(/0x(?<address>.*)::(?<module>.*)::(?<struct>.*)/i)\n        if (!match) {\n            throw new Error(`Invalid oft type: ${oftType}`)\n        }\n    }\n}\n","export { rebuildCompileScriptBytecode } from './utils'\n","import * as aptos from 'aptos'\nimport invariant from 'tiny-invariant'\n\nimport { Stage } from '@layerzerolabs/lz-definitions'\n\nimport {\n    COUNTER_ADDRESS,\n    EXECUTOR_EXT_ADDRESS,\n    LAYERZERO_ADDRESS,\n    LAYERZERO_APPS_ADDRESS,\n    LAYERZERO_APPS_PUBKEY,\n    LAYERZERO_VIEW_ADDRESS,\n    LAYERZERO_VIEW_ULN301_ADDRESS,\n    MSGLIB_ROUTING_HELPER_ADDRESS,\n    ULN_301_ADDRESS,\n    ULN_301_RECEIVE_HELPER_ADDRESS,\n} from './constants'\nimport { Layerzero } from './modules'\nimport { MultipleSignFunc, MutipleSignatureItem, applyGasLimitSafety, multiSigSignedBCSTxn } from './utils'\n\nexport * as constants from './constants'\nexport * as types from './types'\nexport * as utils from './utils'\nexport * as apps from './modules/apps'\nexport * as uln from './modules/uln'\nexport * as format from './format'\n\n/**\n * Options for configuring accounts.\n */\nexport type AccountsOption = {\n    layerzero?: aptos.MaybeHexString\n    layerzero_common?: aptos.MaybeHexString\n    msglib_auth?: aptos.MaybeHexString\n    msglib_v1_1?: aptos.MaybeHexString\n    msglib_v2?: aptos.MaybeHexString\n    msglib_v2_1?: aptos.MaybeHexString\n    msglib_v3?: aptos.MaybeHexString\n    msglib_routing_helper?: aptos.MaybeHexString\n    uln_301?: aptos.MaybeHexString\n    uln_301_receiver?: aptos.MaybeHexString\n    zro?: aptos.MaybeHexString\n    executor_auth?: aptos.MaybeHexString\n    executor_ext?: aptos.MaybeHexString\n    executor_v2?: aptos.MaybeHexString\n    layerzero_apps?: aptos.MaybeHexString\n    layerzero_apps_pubkey?: aptos.MaybeHexString // layerzero_apps_pubkey is used to call simulateTransaction\n} & { [key: string]: aptos.MaybeHexString }\n\n/**\n * Options for configuring the SDK.\n */\nexport interface SdkOptions {\n    /**\n     * The Aptos client provider.\n     */\n    provider: aptos.AptosClient\n    /**\n     * The stage of the SDK.\n     */\n    stage?: Stage\n    /**\n     * The accounts options.\n     */\n    accounts?: AccountsOption\n}\n\n/**\n * Interface representing an option value.\n */\ninterface OptionValue {\n    /**\n     * The vector of Move values.\n     */\n    vec: aptos.Types.MoveValue[]\n}\n\n/**\n * Checks if the given value is an OptionValue.\n * In contract, the type will be Option<xxx>, In SDK, the type will be OptionValue.\n *\n * @param {unknown} value - The value to check.\n * @returns {value is OptionValue} True if the value is an OptionValue, false otherwise.\n */\nfunction isOptionValue(value: unknown): value is OptionValue {\n    return typeof value === 'object' && value != null && 'vec' in value\n}\n\n/**\n * The main SDK class for interacting with Layerzero.\n */\nexport class SDK {\n    /**\n     * The stage of the SDK.\n     */\n    stage: Stage\n    /**\n     * The Aptos client instance.\n     */\n    client: aptos.AptosClient\n    /**\n     * The Layerzero module instance.\n     */\n    LayerzeroModule: Layerzero\n    /**\n     * The accounts options.\n     */\n    accounts: AccountsOption\n\n    /**\n     * Creates an instance of the SDK class.\n     *\n     * @param {SdkOptions} options - The SDK options.\n     */\n    constructor(options: SdkOptions) {\n        this.stage = options.stage ?? Stage.SANDBOX\n        this.accounts = options.accounts ?? {\n            layerzero: LAYERZERO_ADDRESS[this.stage]!,\n            layerzero_common: LAYERZERO_ADDRESS[this.stage]!,\n            msglib_auth: LAYERZERO_ADDRESS[this.stage]!,\n            msglib_v1_1: LAYERZERO_ADDRESS[this.stage]!,\n            msglib_v2: LAYERZERO_ADDRESS[this.stage]!,\n            msglib_v2_1: LAYERZERO_ADDRESS[this.stage]!,\n            msglib_v3: LAYERZERO_ADDRESS[this.stage]!,\n            uln_301: ULN_301_ADDRESS[this.stage]!,\n            uln_301_receiver: ULN_301_RECEIVE_HELPER_ADDRESS[this.stage]!,\n            msglib_routing_helper: MSGLIB_ROUTING_HELPER_ADDRESS[this.stage]!,\n            zro: LAYERZERO_ADDRESS[this.stage]!,\n            executor_auth: LAYERZERO_ADDRESS[this.stage]!,\n            executor_ext: EXECUTOR_EXT_ADDRESS[this.stage]!,\n            executor_v2: LAYERZERO_ADDRESS[this.stage]!,\n            layerzero_apps: LAYERZERO_APPS_ADDRESS[this.stage]!,\n            layerzero_apps_pubkey: LAYERZERO_APPS_PUBKEY[this.stage]!,\n            counter: COUNTER_ADDRESS[this.stage]!,\n            view: LAYERZERO_VIEW_ADDRESS[this.stage]!,\n            view_uln301: LAYERZERO_VIEW_ULN301_ADDRESS[this.stage]!,\n        }\n        this.client = options.provider\n        this.LayerzeroModule = new Layerzero(this)\n    }\n\n    async viewFunction(payload: aptos.Types.ViewRequest): Promise<aptos.Types.MoveValue[]> {\n        let view = await this.client.view(payload)\n        view = view\n            .map((item) => {\n                if (isOptionValue(item)) {\n                    if (item.vec.length !== 0) {\n                        return item.vec[0]\n                    } else {\n                        return null\n                    }\n                }\n                return item\n            })\n            .filter((item): item is aptos.Types.MoveValue => item !== null)\n        if (view.length > 1) {\n            view = [view]\n        }\n        return view\n    }\n\n    /**\n     * Sends and confirms a BCS transaction.\n     *\n     * @param {aptos.BCS.Bytes} bcsTransction - The BCS transaction.\n     * @returns {Promise<aptos.Types.Transaction>} The confirmed transaction.\n     */\n    async sendAndConfirmBcsTransaction(bcsTransction: aptos.BCS.Bytes): Promise<aptos.Types.Transaction> {\n        const res = await this.client.submitSignedBCSTransaction(bcsTransction)\n        return this.waitAndGetTransaction(res.hash)\n    }\n\n    /**\n     * Sends and confirms a transaction.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.Types.EntryFunctionPayload} payload - The transaction payload.\n     * @returns {Promise<aptos.Types.Transaction>} The confirmed transaction.\n     */\n    async sendAndConfirmTransaction(\n        signer: aptos.AptosAccount,\n        payload: aptos.Types.EntryFunctionPayload\n    ): Promise<aptos.Types.Transaction> {\n        const options = await this.estimateGas(signer, payload)\n        const txnRequest = await this.client.generateTransaction(signer.address(), payload, options)\n        const signedTxn = await this.client.signTransaction(signer, txnRequest)\n        return this.sendAndConfirmRawTransaction(signedTxn)\n    }\n\n    async sendAndConfirmScriptTransaction(\n        signer: aptos.AptosAccount,\n        payload: aptos.TxnBuilderTypes.Script\n    ): Promise<aptos.Types.Transaction> {\n        const scriptPayload = new aptos.TxnBuilderTypes.TransactionPayloadScript(payload)\n        const options = await this.estimateScriptTxGas(signer, scriptPayload)\n        const txnRequest = await this.client.generateRawTransaction(\n            new aptos.HexString(signer.address().toString()),\n            scriptPayload,\n            {\n                maxGasAmount: BigInt(options.max_gas_amount),\n                gasUnitPrice: BigInt(options.gas_unit_price),\n            }\n        )\n        const signedTxn = await this.client.signTransaction(signer, txnRequest)\n        return this.sendAndConfirmRawTransaction(signedTxn)\n    }\n\n    /**\n     * Estimates the gas for a transaction.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {aptos.Types.EntryFunctionPayload} payload - The transaction payload.\n     * @returns {Promise<{ max_gas_amount: string, gas_unit_price: string }>} The gas estimation.\n     */\n    async estimateGas(\n        signer: aptos.AptosAccount,\n        payload: aptos.Types.EntryFunctionPayload\n    ): Promise<{\n        max_gas_amount: string\n        gas_unit_price: string\n    }> {\n        const txnRequest: aptos.TxnBuilderTypes.RawTransaction = await this.client.generateTransaction(\n            signer.address(),\n            payload\n        )\n        return this.innerEstimateGas(signer, txnRequest)\n    }\n\n    async estimateScriptTxGas(\n        signer: aptos.AptosAccount,\n        payload: aptos.TxnBuilderTypes.TransactionPayloadScript\n    ): Promise<{\n        max_gas_amount: string\n        gas_unit_price: string\n    }> {\n        const txnRequest: aptos.TxnBuilderTypes.RawTransaction = await this.client.generateRawTransaction(\n            signer.address(),\n            payload\n        )\n        return this.innerEstimateGas(signer, txnRequest)\n    }\n\n    async innerEstimateGas(\n        signer: aptos.AptosAccount,\n        txnRequest: aptos.TxnBuilderTypes.RawTransaction\n    ): Promise<{\n        max_gas_amount: string\n        gas_unit_price: string\n    }> {\n        const sim = await this.client.simulateTransaction(signer, txnRequest, {\n            estimateGasUnitPrice: true,\n            estimateMaxGasAmount: true,\n            estimatePrioritizedGasUnitPrice: true,\n        })\n        const tx = sim[0]\n        invariant(tx.success, `Transaction failed: ${tx.vm_status}}`)\n        const max_gas_amount = applyGasLimitSafety(tx.gas_used).toString()\n        return {\n            max_gas_amount,\n            gas_unit_price: tx.gas_unit_price,\n        }\n    }\n\n    /**\n     * Sends and confirms a multi-signature transaction.\n     *\n     * @param {aptos.AptosClient} client - The Aptos client.\n     * @param {string} multisigAccountAddress - The multi-signature account address.\n     * @param {aptos.TxnBuilderTypes.MultiEd25519PublicKey} multisigAccountPubkey - The multi-signature account public key.\n     * @param {aptos.TxnBuilderTypes.TransactionPayload} payload - The transaction payload.\n     * @param {MultipleSignFunc} [signFunc] - The sign function.\n     * @param {MutipleSignatureItem[]} [signedItems] - The signed items.\n     * @returns {Promise<aptos.Types.Transaction_UserTransaction>} The confirmed transaction.\n     */\n    async sendAndConfirmMultiSigTransaction(\n        client: aptos.AptosClient,\n        multisigAccountAddress: string,\n        multisigAccountPubkey: aptos.TxnBuilderTypes.MultiEd25519PublicKey,\n        payload: aptos.TxnBuilderTypes.TransactionPayload,\n        signFunc?: MultipleSignFunc,\n        signedItems?: MutipleSignatureItem[]\n    ): Promise<aptos.Types.Transaction_UserTransaction> {\n        const [{ sequence_number: sequenceNumber }, chainId] = await Promise.all([\n            client.getAccount(multisigAccountAddress),\n            client.getChainId(),\n        ])\n\n        const rawTxn = new aptos.TxnBuilderTypes.RawTransaction(\n            aptos.TxnBuilderTypes.AccountAddress.fromHex(multisigAccountAddress),\n            BigInt(sequenceNumber),\n            payload,\n            BigInt(10000), //todo: estimate gas, payload\n            BigInt(100), //todo: get gas price\n            BigInt(Math.floor(Date.now() / 1000) + 10),\n            new aptos.TxnBuilderTypes.ChainId(chainId)\n        )\n\n        const signingMessage = aptos.TransactionBuilderMultiEd25519.getSigningMessage(rawTxn)\n\n        let items: MutipleSignatureItem[]\n        if (signedItems && signedItems.length > 0) {\n            items = signedItems\n        } else if (signFunc) {\n            items = await signFunc(signingMessage)\n        } else {\n            throw new Error('No signFunc or signedItems provided')\n        }\n\n        const signatures = items.map((item) => item.signature)\n        const bitmap = items.map((item) => item.bitmap)\n\n        const signedBCSTxn = multiSigSignedBCSTxn(multisigAccountPubkey, rawTxn, signatures, bitmap)\n        const pendingTransaction = await client.submitSignedBCSTransaction(signedBCSTxn)\n        const txnHash = pendingTransaction.hash\n        await client.waitForTransaction(pendingTransaction.hash)\n\n        const txn = (await client.getTransactionByHash(txnHash)) as aptos.Types.Transaction_UserTransaction\n        invariant(txn.type == 'user_transaction', `Invalid response type: ${txn.type}`)\n        invariant(txn.success, `Transaction failed: ${txn.vm_status}`)\n        return txn\n    }\n\n    /**\n     * Deploys a package.\n     *\n     * @param {aptos.AptosAccount} signer - The signer account.\n     * @param {Uint8Array} metadata - The package metadata.\n     * @param {aptos.TxnBuilderTypes.Module[]} modules - The modules to deploy.\n     * @returns {Promise<string>} The transaction hash.\n     */\n    async deploy(\n        signer: aptos.AptosAccount,\n        metadata: Uint8Array,\n        modules: aptos.TxnBuilderTypes.Module[]\n    ): Promise<string> {\n        const gasUnitPrice = BigInt((await this.client.estimateGasPrice()).gas_estimate)\n        const txnHash = await this.client.publishPackage(signer, metadata, modules, {\n            maxGasAmount: BigInt(20000 * modules.length),\n            gasUnitPrice,\n        })\n        const txn = (await this.client.waitForTransactionWithResult(txnHash)) as aptos.Types.UserTransaction\n        if (!txn.success) {\n            throw new Error(txn.vm_status)\n        }\n        return txnHash\n    }\n\n    /**\n     * Waits for a transaction to be confirmed and retrieves it.\n     *\n     * @param {string} txnHash - The transaction hash.\n     * @returns {Promise<aptos.Types.Transaction>} The confirmed transaction.\n     */\n    private async waitAndGetTransaction(txnHash: string): Promise<aptos.Types.Transaction> {\n        await this.client.waitForTransaction(txnHash)\n\n        const tx: aptos.Types.Transaction = await this.client.getTransactionByHash(txnHash)\n        invariant(tx.type == 'user_transaction', `Invalid response type: ${tx.type}`)\n        const txn = tx as aptos.Types.Transaction_UserTransaction\n        invariant(txn.success, `Transaction failed: ${txn.vm_status}`)\n        return tx\n    }\n\n    /**\n     * Sends and confirms a raw transaction.\n     *\n     * @param {Uint8Array} signedTransaction - The signed transaction.\n     * @returns {Promise<aptos.Types.Transaction>} The confirmed transaction.\n     */\n    private async sendAndConfirmRawTransaction(signedTransaction: Uint8Array): Promise<aptos.Types.Transaction> {\n        const res = await this.client.submitTransaction(signedTransaction)\n        return this.waitAndGetTransaction(res.hash)\n    }\n}\n"]}