@layerzerolabs/lz-aptos-sdk-v1 3.0.113 → 3.0.114
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/deployments/aptos-sandbox-local/Common.json +1 -1
- package/deployments/aptos-sandbox-local/Endpoint.json +1 -1
- package/deployments/aptos-sandbox-local/ExecutorAuth.json +1 -1
- package/deployments/aptos-sandbox-local/ExecutorExt.json +1 -1
- package/deployments/aptos-sandbox-local/ExecutorV2.json +1 -1
- package/deployments/aptos-sandbox-local/MsgLibV1.json +1 -1
- package/deployments/aptos-sandbox-local/MsgLibV2.json +1 -1
- package/deployments/aptos-sandbox-local/MsgLibV21.json +1 -1
- package/deployments/aptos-sandbox-local/MsgLibV3.json +1 -1
- package/deployments/aptos-sandbox-local/MsglibAuth.json +1 -1
- package/deployments/aptos-sandbox-local/Zro.json +1 -1
- package/deployments/aptos-sandbox-local/airdrop_wrapper.json +1 -1
- package/deployments/aptos-sandbox-local/executor_fee_lib_router_v1.json +1 -1
- package/deployments/aptos-sandbox-local/executor_fee_lib_router_v2.json +1 -1
- package/deployments/aptos-sandbox-local/executor_fee_lib_router_v3.json +1 -1
- package/deployments/aptos-sandbox-local/executor_fee_lib_v1.json +1 -1
- package/deployments/aptos-sandbox-local/executor_v2_fee_lib_router_v1.json +1 -1
- package/deployments/aptos-sandbox-local/executor_v2_fee_lib_router_v2.json +1 -1
- package/deployments/aptos-sandbox-local/fa_converter.json +1 -1
- package/deployments/aptos-sandbox-local/layerzero_view.json +1 -1
- package/deployments/aptos-sandbox-local/layerzero_view_uln301.json +1 -1
- package/deployments/aptos-sandbox-local/msglib_routing_helper.json +1 -1
- package/deployments/aptos-sandbox-local/packet_converter.json +1 -1
- package/deployments/aptos-sandbox-local/uln_301.json +1 -1
- package/deployments/aptos-sandbox-local/uln_301_receive_helper.json +1 -1
- package/dist/index.cjs +50 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +32 -4
- package/dist/index.d.ts +32 -4
- package/dist/index.mjs +50 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +8 -8
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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/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\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]: '0xf8de36e67ea6dbc7d23db64606e95fba866161343ad8e75d3b95db05ea8c87fe', // MAINNET\n [Stage.TESTNET]: '0x08de21fb02d85642ef34668c59382d8b6802b9a9e51d80cb09be40a56228dd70',\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'\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 { 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 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.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 * @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 ): 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)],\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 * @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 ): 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)],\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 {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 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, 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"]}
|
|
1
|
+
{"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]: '', // MAINNET\n [Stage.TESTNET]: '',\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]: '0xf8de36e67ea6dbc7d23db64606e95fba866161343ad8e75d3b95db05ea8c87fe', // MAINNET\n [Stage.TESTNET]: '0x08de21fb02d85642ef34668c59382d8b6802b9a9e51d80cb09be40a56228dd70',\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"]}
|