@layerzerolabs/lz-aptos-sdk-v1 2.0.7 → 2.0.9
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/dist/index.cjs.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -8
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/constants.ts","../src/utils.ts","../src/abi.ts","../src/modules/channel.ts","../src/modules/endpoint.ts","../src/modules/executor.ts","../src/format/utils.ts","../src/format/basic.ts","../src/format/bytecode.ts","../src/format/compiled-script.ts","../src/format/table-types.ts","../src/modules/executor_config.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/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"],"names":["aptos","invariant","Stage","BCS","opcode","TableType","BN","HexString","PacketType","CoinType","bytesToHex","ExtendedBuffer"],"mappings":"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","sourcesContent":["import * as aptos from 'aptos'\nimport invariant from 'tiny-invariant'\n\nimport { Stage } from '@layerzerolabs/lz-definitions'\n\nimport { EXECUTOR_EXT_ADDRESS, LAYERZERO_ADDRESS, LAYERZERO_APPS_ADDRESS, LAYERZERO_APPS_PUBKEY } 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'\n\nexport type AccountsOption = {\n layerzero?: aptos.MaybeHexString\n msglib_auth?: aptos.MaybeHexString\n msglib_v1_1?: aptos.MaybeHexString\n msglib_v2?: 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} & Record<string, aptos.MaybeHexString>\n\nexport type SdkOptions = {\n provider: aptos.AptosClient\n stage?: Stage\n accounts?: AccountsOption\n}\n\nexport class SDK {\n stage: Stage\n client: aptos.AptosClient\n LayerzeroModule: Layerzero\n accounts: AccountsOption\n\n constructor(options: SdkOptions) {\n this.stage = options.stage ?? Stage.SANDBOX\n this.accounts = options.accounts ?? {\n layerzero: 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 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 }\n this.client = options.provider\n this.LayerzeroModule = new Layerzero(this)\n }\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 async sendAndConfirmTransaction(signer: aptos.AptosAccount, payload: aptos.Types.EntryFunctionPayload) {\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 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 = await this.client.generateTransaction(signer.address(), payload)\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 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 ) {\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 '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 async deploy(signer: aptos.AptosAccount, metadata: Uint8Array, modules: aptos.TxnBuilderTypes.Module[]) {\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 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 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","import { Environment, Stage } from '@layerzerolabs/lz-definitions'\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\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\nexport const LAYERZERO_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0x54ad3d30af77b60d939ae356e6606de9a4da67583f02b962d2d3f2e481484e90', // MAINNET\n [Stage.TESTNET]: '0x1759cc0d3161f1eb79f65847d4feb9d1f74fb79014698a23b16b28b9cd4c37e3',\n [Stage.SANDBOX]: '0x88cb10d5573e2aa38ed9a92763535ed6828c193567906a56c0f3b9158b1decb7',\n}\n\nexport const LAYERZERO_APPS_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0x43d8cad89263e6936921a0adb8d5d49f0e236c229460f01b14dca073114df2b9',\n [Stage.TESTNET]: '0x2f972c173927006c83277b6e6ae38f83482eba560f343d022f145979020d3621',\n [Stage.SANDBOX]: '0x3afbb2e0e598c6a6b1d694ae3ab6517a6d9941c99f8bb06257e1109b571bb823',\n}\n\nexport const ORACLE_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0xc2846ea05319c339b3b52186ceae40b43d4e9cf6c7350336c3eb0b351d9394eb', // MAINNET\n [Stage.TESTNET]: '0x8ab85d94bf34808386b3ce0f9516db74d2b6d2f1166aa48f75ca641f3adb6c63',\n [Stage.SANDBOX]: '0x22be7b12e214d4f9f96dc3638fb8d9e3f760e483102c4b48b04a2a656de5a24a',\n}\n\n// resource, not contract. update after deploy\nexport const ORACLE_SIGNER_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0x12e12de0af996d9611b0b78928cd9f4cbf50d94d972043cdd829baa77a78929b', // MAINNET\n [Stage.TESTNET]: '0x47a30bcdb5b5bdbf6af883c7325827f3e40b3f52c3538e9e677e68cf0c0db060',\n [Stage.SANDBOX]: '0xbccf3169d417448997cb4928e2b8e33e97067871b8564b20c5c2ef6c3a7bf377',\n}\n\nexport const RELAYER_SIGNER_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0x1d8727df513fa2a8785d0834e40b34223daff1affc079574082baadb74b66ee4', // MAINNET\n [Stage.TESTNET]: '0xc192864c4215741051321d44f89c3b7a54840a0b1b7ef5bec6149a07f9df4641',\n [Stage.SANDBOX]: '0xc180500ddac3fef70cb1e9fc0d75793850e2cef84d518ea0a3b3adfb93751ea7',\n}\n\nexport const EXECUTOR_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0x1d8727df513fa2a8785d0834e40b34223daff1affc079574082baadb74b66ee4', // MAINNET\n [Stage.TESTNET]: '0xc192864c4215741051321d44f89c3b7a54840a0b1b7ef5bec6149a07f9df4641',\n [Stage.SANDBOX]: '0xc180500ddac3fef70cb1e9fc0d75793850e2cef84d518ea0a3b3adfb93751ea7',\n}\n\nexport const EXECUTOR_EXT_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0xd122ac52d43736e0f524a334fc37b6750884559da7ddf1aee0b11b6ae62643d7', // MAINNET\n [Stage.TESTNET]: '0x39942f4bd78e899f162644b5ec5998a19cb6de1ff8b7321070cb75cf96e5cf6c',\n [Stage.SANDBOX]: '0xeed8a91797cdfcbe0d33f92b57b76830f1ff6b4613db00f0c33035e31f77c936',\n}\n\n// LAYERZERO_APPS_PUBKEY will be used to call simulateTransaction\nexport const LAYERZERO_APPS_PUBKEY: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0xf57e5a95ae0e2b5f999ac14abd0ff73daf64e6e7e2a1fad024f2e44422e88d76', // MAINNET\n [Stage.TESTNET]: '0xa6d39a1f522da0298a387032952393b1dd2f88ea75423de05c26792930c60ac0',\n [Stage.SANDBOX]: '0x3378e95c0f5f245208d3b330815eccdf704df522ccdebceabb4310354dd22e06',\n}\n\nexport const BRIDGE_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa', // MAINNET\n [Stage.TESTNET]: '0xec84c05cc40950c86d8a8bed19552f1e8ebb783196bb021c916161d22dc179f7',\n [Stage.SANDBOX]: '0x96a9b4d53a6cb4f4fe2c43a82ab71b52624396f0792b64b5f23a1085690d8edb',\n}\n\nexport const BRIDGE_PRECRIME_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0x16c7d29eea08ac77dfc4e4665bb56da0ded4e7b82c4c25d535b3d5a5fd6071ad',\n [Stage.TESTNET]: '0x3ed30825c327d8ee51e079c48b12981053fe2bfe07f74a6572726abf4d5c9afc',\n [Stage.SANDBOX]: '', // TODO TESTNET_SANDBOX\n}\n\nexport const OFT_PRECRIME_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0x273f3e39593a6723adcecd5aa112158c07239043f79609a0380473157c841e19',\n [Stage.TESTNET]: '0x9fea38276544542be16c4592d1b10cf08d4d9dee33b51eca8a88f17921d985d2',\n [Stage.SANDBOX]: '', // TODO TESTNET_SANDBOX\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 { Packet, TypeInfo } from './types'\n\nimport { SDK } from './index'\n\nexport const ZERO_ADDRESS_HEX = fullAddress('0x0').toString()\nexport const ZERO_ADDRESS_BYTES = fullAddress('0x0').toUint8Array()\nexport const GAS_LIMIT_SAFETY_BPS = 2000\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\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 interface GetAddressSizeOfChainFunc {\n (chainId: number): Promise<number>\n}\n\n/**\n * decode the packet generated on the Aptos chain only, it assumes that the size of the source address is 32\n * @param buf\n * @param getAddressSizeOfChain a number or a function to return size of the destination address\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\nexport async function decodePacketString(encodedPacket: string, dstAddressSize: number) {\n return decodePacket(Buffer.from(aptos.HexString.ensure(encodedPacket).toUint8Array()), dstAddressSize)\n}\n\nexport function hashBuffer(buf: Buffer): string {\n return crypto.createHash('sha3-256').update(buf).digest('hex')\n}\n\nexport function hashPacket(packet: Packet): string {\n return hashBuffer(encodePacket(packet))\n}\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\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\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\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\nfunction isHexStrict(hex: string): boolean {\n return /^(-)?0x[0-9a-f]*$/i.test(hex)\n}\n\n//https://github.com/ChainSafe/web3.js/blob/release/1.7.5/packages/web3-utils/src/index.js#L166\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.substring(0, 2) === '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\nexport function isSameAddress(a: string | HexString, b: string | HexString): boolean {\n return fullAddress(a).toString() == fullAddress(b).toString()\n}\n\nexport function isZeroAddress(a: string | HexString): boolean {\n return isSameAddress(a, ZERO_ADDRESS_HEX)\n}\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\nexport function convertBytesToUint64(bytes: aptos.BCS.Bytes): aptos.BCS.Uint64 {\n return BigInt(new BN(bytes, 'be').toString())\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isErrorOfApiError(e: any, status: number) {\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 * convert aptos.BCS.Bytes to an Uint8Array, left padding with 0x0 elements\n * @param data\n * @param length\n */\nexport function bytesToUint8Array(data: aptos.BCS.Bytes, length: number) {\n return paddingUint8Array(data, length)\n}\n\n/**\n * convert a hex string to an Uint8Array, left padding with 0x0 elements\n * @deprecated use {@link stringToPaddedUint8Array}\n * @param str a hex string, can be starting with 0x\n * @param length array length\n */\nexport function convertToPaddedUint8Array(str: string, length: number): Uint8Array {\n return stringToPaddedUint8Array(str, length)\n}\n\n/**\n * convert a hex string to an Uint8Array, left padding with 0x0 elements\n * @param str a hex string, can be starting with 0x\n * @param length array length\n */\nexport function stringToPaddedUint8Array(str: string, length: number): Uint8Array {\n const value = stringToUint8Array(str)\n return paddingUint8Array(value, length)\n}\n\n/**\n * left padding with 0x0 elements\n * @param bytes\n * @param length\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 * @param str a hex string, can be starting with 0x\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\nexport interface MutipleSignatureItem {\n signature: aptos.HexString\n bitmap: number\n}\n\nexport type MultipleSignFunc = (data: Uint8Array) => Promise<MutipleSignatureItem[]>\n\nexport function makeSignFuncWithMultipleSigners(...signers: aptos.AptosAccount[]) {\n return 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\nexport function applyGasLimitSafety(gasUsed: string): bigint {\n return (BigInt(gasUsed) * BigInt(10000 + GAS_LIMIT_SAFETY_BPS)) / BigInt(10000)\n}\n\nexport function decodePayload(payload: Buffer) {\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\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\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 * @param bytecode - generated by `make compile-script-template`\n * @param sdk\n * @param publicKey - the public key of the signer who will submit transaction\n * @param dstAddress - UA address on Aptos, this function will get UA typeInfo({@link types.TypeInfoEx}) with dstAddress\n * @param srcChainId - the src chainId of the packet\n * @param srcAddress - the src address(UA address) of the packet\n * @param payload - the payload of the packet\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 !== true) {\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\nconst DERIVE_RESOURCE_ACCOUNT_SCHEME = 255\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\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\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\nexport function normalizeTypeInfo(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\nexport function buildStructTagFromTypeInfo(typeInfo: TypeInfo) {\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\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\nexport class TypeArgumentABI {\n /**\n * Constructs a TypeArgumentABI instance.\n * @param name\n */\n constructor(public readonly name: string) {}\n\n serialize(serializer: aptos.BCS.Serializer): void {\n serializer.serializeStr(this.name)\n }\n\n static deserialize(deserializer: aptos.BCS.Deserializer): TypeArgumentABI {\n const name = deserializer.deserializeStr()\n return new TypeArgumentABI(name)\n }\n}\n\nexport class ArgumentABI {\n /**\n * Constructs an ArgumentABI instance.\n * @param name\n * @param type_tag\n */\n constructor(public readonly name: string, public readonly type_tag: aptos.TxnBuilderTypes.TypeTag) {}\n\n serialize(serializer: aptos.BCS.Serializer): void {\n serializer.serializeStr(this.name)\n this.type_tag.serialize(serializer)\n }\n\n static deserialize(deserializer: aptos.BCS.Deserializer): TypeArgumentABI {\n const name = deserializer.deserializeStr()\n const typeTag = aptos.TxnBuilderTypes.TypeTag.deserialize(deserializer)\n return new ArgumentABI(name, typeTag)\n }\n}\n\nexport abstract class ScriptABI {\n abstract serialize(serializer: aptos.BCS.Serializer): void\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\nexport class TransactionScriptABI extends ScriptABI {\n /**\n * Constructs a TransactionScriptABI instance.\n * @param name Entry function name\n * @param doc\n * @param code\n * @param ty_args\n * @param args\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 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 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\nexport class EntryFunctionABI extends ScriptABI {\n /**\n * Constructs a EntryFunctionABI instance\n * @param name\n * @param module_name Fully qualified module id\n * @param doc\n * @param ty_args\n * @param args\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 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 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\nexport interface ChannelType {\n outbound_nonce: string\n inbound_nonce: string\n payload_hashs: { handle: string }\n}\n\nexport class Channel {\n public readonly module\n constructor(private sdk: SDK) {\n this.module = `${sdk.accounts.layerzero}::channel`\n }\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 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 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 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 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 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 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 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'\n\nimport { SDK } from '../index'\nimport { TypeInfoEx } from '../types'\nimport { fullAddress, hexToAscii } from '../utils'\n\nexport class Endpoint {\n public readonly module\n public readonly moduleName\n constructor(private sdk: SDK) {\n this.module = `${sdk.accounts.layerzero}::endpoint`\n this.moduleName = 'layerzero::endpoint'\n }\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 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 async getOracleFee(oracleAddr: aptos.MaybeHexString, dstChainId: aptos.BCS.Uint16): Promise<aptos.BCS.Uint64> {\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 async getRegisterEvents(start: bigint, limit: number): Promise<aptos.Types.Event[]> {\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 async quoteFee(\n uaAddress: aptos.MaybeHexString,\n dstChainId: aptos.BCS.Uint16,\n adapterParams: aptos.BCS.Bytes,\n payloadSize: number,\n query?: {\n ledgerVersion?: bigint | number\n }\n ): Promise<aptos.BCS.Uint64> {\n let totalFee = BigInt(\n await this.sdk.LayerzeroModule.Uln.Config.quoteFee(uaAddress, dstChainId, payloadSize, query)\n )\n\n const [executor] = await this.sdk.LayerzeroModule.ExecutorConfig.getExecutor(uaAddress, dstChainId, query)\n\n totalFee += await this.sdk.LayerzeroModule.Executor.quoteFee(executor, dstChainId, adapterParams, query)\n\n return totalFee\n }\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 async registerExecutor(signer: aptos.AptosAccount, executorType: string): Promise<aptos.Types.Transaction> {\n const transaction = this.registerExecutorPayload(executorType)\n return await this.sdk.sendAndConfirmTransaction(signer, transaction)\n }\n}\n","import * as aptos from 'aptos'\n\nimport { rebuildCompileScriptBytecode } from '../format/utils'\nimport { SDK } from '../index'\nimport { Packet } from '../types'\nimport {\n convertBytesToUint64,\n convertUint64ToBytes,\n getLzReceiveTypeArguments,\n isErrorOfApiError,\n stringToUint8Array,\n} from '../utils'\n\nexport interface Fee {\n airdropAmtCap: aptos.BCS.Uint64\n priceRatio: aptos.BCS.Uint64\n gasPrice: aptos.BCS.Uint64\n}\n\n// todo: merge into endpoint\nexport class Executor {\n public readonly module\n public readonly moduleName\n public readonly type\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 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 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 async getDefaultAdapterParams(chainId: aptos.BCS.Uint16): Promise<aptos.BCS.Bytes> {\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 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 registerPayload(): aptos.Types.EntryFunctionPayload {\n return {\n function: `${this.module}::register`,\n type_arguments: [],\n arguments: [],\n }\n }\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 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 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 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 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 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 async isAirdropped(guid: aptos.BCS.Bytes, receiver: aptos.MaybeHexString): Promise<boolean> {\n try {\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 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 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 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 // 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 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 * rebuild a compiled script to query types arguments for lz_receive function\n * @param packet\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 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 * execute compiled script on chain to get types arguments for lz_receive function\n * @param packet\n */\n async getLzReceiveTypeArguments(packet: Packet): Promise<string[]> {\n const bytecode = await this.rebuildTypeArgsScript(packet)\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 async getLzReceivePayload(type_arguments: string[], packet: Packet): Promise<aptos.Types.EntryFunctionPayload> {\n const uaTypeInfo = await this.sdk.LayerzeroModule.Endpoint.getUATypeInfo(\n aptos.HexString.fromBuffer(packet.dst_address)\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 async lzReceive(signer: aptos.AptosAccount, type_arguments: string[], packet: Packet) {\n const transaction = await this.getLzReceivePayload(type_arguments, packet)\n return this.sdk.sendAndConfirmTransaction(signer, transaction)\n }\n\n getShortRequestEventType() {\n return `${this.module}::RequestEvent`.replace(/^(0x)0*/i, '$1')\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\ninterface Serializable {\n serialize(serializer: BCS.Serializer): void\n}\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\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\nexport function isOutOfBoundError(e: Error) {\n return e.message.match(/Reached to the end of buffer/) !== null\n}\n\ninterface CompiledUnit {\n identifiers: Identifier[]\n addressIdentifiers: AddressIdentifier[]\n}\n\nexport function isEqual(a: Uint8Array, b: Uint8Array): boolean {\n return a.length === b.length && a.every((v, i) => v === b[i])\n}\n\nexport function replaceTableValue<T extends CompiledUnit>(\n compiled: T,\n tableType: TableType,\n oldValue: any,\n newValue: any\n) {\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\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) {\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'\nimport { BCS } from 'aptos'\n\nimport * as Bytecode from './bytecode'\nimport { Opcodes } from './opcodes'\nimport { isOutOfBoundError } from './utils'\n\nexport class Table {\n constructor(public kind: BCS.Uint8, public offset: BCS.Uint32, public count: BCS.Uint32) {}\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 public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU32AsUleb128(this.kind)\n serializer.serializeU32AsUleb128(this.offset)\n serializer.serializeU32AsUleb128(this.count)\n }\n}\n\nexport class Tables {\n constructor(public tables: BCS.Seq<Table>, public data: BCS.Bytes) {}\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 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\nexport class AbilitySet {\n constructor(public ability: BCS.Uint8) {}\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 public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU32AsUleb128(this.ability)\n }\n}\n\nexport class Index {\n constructor(public index: BCS.Uint32) {}\n\n static deserialize(deserializer: BCS.Deserializer): Index {\n const index = deserializer.deserializeUleb128AsU32()\n return new Index(index)\n }\n\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU32AsUleb128(this.index)\n }\n}\n\nexport class Code {\n constructor(public locals: Index, public count: BCS.Uint32, public codes: BCS.Seq<Bytecode.Bytecode>) {}\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 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\nexport class Header {\n constructor(public magic: BCS.Bytes, public version: BCS.Uint32) {}\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 public serialize(serializer: BCS.Serializer): void {\n serializer.serializeFixedBytes(this.magic)\n serializer.serializeU32(this.version)\n }\n}\n\nexport class ModuleHandle {\n constructor(public address: Index, public name: Index) {}\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 public serialize(serializer: BCS.Serializer): void {\n this.address.serialize(serializer)\n this.name.serialize(serializer)\n }\n}\n\nexport class StructTypeParameter {\n constructor(public constraints: AbilitySet, public isPhantom: boolean) {}\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 public serialize(serializer: BCS.Serializer): void {\n this.constraints.serialize(serializer)\n serializer.serializeU32AsUleb128(this.isPhantom ? 1 : 0)\n }\n}\n\nexport class StructHandle {\n constructor(\n public module: Index,\n public name: Index,\n public abilities: AbilitySet,\n public typeParameters: BCS.Seq<Index>\n ) {}\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 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\nexport class FunctionHandle {\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 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 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\nexport class FunctionInstantiation {\n constructor(public handle: Index, public typeParameters: BCS.Seq<Index>) {}\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 public serialize(serializer: BCS.Serializer): void {\n this.handle.serialize(serializer)\n BCS.serializeVector(this.typeParameters, serializer)\n }\n}\n\nexport class Identifier {\n constructor(public value: string) {}\n\n static deserialize(deserializer: BCS.Deserializer): Identifier {\n const value = deserializer.deserializeStr()\n return new Identifier(value)\n }\n\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeStr(this.value)\n }\n}\n\n// NOTE: AccountAddress is 20/32/16 bytes\nexport class AddressIdentifier {\n constructor(public address: BCS.Bytes) {}\n\n static deserialize(deserializer: BCS.Deserializer): AddressIdentifier {\n const address = deserializer.deserializeFixedBytes(32)\n return new AddressIdentifier(address)\n }\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 public serialize(serializer: BCS.Serializer): void {\n serializer.serializeFixedBytes(this.address)\n }\n\n public toJSON(): string {\n return aptos.HexString.fromUint8Array(this.address).toString()\n }\n}\n\nexport function load_module_handles(deserializer: BCS.Deserializer): BCS.Seq<ModuleHandle> {\n return load_handles(deserializer, ModuleHandle)\n}\n\nexport function load_struct_handles(deserializer: BCS.Deserializer): BCS.Seq<StructHandle> {\n return load_handles(deserializer, StructHandle)\n}\n\nexport function load_function_handles(deserializer: BCS.Deserializer): BCS.Seq<FunctionHandle> {\n return load_handles(deserializer, FunctionHandle)\n}\n\nexport function load_function_instantiations(deserializer: BCS.Deserializer): BCS.Seq<FunctionInstantiation> {\n return load_handles(deserializer, FunctionInstantiation)\n}\n\nexport function load_identifiers(deserializer: BCS.Deserializer): BCS.Seq<Identifier> {\n return load_handles(deserializer, Identifier)\n}\n\nexport function load_address_identifiers(deserializer: BCS.Deserializer): BCS.Seq<AddressIdentifier> {\n return load_handles(deserializer, AddressIdentifier)\n}\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","import { BCS } from 'aptos'\n\nimport { Index } from './basic'\nimport { Opcodes } from './opcodes'\n\nexport abstract class Bytecode {\n abstract serialize(serializer: BCS.Serializer): void\n\n static deserialize(deserializer: BCS.Deserializer): Bytecode {\n throw new Error('Not implemented')\n }\n}\n\nexport class UnaryBytecode extends Bytecode {\n constructor(public opcode: Opcodes) {\n super()\n }\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU8(this.opcode)\n }\n static deserialize(deserializer: BCS.Deserializer): Bytecode {\n const opcode = deserializer.deserializeU8()\n return new UnaryBytecode(opcode)\n }\n}\n\nexport class BinaryBytecode extends Bytecode {\n constructor(public opcode: Opcodes, public operand: Index) {\n super()\n }\n\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU8(this.opcode)\n this.operand.serialize(serializer)\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\nexport class ROP extends UnaryBytecode {}\nexport class RET extends UnaryBytecode {}\nexport class BR_TRUE extends BinaryBytecode {}\nexport class BR_FALSE extends BinaryBytecode {}\nexport class BRANCH extends BinaryBytecode {}\n\nexport class LD_U8 extends Bytecode {\n constructor(public opcode: Opcodes, public value: BCS.Uint8) {\n super()\n }\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU8(this.opcode)\n serializer.serializeU8(this.value)\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\nexport class LD_U64 extends Bytecode {\n constructor(public opcode: Opcodes, public value: BCS.Uint64) {\n super()\n }\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU8(this.opcode)\n serializer.serializeU64(this.value)\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\nexport class LD_U128 extends Bytecode {\n constructor(public opcode: Opcodes, public value: BCS.Uint128) {\n super()\n }\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU8(this.opcode)\n serializer.serializeU128(this.value)\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\nexport class CAST_U8 extends UnaryBytecode {}\nexport class CAST_U64 extends UnaryBytecode {}\nexport class CAST_U128 extends UnaryBytecode {}\nexport class LD_CONST extends BinaryBytecode {}\nexport class LD_TRUE extends UnaryBytecode {}\nexport class LD_FALSE extends UnaryBytecode {}\nexport class COPY_LOC extends BinaryBytecode {}\nexport class MOVE_LOC extends BinaryBytecode {}\nexport class ST_LOC extends BinaryBytecode {}\nexport class MUT_BORROW_LOC extends BinaryBytecode {}\nexport class IMM_BORROW_LOC extends BinaryBytecode {}\nexport class MUT_BORROW_FIELD extends BinaryBytecode {}\nexport class MUT_BORROW_FIELD_GENERIC extends BinaryBytecode {}\nexport class IMM_BORROW_FIELD extends BinaryBytecode {}\nexport class IMM_BORROW_FIELD_GENERIC extends BinaryBytecode {}\nexport class CALL extends BinaryBytecode {}\nexport class CALL_GENERIC extends BinaryBytecode {}\nexport class PACK extends BinaryBytecode {}\nexport class PACK_GENERIC extends BinaryBytecode {}\nexport class UNPACK extends BinaryBytecode {}\nexport class UNPACK_GENERIC extends BinaryBytecode {}\nexport class READ_REF extends UnaryBytecode {}\nexport class WRITE_REF extends UnaryBytecode {}\nexport class ADD extends UnaryBytecode {}\nexport class SUB extends UnaryBytecode {}\nexport class MUL extends UnaryBytecode {}\nexport class MOD extends UnaryBytecode {}\nexport class DIV extends UnaryBytecode {}\nexport class BIT_OR extends UnaryBytecode {}\nexport class BIT_AND extends UnaryBytecode {}\nexport class XOR extends UnaryBytecode {}\nexport class SHL extends UnaryBytecode {}\nexport class SHR extends UnaryBytecode {}\nexport class OR extends UnaryBytecode {}\nexport class AND extends UnaryBytecode {}\nexport class NOT extends UnaryBytecode {}\nexport class EQ extends UnaryBytecode {}\nexport class NEQ extends UnaryBytecode {}\nexport class LT extends UnaryBytecode {}\nexport class GT extends UnaryBytecode {}\nexport class LE extends UnaryBytecode {}\nexport class GE extends UnaryBytecode {}\nexport class ABORT extends UnaryBytecode {}\nexport class NOP extends UnaryBytecode {}\nexport class EXISTS extends BinaryBytecode {}\nexport class EXISTS_GENERIC extends BinaryBytecode {}\nexport class MUT_BORROW_GLOBAL extends BinaryBytecode {}\nexport class MUT_BORROW_GLOBAL_GENERIC extends BinaryBytecode {}\nexport class IMM_BORROW_GLOBAL extends BinaryBytecode {}\nexport class IMM_BORROW_GLOBAL_GENERIC extends BinaryBytecode {}\nexport class MOVE_FROM extends BinaryBytecode {}\nexport class MOVE_FROM_GENERIC extends BinaryBytecode {}\nexport class MOVE_TO extends BinaryBytecode {}\nexport class MOVE_TO_GENERIC extends BinaryBytecode {}\nexport class FREEZE_REF extends UnaryBytecode {}\n\nexport class VEC_PACK extends Bytecode {\n constructor(public opcode: Opcodes, public operand: Index, public value: BCS.Uint64) {\n super()\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 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\nexport class VEC_LEN extends BinaryBytecode {}\nexport class VEC_IMM_BORROW extends BinaryBytecode {}\nexport class VEC_MUT_BORROW extends BinaryBytecode {}\nexport class VEC_PUSH_BACK extends BinaryBytecode {}\nexport class VEC_POP_BACK extends BinaryBytecode {}\n\nexport class VEC_UNPACK extends Bytecode {\n constructor(public opcode: Opcodes, public operand: Index, public value: BCS.Uint64) {\n super()\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 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\nexport class VEC_SWAP extends BinaryBytecode {}\n\nexport class LD_U16 extends Bytecode {\n constructor(public opcode: Opcodes, public value: BCS.Uint16) {\n super()\n }\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU8(this.opcode)\n serializer.serializeU16(this.value)\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\nexport class LD_U32 extends Bytecode {\n constructor(public opcode: Opcodes, public value: BCS.Uint32) {\n super()\n }\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU8(this.opcode)\n serializer.serializeU32(this.value)\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\nexport class LD_U256 extends Bytecode {\n constructor(public opcode: Opcodes, public value: BCS.Bytes) {\n super()\n }\n public serialize(serializer: BCS.Serializer): void {\n throw new Error('Method not implemented.')\n }\n static deserialize(deserializer: BCS.Deserializer): Bytecode {\n throw new Error('Method not implemented.')\n }\n}\n\nexport class CAST_U16 extends UnaryBytecode {}\nexport class CAST_U32 extends UnaryBytecode {}\nexport class CAST_U256 extends UnaryBytecode {}\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\nexport class CompiledScriptRaw {\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 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 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\nexport class CompiledScript {\n // @ts-ignore\n public header: Header\n // @ts-ignore\n public table: Tables\n\n public moduleHandles: ModuleHandle[] = []\n public structHandles: StructHandle[] = []\n public functionHandles: FunctionHandle[] = []\n public functionInstatiations: FunctionInstantiation[] = []\n // @ts-ignore\n public signatures: BCS.Bytes\n // @ts-ignore\n public constantPool: BCS.Bytes\n // @ts-ignore\n public metadata: BCS.Bytes\n public identifiers: Identifier[] = []\n public addressIdentifiers: AddressIdentifier[] = []\n // @ts-ignore\n public typeParameters: BCS.Seq<AbilitySet>\n // @ts-ignore\n public parameters: Index\n // @ts-ignore\n public code: Code\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 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","export enum TableType {\n MODULE_HANDLES = 0x1,\n STRUCT_HANDLES = 0x2,\n FUNCTION_HANDLES = 0x3,\n FUNCTION_INST = 0x4,\n SIGNATURES = 0x5,\n CONSTANT_POOL = 0x6,\n IDENTIFIERS = 0x7,\n ADDRESS_IDENTIFIERS = 0x8,\n STRUCT_DEFS = 0xa,\n STRUCT_DEF_INST = 0xb,\n FUNCTION_DEFS = 0xc,\n FIELD_HANDLE = 0xd,\n FIELD_INST = 0xe,\n FRIEND_DECLS = 0xf,\n METADATA = 0x10,\n}\n","import * as aptos from 'aptos'\n\nimport { SDK } from '../index'\nimport { isErrorOfApiError } from '../utils'\n\nexport class ExecutorConfig {\n public readonly module\n\n constructor(private sdk: SDK) {\n this.module = `${sdk.accounts.layerzero}::executor_config`\n }\n\n async getDefaultExecutor(remoteChainId: aptos.BCS.Uint16): Promise<[string, aptos.BCS.Uint64]> {\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 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 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 MsgLibAuth {\n public readonly module\n public readonly moduleName\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 async isAllowed(msglibReceive: string): Promise<boolean[]> {\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 denyPayload(msglibReceive: string): aptos.Types.EntryFunctionPayload {\n return {\n function: `${this.module}::deny`,\n type_arguments: [],\n arguments: [msglibReceive],\n }\n }\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 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\nexport class MsgLibConfig {\n public readonly module\n public readonly moduleName\n public readonly semverModule\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 async getDefaultSendMsgLib(\n remoteChainId: aptos.BCS.Uint16\n ): Promise<{ major: aptos.BCS.Uint64; minor: aptos.BCS.Uint8 }> {\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 async getDefaultReceiveMsgLib(\n remoteChainId: aptos.BCS.Uint16\n ): Promise<{ major: aptos.BCS.Uint64; minor: aptos.BCS.Uint8 }> {\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 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 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\nexport class MsgLibV1_0 {\n public readonly module\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\nexport class PacketEvent {\n public readonly module\n constructor(private sdk: SDK) {\n this.module = `${sdk.accounts.layerzero}::packet_event`\n }\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 async getInboundEventCount(): Promise<number> {\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 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 async getOutboundEventCount(): Promise<number> {\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 TYPE_ORACLE = 0\n TYPE_RELAYER = 1\n TYPE_INBOUND_CONFIRMATIONS = 2\n TYPE_OUTBOUND_CONFIRMATIONS = 3\n\n public readonly module\n public readonly moduleName\n constructor(private sdk: SDK) {\n this.module = `${sdk.accounts.layerzero}::uln_config`\n this.moduleName = 'layerzero::uln_config'\n }\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 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 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 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 async getChainAddressSize(remoteChainId: aptos.BCS.Uint16): Promise<aptos.BCS.Uint8> {\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 async getDefaultAppConfig(\n remoteChainId: aptos.BCS.Uint16,\n query?: {\n ledgerVersion?: bigint | number\n }\n ): Promise<UlnConfigType> {\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 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 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 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 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 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 { HexString } from 'aptos'\n\nimport { SDK } from '../../index'\nimport { MultipleSignFunc } from '../../utils'\n\nexport class UlnReceive {\n public readonly module\n constructor(private sdk: SDK) {\n this.module = `${sdk.accounts.layerzero}::uln_receive`\n }\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 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 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 async getProposal(oracle: aptos.MaybeHexString, hash: string): Promise<aptos.BCS.Uint64> {\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 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 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 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 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 getSubmitHashSigningMessage(txn: aptos.TxnBuilderTypes.RawTransaction): aptos.TxnBuilderTypes.SigningMessage {\n return aptos.TransactionBuilderMultiEd25519.getSigningMessage(txn)\n }\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 await 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\nexport class UlnSigner {\n public readonly module\n public readonly moduleName\n constructor(private sdk: SDK) {\n this.module = `${sdk.accounts.layerzero}::uln_signer`\n this.moduleName = 'layerzero::uln_signer'\n }\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 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 await this.sdk.sendAndConfirmMultiSigTransaction(\n this.sdk.client,\n multisigAccountAddress,\n multisigAccountPubkey,\n payload,\n signFunc\n )\n }\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 registerPayload(): aptos.Types.EntryFunctionPayload {\n return {\n function: `${this.module}::register`,\n type_arguments: [],\n arguments: [],\n }\n }\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 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 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 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 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 await this.sdk.sendAndConfirmMultiSigTransaction(\n this.sdk.client,\n multisigAccountAddress,\n multisigAccountPubkey,\n payload,\n signFunc\n )\n }\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 { SDK } from '../../index'\n\nimport { 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'\n\nexport class Uln {\n Receive: UlnReceive\n Signer: UlnSigner\n Config: UlnConfig\n MsgLibV1: MsgLibV1_0\n PacketEvent: PacketEvent\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 { SDK } from '../index'\n\nimport { Channel } from './channel'\nimport { Endpoint } from './endpoint'\nimport { Executor } from './executor'\nimport { ExecutorConfig } from './executor_config'\nimport { MsgLibAuth } from './msglib_auth'\nimport { MsgLibConfig } from './msglib_config'\nimport { Uln } from './uln'\n\nexport class Layerzero {\n Channel: Channel\n Executor: Executor\n Endpoint: Endpoint\n Uln: Uln\n MsgLibConfig: MsgLibConfig\n MsgLibAuth: MsgLibAuth\n ExecutorConfig: ExecutorConfig\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 }\n}\n","import * as aptos from 'aptos'\n\n/**\n * consistent with aptos_std::type_info::TypeInfo\n */\nexport interface TypeInfo {\n account_address: string\n module_name: string\n struct_name: string\n}\n\n/**\n * extend {@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\nexport interface CoinInfo {\n name: string\n symbol: string\n decimals: number\n supply: bigint\n}\n\nexport interface CoinInfoEx extends CoinInfo {\n type: string\n}\n\nexport interface CoinInfoResource {\n type: string\n data: {\n decimals: number\n name: string\n supply: {\n vec: [{ integer: { vec: [{ value: string }] } }]\n }\n symbol: string\n }\n}\n\nexport interface UlnConfigType {\n inbound_confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n oracle: string\n outbound_confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n relayer: string\n}\n\nexport interface Packet {\n nonce: string | aptos.BCS.Uint64\n src_chain_id: string | aptos.BCS.Uint16\n src_address: Buffer\n dst_chain_id: string | aptos.BCS.Uint16\n dst_address: Buffer\n payload: Buffer\n}\n\nexport interface UlnSignerFee {\n base_fee: aptos.BCS.Uint64\n fee_per_byte: aptos.BCS.Uint64\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\nexport interface RemoteCoin {\n address: aptos.BCS.Bytes\n tvlSD: aptos.BCS.Uint64\n unwrappable: boolean\n}\n\nexport enum PacketType {\n RECIEVE,\n SEND,\n}\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 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 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 async getMinDstGas(dstChainId: aptos.BCS.Uint16, type: aptos.BCS.Uint64) {\n return this.lzApp.getMinDstGas(this.uaType, dstChainId, type)\n }\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 /** @deprecated use {@link isCustomAdapterParamsEnabled} instead */\n async customAdapterParamsEnabled(): Promise<boolean> {\n return this.isCustomAdapterParamsEnabled()\n }\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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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.unwrappable\n return {\n address,\n tvlSD,\n unwrappable,\n }\n }\n\n private async getCoinStore(coin: MayBeBridgeCoinType): Promise<aptos.Types.MoveResource> {\n return await this.sdk.client.getAccountResource(\n this.address,\n `${this.module}::CoinStore<${this.coin.getCoinType(coin)}>`\n )\n }\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 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 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 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 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 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 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 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 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 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 private async getCoinTypeStore(): Promise<aptos.Types.MoveResource> {\n return await this.sdk.client.getAccountResource(this.address, `${this.module}::CoinTypeStore`)\n }\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 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.name\n const symbol = coinInfo.data.symbol\n const decimals = coinInfo.data.decimals\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 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 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 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 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 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 async setGlobalPause(signer: aptos.AptosAccount, pause: boolean): Promise<aptos.Types.Transaction> {\n const transaction = {\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// todo: refactor\nexport class LzApp {\n private sdk: SDK\n private readonly lzApp: aptos.MaybeHexString\n private readonly ua: aptos.MaybeHexString\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 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 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 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 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 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 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 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 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 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 ) {\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\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}\nexport const supportedTypes = [CoinType.WETH, CoinType.WBTC, CoinType.USDC, CoinType.USDT, CoinType.BUSD, CoinType.USDD]\n\nexport type BridgeCoinType =\n | CoinType.WETH\n | CoinType.WBTC\n | CoinType.USDC\n | CoinType.USDT\n | CoinType.BUSD\n | CoinType.USDD\n\nexport type MayBeBridgeCoinType = BridgeCoinType | string | TypeInfo\n\nexport function isCoinType(value: CoinType | any): value is CoinType {\n return Object.values(CoinType).includes(value)\n}\n\nexport class Coin {\n private sdk: SDK\n private readonly bridge: aptos.MaybeHexString\n\n constructor(sdk: SDK, bridge?: aptos.MaybeHexString) {\n this.sdk = sdk\n this.bridge = bridge ?? BRIDGE_ADDRESS[sdk.stage]!\n }\n\n getCoinType(coin: CoinType | string | TypeInfo): string {\n if (isTypeInfo(coin)) {\n return buildStructTagFromTypeInfo(coin as TypeInfo)\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 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::coin::transfer`,\n type_arguments: [this.getCoinType(coin)],\n arguments: [to, amount],\n }\n }\n }\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 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 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 { SDK } from '../../index'\nimport { UlnConfigType } from '../../types'\nimport { isErrorOfApiError } from '../../utils'\n\nimport { LzApp } from './lzapp'\n\nexport class Counter {\n private sdk: SDK\n private lzApp: LzApp\n private readonly uaType: string\n readonly address: aptos.MaybeHexString\n SEND_PAYLOAD_LENGTH = 4\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 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 async getRemote(remoteChainId: aptos.BCS.Uint16): Promise<aptos.BCS.Bytes> {\n return this.lzApp.getRemote(remoteChainId)\n }\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 createCounterPayload(i: aptos.BCS.Uint64 | aptos.BCS.Uint32): aptos.Types.EntryFunctionPayload {\n return {\n function: `${this.address}::counter::create_counter`,\n type_arguments: [],\n arguments: [i],\n }\n }\n\n async createCounter(\n signer: aptos.AptosAccount,\n i: aptos.BCS.Uint64 | aptos.BCS.Uint32\n ): Promise<aptos.Types.Transaction> {\n const transaction = this.createCounterPayload(i)\n return this.sdk.sendAndConfirmTransaction(signer, transaction)\n }\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 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 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 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 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 ) {\n await this.lzApp.setConfigBundle(signer, this.uaType, majorVersion, minorVersion, remoteChainId, config)\n }\n\n sendToRemotePayload(\n remoteChainId: aptos.BCS.Uint16,\n fee: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n adapterParams: Uint8Array\n ) {\n return {\n function: `${this.address}::counter::send_to_remote`,\n type_arguments: [],\n arguments: [remoteChainId, fee, Array.from(adapterParams)],\n }\n }\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 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 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","import * as aptos from 'aptos'\n\nimport { SDK } from '../../index'\nimport { fullAddress, generateMultisig, stringToUint8Array } from '../../utils'\n\nexport class MultisigOracle {\n readonly address: aptos.MaybeHexString\n public readonly module\n public readonly moduleName\n\n constructor(public sdk: SDK, address: aptos.MaybeHexString) {\n this.address = address\n this.module = `${this.address}::multisig_oracle`\n this.moduleName = 'multisig_oracle::multisig_oracle'\n }\n\n // Validator Functions\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 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 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 getTransferValidatorPayload(newValidator: aptos.MaybeHexString) {\n return {\n function: `${this.module}::transfer_validator`,\n type_arguments: [],\n arguments: [newValidator],\n }\n }\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 getSetAdminPayload(candidate: aptos.MaybeHexString, active: boolean) {\n return {\n function: `${this.module}::set_admin`,\n type_arguments: [],\n arguments: [candidate, active],\n }\n }\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 getAllowlistPayload(ua: aptos.MaybeHexString) {\n return {\n function: `${this.module}::allowlist`,\n type_arguments: [],\n arguments: [ua],\n }\n }\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 getDenylistPayload(ua: aptos.MaybeHexString) {\n return {\n function: `${this.module}::denylist`,\n type_arguments: [],\n arguments: [ua],\n }\n }\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 getSetFeePayload(remoteChainId: aptos.BCS.Uint64, baseFee: aptos.BCS.Uint64) {\n return {\n function: `${this.module}::set_fee`,\n type_arguments: [],\n arguments: [remoteChainId, baseFee],\n }\n }\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 getWithdrawFeePayload(receiver: aptos.MaybeHexString, amount: aptos.BCS.Uint64) {\n return {\n function: `${this.module}::withdraw_fee`,\n type_arguments: [],\n arguments: [receiver, amount],\n }\n }\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 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.admins\n const acc = aptos.HexString.ensure(account).toShortString()\n return admins.includes(acc)\n }\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 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 async getMultisigPubKeyAndAddress(\n validatorPubKeys: string[]\n ): Promise<[aptos.TxnBuilderTypes.MultiEd25519PublicKey, string]> {\n const pubKeys = Object.keys(validatorPubKeys).map((key) => stringToUint8Array(key))\n return await generateMultisig([...pubKeys], pubKeys.length)\n }\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\nexport class MultisigOracleTss {\n readonly address: aptos.MaybeHexString\n public readonly module\n public readonly moduleName\n\n constructor(public sdk: SDK, address: aptos.MaybeHexString) {\n this.address = address\n this.module = `${this.address}::oracle`\n this.moduleName = 'oracle::oracle'\n }\n\n // Validator Functions\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 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 public getSetValidatorPayload(\n validator: Uint8Array,\n active: boolean,\n expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n signatures: Uint8Array\n ) {\n return {\n function: `${this.module}::mso_set_validator`,\n type_arguments: [],\n arguments: [Array.from(validator), active, expiration, Array.from(signatures)],\n }\n }\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 public getSetThresholdPayload(\n threshold: aptos.BCS.Uint8,\n expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n signatures: Uint8Array\n ) {\n return {\n function: `${this.module}::mso_set_threshold`,\n type_arguments: [],\n arguments: [threshold, expiration, Array.from(signatures)],\n }\n }\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 ) {\n const transaction = this.getSetThresholdPayload(threshold, expiration, signatures)\n return this.sdk.sendAndConfirmTransaction(signer, transaction)\n }\n\n public getSetAdminPayload(\n candidate: aptos.MaybeHexString,\n active: boolean,\n expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n signatures: Uint8Array\n ) {\n return {\n function: `${this.module}::mso_set_admin`,\n type_arguments: [],\n arguments: [candidate, active, expiration, Array.from(signatures)],\n }\n }\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 public getAllowlistPayload(\n ua: aptos.MaybeHexString,\n expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n signatures: Uint8Array\n ) {\n return {\n function: `${this.module}::mso_allowlist`,\n type_arguments: [],\n arguments: [ua, expiration, Array.from(signatures)],\n }\n }\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 public getDenylistPayload(\n ua: aptos.MaybeHexString,\n expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n signatures: Uint8Array\n ) {\n return {\n function: `${this.module}::mso_denylist`,\n type_arguments: [],\n arguments: [ua, expiration, Array.from(signatures)],\n }\n }\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 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 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 public getWithdrawFeePayload(receiver: aptos.MaybeHexString, amount: aptos.BCS.Uint64) {\n return {\n function: `${this.module}::mso_withdraw_fee`,\n type_arguments: [],\n arguments: [receiver, amount],\n }\n }\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 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 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 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) as aptos.BCS.Uint8\n }\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 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 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 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 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 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 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 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 * @param funcName\n */\nexport function getAptosFunctionSignature(funcName: 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\nexport function keccak256Hash(data: 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\nexport interface FeeConfig {\n fee_owner: string\n default_fee_bp: string\n chain_id_to_fee_bp: {\n handle: string\n }\n}\n\nexport interface GlobalStore {\n proxy: boolean\n ld2sd_rate: string\n fee_config: FeeConfig\n custom_adapter_params: boolean\n}\n\nexport enum PacketType {\n SEND,\n}\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 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 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 async getMinDstGas(oftType: string, dstChainId: aptos.BCS.Uint16, type: 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 payloadOfClaimCoin(oftType: string): aptos.Types.EntryFunctionPayload {\n return {\n function: `${this.module}::claim`,\n type_arguments: [oftType],\n arguments: [],\n }\n }\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 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 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 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 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 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 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 payloadOfCoinRegister(oftType: string): aptos.Types.EntryFunctionPayload {\n return {\n function: `0x1::managed_coin::register`,\n type_arguments: [oftType],\n arguments: [],\n }\n }\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 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!.address\n return address\n }\n\n private async getGlobalStore(oftType: string): Promise<aptos.Types.MoveResource> {\n const address = this.getTypeAddress(oftType)\n return await this.sdk.client.getAccountResource(address, `${this.module}::GlobalStore<${oftType}>`)\n }\n\n private async getCoinStore(oftType: string): Promise<aptos.Types.MoveResource> {\n const address = this.getTypeAddress(oftType)\n return await this.sdk.client.getAccountResource(address, `${this.module}::CoinStore<${oftType}>`)\n }\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 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 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 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 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 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\nexport class Oracle {\n readonly address: aptos.MaybeHexString\n public readonly module\n public readonly moduleName\n\n constructor(public sdk: SDK, address: aptos.MaybeHexString) {\n this.address = address\n this.module = `${this.address}::oracle`\n this.moduleName = 'oracle::oracle'\n }\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 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 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 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.validators\n const val = aptos.HexString.ensure(validator).toShortString()\n return validators.includes(val)\n }\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 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 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 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 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 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 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 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 async withdrawFee(\n signer: aptos.AptosAccount,\n receiver: aptos.MaybeHexString,\n amount: aptos.BCS.Uint64\n ): Promise<aptos.Types.Transaction> {\n const transaction = {\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\nexport class PreCrime {\n private sdk: SDK\n\n readonly address: aptos.MaybeHexString\n readonly module: string\n readonly moduleName: string\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 max batch size for a given OFT type\n * @param oftType The OFT type, e.g. 0x1::BTCbOFT::BTCb\n * @param eids The EIDs to set the precrime peers for, e.g. [101, 102, 106] for [ETHEREUM, BSC, AVALANCHE]\n * @param precrimePeers The precrime peers to set\n * @returns The payload to be used in the transaction\n */\n setPreCrimePeersPayload(\n oftType: string,\n eids: Array<aptos.BCS.Uint32>,\n precrimePeers: Array<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 * @param oftType The OFT type, e.g. 0x1::BTCbOFT::BTCb\n * @param maxBatchSize The max batch size to set\n * @returns 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 async getConfig(packets: Array<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 async simulate(packets: Array<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 async precrime(\n packets: Array<aptos.MaybeHexString>,\n simulations: Array<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 async getConfigTypes(packets: Array<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 async getSimulateTypes(packets: Array<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 async getPreCrimeTypes(\n packets: Array<aptos.MaybeHexString>,\n simulations: Array<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 private formatTypes(types: TypeInfo[]): Array<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 private assertType(oftType: string) {\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/constants.ts","../src/utils.ts","../src/abi.ts","../src/modules/channel.ts","../src/modules/endpoint.ts","../src/modules/executor.ts","../src/format/utils.ts","../src/format/basic.ts","../src/format/bytecode.ts","../src/format/compiled-script.ts","../src/format/table-types.ts","../src/modules/executor_config.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/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"],"names":["aptos","invariant","Stage","BCS","opcode","TableType","BN","HexString","PacketType","CoinType","bytesToHex","ExtendedBuffer"],"mappings":"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","sourcesContent":["import * as aptos from 'aptos'\nimport invariant from 'tiny-invariant'\n\nimport { Stage } from '@layerzerolabs/lz-definitions'\n\nimport { EXECUTOR_EXT_ADDRESS, LAYERZERO_ADDRESS, LAYERZERO_APPS_ADDRESS, LAYERZERO_APPS_PUBKEY } 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'\n\nexport type AccountsOption = {\n layerzero?: aptos.MaybeHexString\n msglib_auth?: aptos.MaybeHexString\n msglib_v1_1?: aptos.MaybeHexString\n msglib_v2?: 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} & Record<string, aptos.MaybeHexString>\n\nexport type SdkOptions = {\n provider: aptos.AptosClient\n stage?: Stage\n accounts?: AccountsOption\n}\n\nexport class SDK {\n stage: Stage\n client: aptos.AptosClient\n LayerzeroModule: Layerzero\n accounts: AccountsOption\n\n constructor(options: SdkOptions) {\n this.stage = options.stage ?? Stage.SANDBOX\n this.accounts = options.accounts ?? {\n layerzero: 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 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 }\n this.client = options.provider\n this.LayerzeroModule = new Layerzero(this)\n }\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 async sendAndConfirmTransaction(signer: aptos.AptosAccount, payload: aptos.Types.EntryFunctionPayload) {\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 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 = await this.client.generateTransaction(signer.address(), payload)\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 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 ) {\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 '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 async deploy(signer: aptos.AptosAccount, metadata: Uint8Array, modules: aptos.TxnBuilderTypes.Module[]) {\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 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 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","import { Environment, Stage } from '@layerzerolabs/lz-definitions'\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\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\nexport const LAYERZERO_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0x54ad3d30af77b60d939ae356e6606de9a4da67583f02b962d2d3f2e481484e90', // MAINNET\n [Stage.TESTNET]: '0x1759cc0d3161f1eb79f65847d4feb9d1f74fb79014698a23b16b28b9cd4c37e3',\n [Stage.SANDBOX]: '0x88cb10d5573e2aa38ed9a92763535ed6828c193567906a56c0f3b9158b1decb7',\n}\n\nexport const LAYERZERO_APPS_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0x43d8cad89263e6936921a0adb8d5d49f0e236c229460f01b14dca073114df2b9',\n [Stage.TESTNET]: '0x2f972c173927006c83277b6e6ae38f83482eba560f343d022f145979020d3621',\n [Stage.SANDBOX]: '0x3afbb2e0e598c6a6b1d694ae3ab6517a6d9941c99f8bb06257e1109b571bb823',\n}\n\nexport const ORACLE_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0xc2846ea05319c339b3b52186ceae40b43d4e9cf6c7350336c3eb0b351d9394eb', // MAINNET\n [Stage.TESTNET]: '0x8ab85d94bf34808386b3ce0f9516db74d2b6d2f1166aa48f75ca641f3adb6c63',\n [Stage.SANDBOX]: '0x22be7b12e214d4f9f96dc3638fb8d9e3f760e483102c4b48b04a2a656de5a24a',\n}\n\n// resource, not contract. update after deploy\nexport const ORACLE_SIGNER_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0x12e12de0af996d9611b0b78928cd9f4cbf50d94d972043cdd829baa77a78929b', // MAINNET\n [Stage.TESTNET]: '0x47a30bcdb5b5bdbf6af883c7325827f3e40b3f52c3538e9e677e68cf0c0db060',\n [Stage.SANDBOX]: '0xbccf3169d417448997cb4928e2b8e33e97067871b8564b20c5c2ef6c3a7bf377',\n}\n\nexport const RELAYER_SIGNER_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0x1d8727df513fa2a8785d0834e40b34223daff1affc079574082baadb74b66ee4', // MAINNET\n [Stage.TESTNET]: '0xc192864c4215741051321d44f89c3b7a54840a0b1b7ef5bec6149a07f9df4641',\n [Stage.SANDBOX]: '0xc180500ddac3fef70cb1e9fc0d75793850e2cef84d518ea0a3b3adfb93751ea7',\n}\n\nexport const EXECUTOR_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0x1d8727df513fa2a8785d0834e40b34223daff1affc079574082baadb74b66ee4', // MAINNET\n [Stage.TESTNET]: '0xc192864c4215741051321d44f89c3b7a54840a0b1b7ef5bec6149a07f9df4641',\n [Stage.SANDBOX]: '0xc180500ddac3fef70cb1e9fc0d75793850e2cef84d518ea0a3b3adfb93751ea7',\n}\n\nexport const EXECUTOR_EXT_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0xd122ac52d43736e0f524a334fc37b6750884559da7ddf1aee0b11b6ae62643d7', // MAINNET\n [Stage.TESTNET]: '0x39942f4bd78e899f162644b5ec5998a19cb6de1ff8b7321070cb75cf96e5cf6c',\n [Stage.SANDBOX]: '0xeed8a91797cdfcbe0d33f92b57b76830f1ff6b4613db00f0c33035e31f77c936',\n}\n\n// LAYERZERO_APPS_PUBKEY will be used to call simulateTransaction\nexport const LAYERZERO_APPS_PUBKEY: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0xf57e5a95ae0e2b5f999ac14abd0ff73daf64e6e7e2a1fad024f2e44422e88d76', // MAINNET\n [Stage.TESTNET]: '0xa6d39a1f522da0298a387032952393b1dd2f88ea75423de05c26792930c60ac0',\n [Stage.SANDBOX]: '0x3378e95c0f5f245208d3b330815eccdf704df522ccdebceabb4310354dd22e06',\n}\n\nexport const BRIDGE_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa', // MAINNET\n [Stage.TESTNET]: '0xec84c05cc40950c86d8a8bed19552f1e8ebb783196bb021c916161d22dc179f7',\n [Stage.SANDBOX]: '0x96a9b4d53a6cb4f4fe2c43a82ab71b52624396f0792b64b5f23a1085690d8edb',\n}\n\nexport const BRIDGE_PRECRIME_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0x16c7d29eea08ac77dfc4e4665bb56da0ded4e7b82c4c25d535b3d5a5fd6071ad',\n [Stage.TESTNET]: '0x3ed30825c327d8ee51e079c48b12981053fe2bfe07f74a6572726abf4d5c9afc',\n [Stage.SANDBOX]: '', // TODO TESTNET_SANDBOX\n}\n\nexport const OFT_PRECRIME_ADDRESS: { [stage in Stage]?: string } = {\n [Stage.MAINNET]: '0x273f3e39593a6723adcecd5aa112158c07239043f79609a0380473157c841e19',\n [Stage.TESTNET]: '0x9fea38276544542be16c4592d1b10cf08d4d9dee33b51eca8a88f17921d985d2',\n [Stage.SANDBOX]: '', // TODO TESTNET_SANDBOX\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 { Packet, TypeInfo } from './types'\n\nimport { SDK } from './index'\n\nexport const ZERO_ADDRESS_HEX = fullAddress('0x0').toString()\nexport const ZERO_ADDRESS_BYTES = fullAddress('0x0').toUint8Array()\nexport const GAS_LIMIT_SAFETY_BPS = 2000\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\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 interface GetAddressSizeOfChainFunc {\n (chainId: number): Promise<number>\n}\n\n/**\n * decode the packet generated on the Aptos chain only, it assumes that the size of the source address is 32\n * @param buf\n * @param getAddressSizeOfChain a number or a function to return size of the destination address\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\nexport async function decodePacketString(encodedPacket: string, dstAddressSize: number) {\n return decodePacket(Buffer.from(aptos.HexString.ensure(encodedPacket).toUint8Array()), dstAddressSize)\n}\n\nexport function hashBuffer(buf: Buffer): string {\n return crypto.createHash('sha3-256').update(buf).digest('hex')\n}\n\nexport function hashPacket(packet: Packet): string {\n return hashBuffer(encodePacket(packet))\n}\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\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\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\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\nfunction isHexStrict(hex: string): boolean {\n return /^(-)?0x[0-9a-f]*$/i.test(hex)\n}\n\n//https://github.com/ChainSafe/web3.js/blob/release/1.7.5/packages/web3-utils/src/index.js#L166\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.substring(0, 2) === '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\nexport function isSameAddress(a: string | HexString, b: string | HexString): boolean {\n return fullAddress(a).toString() == fullAddress(b).toString()\n}\n\nexport function isZeroAddress(a: string | HexString): boolean {\n return isSameAddress(a, ZERO_ADDRESS_HEX)\n}\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\nexport function convertBytesToUint64(bytes: aptos.BCS.Bytes): aptos.BCS.Uint64 {\n return BigInt(new BN(bytes, 'be').toString())\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isErrorOfApiError(e: any, status: number) {\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 * convert aptos.BCS.Bytes to an Uint8Array, left padding with 0x0 elements\n * @param data\n * @param length\n */\nexport function bytesToUint8Array(data: aptos.BCS.Bytes, length: number) {\n return paddingUint8Array(data, length)\n}\n\n/**\n * convert a hex string to an Uint8Array, left padding with 0x0 elements\n * @deprecated use {@link stringToPaddedUint8Array}\n * @param str a hex string, can be starting with 0x\n * @param length array length\n */\nexport function convertToPaddedUint8Array(str: string, length: number): Uint8Array {\n return stringToPaddedUint8Array(str, length)\n}\n\n/**\n * convert a hex string to an Uint8Array, left padding with 0x0 elements\n * @param str a hex string, can be starting with 0x\n * @param length array length\n */\nexport function stringToPaddedUint8Array(str: string, length: number): Uint8Array {\n const value = stringToUint8Array(str)\n return paddingUint8Array(value, length)\n}\n\n/**\n * left padding with 0x0 elements\n * @param bytes\n * @param length\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 * @param str a hex string, can be starting with 0x\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\nexport interface MutipleSignatureItem {\n signature: aptos.HexString\n bitmap: number\n}\n\nexport type MultipleSignFunc = (data: Uint8Array) => Promise<MutipleSignatureItem[]>\n\nexport function makeSignFuncWithMultipleSigners(...signers: aptos.AptosAccount[]) {\n return 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\nexport function applyGasLimitSafety(gasUsed: string): bigint {\n return (BigInt(gasUsed) * BigInt(10000 + GAS_LIMIT_SAFETY_BPS)) / BigInt(10000)\n}\n\nexport function decodePayload(payload: Buffer) {\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\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\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 * @param bytecode - generated by `make compile-script-template`\n * @param sdk\n * @param publicKey - the public key of the signer who will submit transaction\n * @param dstAddress - UA address on Aptos, this function will get UA typeInfo({@link types.TypeInfoEx}) with dstAddress\n * @param srcChainId - the src chainId of the packet\n * @param srcAddress - the src address(UA address) of the packet\n * @param payload - the payload of the packet\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 !== true) {\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\nconst DERIVE_RESOURCE_ACCOUNT_SCHEME = 255\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\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\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\nexport function normalizeTypeInfo(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\nexport function buildStructTagFromTypeInfo(typeInfo: TypeInfo) {\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\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\nexport class TypeArgumentABI {\n /**\n * Constructs a TypeArgumentABI instance.\n * @param name\n */\n constructor(public readonly name: string) {}\n\n serialize(serializer: aptos.BCS.Serializer): void {\n serializer.serializeStr(this.name)\n }\n\n static deserialize(deserializer: aptos.BCS.Deserializer): TypeArgumentABI {\n const name = deserializer.deserializeStr()\n return new TypeArgumentABI(name)\n }\n}\n\nexport class ArgumentABI {\n /**\n * Constructs an ArgumentABI instance.\n * @param name\n * @param type_tag\n */\n constructor(\n public readonly name: string,\n public readonly type_tag: aptos.TxnBuilderTypes.TypeTag\n ) {}\n\n serialize(serializer: aptos.BCS.Serializer): void {\n serializer.serializeStr(this.name)\n this.type_tag.serialize(serializer)\n }\n\n static deserialize(deserializer: aptos.BCS.Deserializer): TypeArgumentABI {\n const name = deserializer.deserializeStr()\n const typeTag = aptos.TxnBuilderTypes.TypeTag.deserialize(deserializer)\n return new ArgumentABI(name, typeTag)\n }\n}\n\nexport abstract class ScriptABI {\n abstract serialize(serializer: aptos.BCS.Serializer): void\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\nexport class TransactionScriptABI extends ScriptABI {\n /**\n * Constructs a TransactionScriptABI instance.\n * @param name Entry function name\n * @param doc\n * @param code\n * @param ty_args\n * @param args\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 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 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\nexport class EntryFunctionABI extends ScriptABI {\n /**\n * Constructs a EntryFunctionABI instance\n * @param name\n * @param module_name Fully qualified module id\n * @param doc\n * @param ty_args\n * @param args\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 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 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\nexport interface ChannelType {\n outbound_nonce: string\n inbound_nonce: string\n payload_hashs: { handle: string }\n}\n\nexport class Channel {\n public readonly module\n constructor(private sdk: SDK) {\n this.module = `${sdk.accounts.layerzero}::channel`\n }\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 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 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 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 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 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 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 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'\n\nimport { SDK } from '../index'\nimport { TypeInfoEx } from '../types'\nimport { fullAddress, hexToAscii } from '../utils'\n\nexport class Endpoint {\n public readonly module\n public readonly moduleName\n constructor(private sdk: SDK) {\n this.module = `${sdk.accounts.layerzero}::endpoint`\n this.moduleName = 'layerzero::endpoint'\n }\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 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 async getOracleFee(oracleAddr: aptos.MaybeHexString, dstChainId: aptos.BCS.Uint16): Promise<aptos.BCS.Uint64> {\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 async getRegisterEvents(start: bigint, limit: number): Promise<aptos.Types.Event[]> {\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 async quoteFee(\n uaAddress: aptos.MaybeHexString,\n dstChainId: aptos.BCS.Uint16,\n adapterParams: aptos.BCS.Bytes,\n payloadSize: number,\n query?: {\n ledgerVersion?: bigint | number\n }\n ): Promise<aptos.BCS.Uint64> {\n let totalFee = BigInt(\n await this.sdk.LayerzeroModule.Uln.Config.quoteFee(uaAddress, dstChainId, payloadSize, query)\n )\n\n const [executor] = await this.sdk.LayerzeroModule.ExecutorConfig.getExecutor(uaAddress, dstChainId, query)\n\n totalFee += await this.sdk.LayerzeroModule.Executor.quoteFee(executor, dstChainId, adapterParams, query)\n\n return totalFee\n }\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 async registerExecutor(signer: aptos.AptosAccount, executorType: string): Promise<aptos.Types.Transaction> {\n const transaction = this.registerExecutorPayload(executorType)\n return await this.sdk.sendAndConfirmTransaction(signer, transaction)\n }\n}\n","import * as aptos from 'aptos'\n\nimport { rebuildCompileScriptBytecode } from '../format/utils'\nimport { SDK } from '../index'\nimport { Packet } from '../types'\nimport {\n convertBytesToUint64,\n convertUint64ToBytes,\n getLzReceiveTypeArguments,\n isErrorOfApiError,\n stringToUint8Array,\n} from '../utils'\n\nexport interface Fee {\n airdropAmtCap: aptos.BCS.Uint64\n priceRatio: aptos.BCS.Uint64\n gasPrice: aptos.BCS.Uint64\n}\n\n// todo: merge into endpoint\nexport class Executor {\n public readonly module\n public readonly moduleName\n public readonly type\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 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 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 async getDefaultAdapterParams(chainId: aptos.BCS.Uint16): Promise<aptos.BCS.Bytes> {\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 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 registerPayload(): aptos.Types.EntryFunctionPayload {\n return {\n function: `${this.module}::register`,\n type_arguments: [],\n arguments: [],\n }\n }\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 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 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 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 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 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 async isAirdropped(guid: aptos.BCS.Bytes, receiver: aptos.MaybeHexString): Promise<boolean> {\n try {\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 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 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 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 // 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 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 * rebuild a compiled script to query types arguments for lz_receive function\n * @param packet\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 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 * execute compiled script on chain to get types arguments for lz_receive function\n * @param packet\n */\n async getLzReceiveTypeArguments(packet: Packet): Promise<string[]> {\n const bytecode = await this.rebuildTypeArgsScript(packet)\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 async getLzReceivePayload(type_arguments: string[], packet: Packet): Promise<aptos.Types.EntryFunctionPayload> {\n const uaTypeInfo = await this.sdk.LayerzeroModule.Endpoint.getUATypeInfo(\n aptos.HexString.fromBuffer(packet.dst_address)\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 async lzReceive(signer: aptos.AptosAccount, type_arguments: string[], packet: Packet) {\n const transaction = await this.getLzReceivePayload(type_arguments, packet)\n return this.sdk.sendAndConfirmTransaction(signer, transaction)\n }\n\n getShortRequestEventType() {\n return `${this.module}::RequestEvent`.replace(/^(0x)0*/i, '$1')\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\ninterface Serializable {\n serialize(serializer: BCS.Serializer): void\n}\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\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\nexport function isOutOfBoundError(e: Error) {\n return e.message.match(/Reached to the end of buffer/) !== null\n}\n\ninterface CompiledUnit {\n identifiers: Identifier[]\n addressIdentifiers: AddressIdentifier[]\n}\n\nexport function isEqual(a: Uint8Array, b: Uint8Array): boolean {\n return a.length === b.length && a.every((v, i) => v === b[i])\n}\n\nexport function replaceTableValue<T extends CompiledUnit>(\n compiled: T,\n tableType: TableType,\n oldValue: any,\n newValue: any\n) {\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\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) {\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'\nimport { BCS } from 'aptos'\n\nimport * as Bytecode from './bytecode'\nimport { Opcodes } from './opcodes'\nimport { isOutOfBoundError } from './utils'\n\nexport class Table {\n constructor(\n public kind: BCS.Uint8,\n public offset: BCS.Uint32,\n public count: BCS.Uint32\n ) {}\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 public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU32AsUleb128(this.kind)\n serializer.serializeU32AsUleb128(this.offset)\n serializer.serializeU32AsUleb128(this.count)\n }\n}\n\nexport class Tables {\n constructor(\n public tables: BCS.Seq<Table>,\n public data: BCS.Bytes\n ) {}\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 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\nexport class AbilitySet {\n constructor(public ability: BCS.Uint8) {}\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 public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU32AsUleb128(this.ability)\n }\n}\n\nexport class Index {\n constructor(public index: BCS.Uint32) {}\n\n static deserialize(deserializer: BCS.Deserializer): Index {\n const index = deserializer.deserializeUleb128AsU32()\n return new Index(index)\n }\n\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU32AsUleb128(this.index)\n }\n}\n\nexport class Code {\n constructor(\n public locals: Index,\n public count: BCS.Uint32,\n public codes: BCS.Seq<Bytecode.Bytecode>\n ) {}\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 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\nexport class Header {\n constructor(\n public magic: BCS.Bytes,\n public version: BCS.Uint32\n ) {}\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 public serialize(serializer: BCS.Serializer): void {\n serializer.serializeFixedBytes(this.magic)\n serializer.serializeU32(this.version)\n }\n}\n\nexport class ModuleHandle {\n constructor(\n public address: Index,\n public name: Index\n ) {}\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 public serialize(serializer: BCS.Serializer): void {\n this.address.serialize(serializer)\n this.name.serialize(serializer)\n }\n}\n\nexport class StructTypeParameter {\n constructor(\n public constraints: AbilitySet,\n public isPhantom: boolean\n ) {}\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 public serialize(serializer: BCS.Serializer): void {\n this.constraints.serialize(serializer)\n serializer.serializeU32AsUleb128(this.isPhantom ? 1 : 0)\n }\n}\n\nexport class StructHandle {\n constructor(\n public module: Index,\n public name: Index,\n public abilities: AbilitySet,\n public typeParameters: BCS.Seq<Index>\n ) {}\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 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\nexport class FunctionHandle {\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 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 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\nexport class FunctionInstantiation {\n constructor(\n public handle: Index,\n public typeParameters: BCS.Seq<Index>\n ) {}\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 public serialize(serializer: BCS.Serializer): void {\n this.handle.serialize(serializer)\n BCS.serializeVector(this.typeParameters, serializer)\n }\n}\n\nexport class Identifier {\n constructor(public value: string) {}\n\n static deserialize(deserializer: BCS.Deserializer): Identifier {\n const value = deserializer.deserializeStr()\n return new Identifier(value)\n }\n\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeStr(this.value)\n }\n}\n\n// NOTE: AccountAddress is 20/32/16 bytes\nexport class AddressIdentifier {\n constructor(public address: BCS.Bytes) {}\n\n static deserialize(deserializer: BCS.Deserializer): AddressIdentifier {\n const address = deserializer.deserializeFixedBytes(32)\n return new AddressIdentifier(address)\n }\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 public serialize(serializer: BCS.Serializer): void {\n serializer.serializeFixedBytes(this.address)\n }\n\n public toJSON(): string {\n return aptos.HexString.fromUint8Array(this.address).toString()\n }\n}\n\nexport function load_module_handles(deserializer: BCS.Deserializer): BCS.Seq<ModuleHandle> {\n return load_handles(deserializer, ModuleHandle)\n}\n\nexport function load_struct_handles(deserializer: BCS.Deserializer): BCS.Seq<StructHandle> {\n return load_handles(deserializer, StructHandle)\n}\n\nexport function load_function_handles(deserializer: BCS.Deserializer): BCS.Seq<FunctionHandle> {\n return load_handles(deserializer, FunctionHandle)\n}\n\nexport function load_function_instantiations(deserializer: BCS.Deserializer): BCS.Seq<FunctionInstantiation> {\n return load_handles(deserializer, FunctionInstantiation)\n}\n\nexport function load_identifiers(deserializer: BCS.Deserializer): BCS.Seq<Identifier> {\n return load_handles(deserializer, Identifier)\n}\n\nexport function load_address_identifiers(deserializer: BCS.Deserializer): BCS.Seq<AddressIdentifier> {\n return load_handles(deserializer, AddressIdentifier)\n}\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","import { BCS } from 'aptos'\n\nimport { Index } from './basic'\nimport { Opcodes } from './opcodes'\n\nexport abstract class Bytecode {\n abstract serialize(serializer: BCS.Serializer): void\n\n static deserialize(deserializer: BCS.Deserializer): Bytecode {\n throw new Error('Not implemented')\n }\n}\n\nexport class UnaryBytecode extends Bytecode {\n constructor(public opcode: Opcodes) {\n super()\n }\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU8(this.opcode)\n }\n static deserialize(deserializer: BCS.Deserializer): Bytecode {\n const opcode = deserializer.deserializeU8()\n return new UnaryBytecode(opcode)\n }\n}\n\nexport class BinaryBytecode extends Bytecode {\n constructor(\n public opcode: Opcodes,\n public operand: Index\n ) {\n super()\n }\n\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU8(this.opcode)\n this.operand.serialize(serializer)\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\nexport class ROP extends UnaryBytecode {}\nexport class RET extends UnaryBytecode {}\nexport class BR_TRUE extends BinaryBytecode {}\nexport class BR_FALSE extends BinaryBytecode {}\nexport class BRANCH extends BinaryBytecode {}\n\nexport class LD_U8 extends Bytecode {\n constructor(\n public opcode: Opcodes,\n public value: BCS.Uint8\n ) {\n super()\n }\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU8(this.opcode)\n serializer.serializeU8(this.value)\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\nexport class LD_U64 extends Bytecode {\n constructor(\n public opcode: Opcodes,\n public value: BCS.Uint64\n ) {\n super()\n }\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU8(this.opcode)\n serializer.serializeU64(this.value)\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\nexport class LD_U128 extends Bytecode {\n constructor(\n public opcode: Opcodes,\n public value: BCS.Uint128\n ) {\n super()\n }\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU8(this.opcode)\n serializer.serializeU128(this.value)\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\nexport class CAST_U8 extends UnaryBytecode {}\nexport class CAST_U64 extends UnaryBytecode {}\nexport class CAST_U128 extends UnaryBytecode {}\nexport class LD_CONST extends BinaryBytecode {}\nexport class LD_TRUE extends UnaryBytecode {}\nexport class LD_FALSE extends UnaryBytecode {}\nexport class COPY_LOC extends BinaryBytecode {}\nexport class MOVE_LOC extends BinaryBytecode {}\nexport class ST_LOC extends BinaryBytecode {}\nexport class MUT_BORROW_LOC extends BinaryBytecode {}\nexport class IMM_BORROW_LOC extends BinaryBytecode {}\nexport class MUT_BORROW_FIELD extends BinaryBytecode {}\nexport class MUT_BORROW_FIELD_GENERIC extends BinaryBytecode {}\nexport class IMM_BORROW_FIELD extends BinaryBytecode {}\nexport class IMM_BORROW_FIELD_GENERIC extends BinaryBytecode {}\nexport class CALL extends BinaryBytecode {}\nexport class CALL_GENERIC extends BinaryBytecode {}\nexport class PACK extends BinaryBytecode {}\nexport class PACK_GENERIC extends BinaryBytecode {}\nexport class UNPACK extends BinaryBytecode {}\nexport class UNPACK_GENERIC extends BinaryBytecode {}\nexport class READ_REF extends UnaryBytecode {}\nexport class WRITE_REF extends UnaryBytecode {}\nexport class ADD extends UnaryBytecode {}\nexport class SUB extends UnaryBytecode {}\nexport class MUL extends UnaryBytecode {}\nexport class MOD extends UnaryBytecode {}\nexport class DIV extends UnaryBytecode {}\nexport class BIT_OR extends UnaryBytecode {}\nexport class BIT_AND extends UnaryBytecode {}\nexport class XOR extends UnaryBytecode {}\nexport class SHL extends UnaryBytecode {}\nexport class SHR extends UnaryBytecode {}\nexport class OR extends UnaryBytecode {}\nexport class AND extends UnaryBytecode {}\nexport class NOT extends UnaryBytecode {}\nexport class EQ extends UnaryBytecode {}\nexport class NEQ extends UnaryBytecode {}\nexport class LT extends UnaryBytecode {}\nexport class GT extends UnaryBytecode {}\nexport class LE extends UnaryBytecode {}\nexport class GE extends UnaryBytecode {}\nexport class ABORT extends UnaryBytecode {}\nexport class NOP extends UnaryBytecode {}\nexport class EXISTS extends BinaryBytecode {}\nexport class EXISTS_GENERIC extends BinaryBytecode {}\nexport class MUT_BORROW_GLOBAL extends BinaryBytecode {}\nexport class MUT_BORROW_GLOBAL_GENERIC extends BinaryBytecode {}\nexport class IMM_BORROW_GLOBAL extends BinaryBytecode {}\nexport class IMM_BORROW_GLOBAL_GENERIC extends BinaryBytecode {}\nexport class MOVE_FROM extends BinaryBytecode {}\nexport class MOVE_FROM_GENERIC extends BinaryBytecode {}\nexport class MOVE_TO extends BinaryBytecode {}\nexport class MOVE_TO_GENERIC extends BinaryBytecode {}\nexport class FREEZE_REF extends UnaryBytecode {}\n\nexport class VEC_PACK extends Bytecode {\n constructor(\n public opcode: Opcodes,\n public operand: Index,\n public value: BCS.Uint64\n ) {\n super()\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 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\nexport class VEC_LEN extends BinaryBytecode {}\nexport class VEC_IMM_BORROW extends BinaryBytecode {}\nexport class VEC_MUT_BORROW extends BinaryBytecode {}\nexport class VEC_PUSH_BACK extends BinaryBytecode {}\nexport class VEC_POP_BACK extends BinaryBytecode {}\n\nexport class VEC_UNPACK extends Bytecode {\n constructor(\n public opcode: Opcodes,\n public operand: Index,\n public value: BCS.Uint64\n ) {\n super()\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 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\nexport class VEC_SWAP extends BinaryBytecode {}\n\nexport class LD_U16 extends Bytecode {\n constructor(\n public opcode: Opcodes,\n public value: BCS.Uint16\n ) {\n super()\n }\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU8(this.opcode)\n serializer.serializeU16(this.value)\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\nexport class LD_U32 extends Bytecode {\n constructor(\n public opcode: Opcodes,\n public value: BCS.Uint32\n ) {\n super()\n }\n public serialize(serializer: BCS.Serializer): void {\n serializer.serializeU8(this.opcode)\n serializer.serializeU32(this.value)\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\nexport class LD_U256 extends Bytecode {\n constructor(\n public opcode: Opcodes,\n public value: BCS.Bytes\n ) {\n super()\n }\n public serialize(serializer: BCS.Serializer): void {\n throw new Error('Method not implemented.')\n }\n static deserialize(deserializer: BCS.Deserializer): Bytecode {\n throw new Error('Method not implemented.')\n }\n}\n\nexport class CAST_U16 extends UnaryBytecode {}\nexport class CAST_U32 extends UnaryBytecode {}\nexport class CAST_U256 extends UnaryBytecode {}\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\nexport class CompiledScriptRaw {\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 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 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\nexport class CompiledScript {\n // @ts-ignore\n public header: Header\n // @ts-ignore\n public table: Tables\n\n public moduleHandles: ModuleHandle[] = []\n public structHandles: StructHandle[] = []\n public functionHandles: FunctionHandle[] = []\n public functionInstatiations: FunctionInstantiation[] = []\n // @ts-ignore\n public signatures: BCS.Bytes\n // @ts-ignore\n public constantPool: BCS.Bytes\n // @ts-ignore\n public metadata: BCS.Bytes\n public identifiers: Identifier[] = []\n public addressIdentifiers: AddressIdentifier[] = []\n // @ts-ignore\n public typeParameters: BCS.Seq<AbilitySet>\n // @ts-ignore\n public parameters: Index\n // @ts-ignore\n public code: Code\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 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","export enum TableType {\n MODULE_HANDLES = 0x1,\n STRUCT_HANDLES = 0x2,\n FUNCTION_HANDLES = 0x3,\n FUNCTION_INST = 0x4,\n SIGNATURES = 0x5,\n CONSTANT_POOL = 0x6,\n IDENTIFIERS = 0x7,\n ADDRESS_IDENTIFIERS = 0x8,\n STRUCT_DEFS = 0xa,\n STRUCT_DEF_INST = 0xb,\n FUNCTION_DEFS = 0xc,\n FIELD_HANDLE = 0xd,\n FIELD_INST = 0xe,\n FRIEND_DECLS = 0xf,\n METADATA = 0x10,\n}\n","import * as aptos from 'aptos'\n\nimport { SDK } from '../index'\nimport { isErrorOfApiError } from '../utils'\n\nexport class ExecutorConfig {\n public readonly module\n\n constructor(private sdk: SDK) {\n this.module = `${sdk.accounts.layerzero}::executor_config`\n }\n\n async getDefaultExecutor(remoteChainId: aptos.BCS.Uint16): Promise<[string, aptos.BCS.Uint64]> {\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 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 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 MsgLibAuth {\n public readonly module\n public readonly moduleName\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 async isAllowed(msglibReceive: string): Promise<boolean[]> {\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 denyPayload(msglibReceive: string): aptos.Types.EntryFunctionPayload {\n return {\n function: `${this.module}::deny`,\n type_arguments: [],\n arguments: [msglibReceive],\n }\n }\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 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\nexport class MsgLibConfig {\n public readonly module\n public readonly moduleName\n public readonly semverModule\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 async getDefaultSendMsgLib(\n remoteChainId: aptos.BCS.Uint16\n ): Promise<{ major: aptos.BCS.Uint64; minor: aptos.BCS.Uint8 }> {\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 async getDefaultReceiveMsgLib(\n remoteChainId: aptos.BCS.Uint16\n ): Promise<{ major: aptos.BCS.Uint64; minor: aptos.BCS.Uint8 }> {\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 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 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\nexport class MsgLibV1_0 {\n public readonly module\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\nexport class PacketEvent {\n public readonly module\n constructor(private sdk: SDK) {\n this.module = `${sdk.accounts.layerzero}::packet_event`\n }\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 async getInboundEventCount(): Promise<number> {\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 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 async getOutboundEventCount(): Promise<number> {\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 TYPE_ORACLE = 0\n TYPE_RELAYER = 1\n TYPE_INBOUND_CONFIRMATIONS = 2\n TYPE_OUTBOUND_CONFIRMATIONS = 3\n\n public readonly module\n public readonly moduleName\n constructor(private sdk: SDK) {\n this.module = `${sdk.accounts.layerzero}::uln_config`\n this.moduleName = 'layerzero::uln_config'\n }\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 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 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 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 async getChainAddressSize(remoteChainId: aptos.BCS.Uint16): Promise<aptos.BCS.Uint8> {\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 async getDefaultAppConfig(\n remoteChainId: aptos.BCS.Uint16,\n query?: {\n ledgerVersion?: bigint | number\n }\n ): Promise<UlnConfigType> {\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 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 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 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 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 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 { HexString } from 'aptos'\n\nimport { SDK } from '../../index'\nimport { MultipleSignFunc } from '../../utils'\n\nexport class UlnReceive {\n public readonly module\n constructor(private sdk: SDK) {\n this.module = `${sdk.accounts.layerzero}::uln_receive`\n }\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 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 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 async getProposal(oracle: aptos.MaybeHexString, hash: string): Promise<aptos.BCS.Uint64> {\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 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 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 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 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 getSubmitHashSigningMessage(txn: aptos.TxnBuilderTypes.RawTransaction): aptos.TxnBuilderTypes.SigningMessage {\n return aptos.TransactionBuilderMultiEd25519.getSigningMessage(txn)\n }\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 await 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\nexport class UlnSigner {\n public readonly module\n public readonly moduleName\n constructor(private sdk: SDK) {\n this.module = `${sdk.accounts.layerzero}::uln_signer`\n this.moduleName = 'layerzero::uln_signer'\n }\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 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 await this.sdk.sendAndConfirmMultiSigTransaction(\n this.sdk.client,\n multisigAccountAddress,\n multisigAccountPubkey,\n payload,\n signFunc\n )\n }\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 registerPayload(): aptos.Types.EntryFunctionPayload {\n return {\n function: `${this.module}::register`,\n type_arguments: [],\n arguments: [],\n }\n }\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 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 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 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 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 await this.sdk.sendAndConfirmMultiSigTransaction(\n this.sdk.client,\n multisigAccountAddress,\n multisigAccountPubkey,\n payload,\n signFunc\n )\n }\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 { SDK } from '../../index'\n\nimport { 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'\n\nexport class Uln {\n Receive: UlnReceive\n Signer: UlnSigner\n Config: UlnConfig\n MsgLibV1: MsgLibV1_0\n PacketEvent: PacketEvent\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 { SDK } from '../index'\n\nimport { Channel } from './channel'\nimport { Endpoint } from './endpoint'\nimport { Executor } from './executor'\nimport { ExecutorConfig } from './executor_config'\nimport { MsgLibAuth } from './msglib_auth'\nimport { MsgLibConfig } from './msglib_config'\nimport { Uln } from './uln'\n\nexport class Layerzero {\n Channel: Channel\n Executor: Executor\n Endpoint: Endpoint\n Uln: Uln\n MsgLibConfig: MsgLibConfig\n MsgLibAuth: MsgLibAuth\n ExecutorConfig: ExecutorConfig\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 }\n}\n","import * as aptos from 'aptos'\n\n/**\n * consistent with aptos_std::type_info::TypeInfo\n */\nexport interface TypeInfo {\n account_address: string\n module_name: string\n struct_name: string\n}\n\n/**\n * extend {@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\nexport interface CoinInfo {\n name: string\n symbol: string\n decimals: number\n supply: bigint\n}\n\nexport interface CoinInfoEx extends CoinInfo {\n type: string\n}\n\nexport interface CoinInfoResource {\n type: string\n data: {\n decimals: number\n name: string\n supply: {\n vec: [{ integer: { vec: [{ value: string }] } }]\n }\n symbol: string\n }\n}\n\nexport interface UlnConfigType {\n inbound_confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n oracle: string\n outbound_confirmations: aptos.BCS.Uint64 | aptos.BCS.Uint32\n relayer: string\n}\n\nexport interface Packet {\n nonce: string | aptos.BCS.Uint64\n src_chain_id: string | aptos.BCS.Uint16\n src_address: Buffer\n dst_chain_id: string | aptos.BCS.Uint16\n dst_address: Buffer\n payload: Buffer\n}\n\nexport interface UlnSignerFee {\n base_fee: aptos.BCS.Uint64\n fee_per_byte: aptos.BCS.Uint64\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\nexport interface RemoteCoin {\n address: aptos.BCS.Bytes\n tvlSD: aptos.BCS.Uint64\n unwrappable: boolean\n}\n\nexport enum PacketType {\n RECIEVE,\n SEND,\n}\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 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 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 async getMinDstGas(dstChainId: aptos.BCS.Uint16, type: aptos.BCS.Uint64) {\n return this.lzApp.getMinDstGas(this.uaType, dstChainId, type)\n }\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 /** @deprecated use {@link isCustomAdapterParamsEnabled} instead */\n async customAdapterParamsEnabled(): Promise<boolean> {\n return this.isCustomAdapterParamsEnabled()\n }\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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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.unwrappable\n return {\n address,\n tvlSD,\n unwrappable,\n }\n }\n\n private async getCoinStore(coin: MayBeBridgeCoinType): Promise<aptos.Types.MoveResource> {\n return await this.sdk.client.getAccountResource(\n this.address,\n `${this.module}::CoinStore<${this.coin.getCoinType(coin)}>`\n )\n }\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 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 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 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 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 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 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 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 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 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 private async getCoinTypeStore(): Promise<aptos.Types.MoveResource> {\n return await this.sdk.client.getAccountResource(this.address, `${this.module}::CoinTypeStore`)\n }\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 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.name\n const symbol = coinInfo.data.symbol\n const decimals = coinInfo.data.decimals\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 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 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 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 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 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 async setGlobalPause(signer: aptos.AptosAccount, pause: boolean): Promise<aptos.Types.Transaction> {\n const transaction = {\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// todo: refactor\nexport class LzApp {\n private sdk: SDK\n private readonly lzApp: aptos.MaybeHexString\n private readonly ua: aptos.MaybeHexString\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 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 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 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 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 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 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 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 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 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 ) {\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\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}\nexport const supportedTypes = [CoinType.WETH, CoinType.WBTC, CoinType.USDC, CoinType.USDT, CoinType.BUSD, CoinType.USDD]\n\nexport type BridgeCoinType =\n | CoinType.WETH\n | CoinType.WBTC\n | CoinType.USDC\n | CoinType.USDT\n | CoinType.BUSD\n | CoinType.USDD\n\nexport type MayBeBridgeCoinType = BridgeCoinType | string | TypeInfo\n\nexport function isCoinType(value: CoinType | any): value is CoinType {\n return Object.values(CoinType).includes(value)\n}\n\nexport class Coin {\n private sdk: SDK\n private readonly bridge: aptos.MaybeHexString\n\n constructor(sdk: SDK, bridge?: aptos.MaybeHexString) {\n this.sdk = sdk\n this.bridge = bridge ?? BRIDGE_ADDRESS[sdk.stage]!\n }\n\n getCoinType(coin: CoinType | string | TypeInfo): string {\n if (isTypeInfo(coin)) {\n return buildStructTagFromTypeInfo(coin as TypeInfo)\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 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::coin::transfer`,\n type_arguments: [this.getCoinType(coin)],\n arguments: [to, amount],\n }\n }\n }\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 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 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 { SDK } from '../../index'\nimport { UlnConfigType } from '../../types'\nimport { isErrorOfApiError } from '../../utils'\n\nimport { LzApp } from './lzapp'\n\nexport class Counter {\n private sdk: SDK\n private lzApp: LzApp\n private readonly uaType: string\n readonly address: aptos.MaybeHexString\n SEND_PAYLOAD_LENGTH = 4\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 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 async getRemote(remoteChainId: aptos.BCS.Uint16): Promise<aptos.BCS.Bytes> {\n return this.lzApp.getRemote(remoteChainId)\n }\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 createCounterPayload(i: aptos.BCS.Uint64 | aptos.BCS.Uint32): aptos.Types.EntryFunctionPayload {\n return {\n function: `${this.address}::counter::create_counter`,\n type_arguments: [],\n arguments: [i],\n }\n }\n\n async createCounter(\n signer: aptos.AptosAccount,\n i: aptos.BCS.Uint64 | aptos.BCS.Uint32\n ): Promise<aptos.Types.Transaction> {\n const transaction = this.createCounterPayload(i)\n return this.sdk.sendAndConfirmTransaction(signer, transaction)\n }\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 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 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 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 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 ) {\n await this.lzApp.setConfigBundle(signer, this.uaType, majorVersion, minorVersion, remoteChainId, config)\n }\n\n sendToRemotePayload(\n remoteChainId: aptos.BCS.Uint16,\n fee: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n adapterParams: Uint8Array\n ) {\n return {\n function: `${this.address}::counter::send_to_remote`,\n type_arguments: [],\n arguments: [remoteChainId, fee, Array.from(adapterParams)],\n }\n }\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 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 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","import * as aptos from 'aptos'\n\nimport { SDK } from '../../index'\nimport { fullAddress, generateMultisig, stringToUint8Array } from '../../utils'\n\nexport class MultisigOracle {\n readonly address: aptos.MaybeHexString\n public readonly module\n public readonly moduleName\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 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 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 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 getTransferValidatorPayload(newValidator: aptos.MaybeHexString) {\n return {\n function: `${this.module}::transfer_validator`,\n type_arguments: [],\n arguments: [newValidator],\n }\n }\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 getSetAdminPayload(candidate: aptos.MaybeHexString, active: boolean) {\n return {\n function: `${this.module}::set_admin`,\n type_arguments: [],\n arguments: [candidate, active],\n }\n }\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 getAllowlistPayload(ua: aptos.MaybeHexString) {\n return {\n function: `${this.module}::allowlist`,\n type_arguments: [],\n arguments: [ua],\n }\n }\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 getDenylistPayload(ua: aptos.MaybeHexString) {\n return {\n function: `${this.module}::denylist`,\n type_arguments: [],\n arguments: [ua],\n }\n }\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 getSetFeePayload(remoteChainId: aptos.BCS.Uint64, baseFee: aptos.BCS.Uint64) {\n return {\n function: `${this.module}::set_fee`,\n type_arguments: [],\n arguments: [remoteChainId, baseFee],\n }\n }\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 getWithdrawFeePayload(receiver: aptos.MaybeHexString, amount: aptos.BCS.Uint64) {\n return {\n function: `${this.module}::withdraw_fee`,\n type_arguments: [],\n arguments: [receiver, amount],\n }\n }\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 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.admins\n const acc = aptos.HexString.ensure(account).toShortString()\n return admins.includes(acc)\n }\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 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 async getMultisigPubKeyAndAddress(\n validatorPubKeys: string[]\n ): Promise<[aptos.TxnBuilderTypes.MultiEd25519PublicKey, string]> {\n const pubKeys = Object.keys(validatorPubKeys).map((key) => stringToUint8Array(key))\n return await generateMultisig([...pubKeys], pubKeys.length)\n }\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\nexport class MultisigOracleTss {\n readonly address: aptos.MaybeHexString\n public readonly module\n public readonly moduleName\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 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 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 public getSetValidatorPayload(\n validator: Uint8Array,\n active: boolean,\n expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n signatures: Uint8Array\n ) {\n return {\n function: `${this.module}::mso_set_validator`,\n type_arguments: [],\n arguments: [Array.from(validator), active, expiration, Array.from(signatures)],\n }\n }\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 public getSetThresholdPayload(\n threshold: aptos.BCS.Uint8,\n expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n signatures: Uint8Array\n ) {\n return {\n function: `${this.module}::mso_set_threshold`,\n type_arguments: [],\n arguments: [threshold, expiration, Array.from(signatures)],\n }\n }\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 ) {\n const transaction = this.getSetThresholdPayload(threshold, expiration, signatures)\n return this.sdk.sendAndConfirmTransaction(signer, transaction)\n }\n\n public getSetAdminPayload(\n candidate: aptos.MaybeHexString,\n active: boolean,\n expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n signatures: Uint8Array\n ) {\n return {\n function: `${this.module}::mso_set_admin`,\n type_arguments: [],\n arguments: [candidate, active, expiration, Array.from(signatures)],\n }\n }\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 public getAllowlistPayload(\n ua: aptos.MaybeHexString,\n expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n signatures: Uint8Array\n ) {\n return {\n function: `${this.module}::mso_allowlist`,\n type_arguments: [],\n arguments: [ua, expiration, Array.from(signatures)],\n }\n }\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 public getDenylistPayload(\n ua: aptos.MaybeHexString,\n expiration: aptos.BCS.Uint64 | aptos.BCS.Uint32,\n signatures: Uint8Array\n ) {\n return {\n function: `${this.module}::mso_denylist`,\n type_arguments: [],\n arguments: [ua, expiration, Array.from(signatures)],\n }\n }\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 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 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 public getWithdrawFeePayload(receiver: aptos.MaybeHexString, amount: aptos.BCS.Uint64) {\n return {\n function: `${this.module}::mso_withdraw_fee`,\n type_arguments: [],\n arguments: [receiver, amount],\n }\n }\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 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 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 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) as aptos.BCS.Uint8\n }\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 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 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 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 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 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 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 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 * @param funcName\n */\nexport function getAptosFunctionSignature(funcName: 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\nexport function keccak256Hash(data: 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\nexport interface FeeConfig {\n fee_owner: string\n default_fee_bp: string\n chain_id_to_fee_bp: {\n handle: string\n }\n}\n\nexport interface GlobalStore {\n proxy: boolean\n ld2sd_rate: string\n fee_config: FeeConfig\n custom_adapter_params: boolean\n}\n\nexport enum PacketType {\n SEND,\n}\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 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 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 async getMinDstGas(oftType: string, dstChainId: aptos.BCS.Uint16, type: 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 payloadOfClaimCoin(oftType: string): aptos.Types.EntryFunctionPayload {\n return {\n function: `${this.module}::claim`,\n type_arguments: [oftType],\n arguments: [],\n }\n }\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 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 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 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 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 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 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 payloadOfCoinRegister(oftType: string): aptos.Types.EntryFunctionPayload {\n return {\n function: `0x1::managed_coin::register`,\n type_arguments: [oftType],\n arguments: [],\n }\n }\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 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!.address\n return address\n }\n\n private async getGlobalStore(oftType: string): Promise<aptos.Types.MoveResource> {\n const address = this.getTypeAddress(oftType)\n return await this.sdk.client.getAccountResource(address, `${this.module}::GlobalStore<${oftType}>`)\n }\n\n private async getCoinStore(oftType: string): Promise<aptos.Types.MoveResource> {\n const address = this.getTypeAddress(oftType)\n return await this.sdk.client.getAccountResource(address, `${this.module}::CoinStore<${oftType}>`)\n }\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 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 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 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 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 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\nexport class Oracle {\n readonly address: aptos.MaybeHexString\n public readonly module\n public readonly moduleName\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 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 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 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 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.validators\n const val = aptos.HexString.ensure(validator).toShortString()\n return validators.includes(val)\n }\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 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 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 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 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 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 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 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 async withdrawFee(\n signer: aptos.AptosAccount,\n receiver: aptos.MaybeHexString,\n amount: aptos.BCS.Uint64\n ): Promise<aptos.Types.Transaction> {\n const transaction = {\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\nexport class PreCrime {\n private sdk: SDK\n\n readonly address: aptos.MaybeHexString\n readonly module: string\n readonly moduleName: string\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 max batch size for a given OFT type\n * @param oftType The OFT type, e.g. 0x1::BTCbOFT::BTCb\n * @param eids The EIDs to set the precrime peers for, e.g. [101, 102, 106] for [ETHEREUM, BSC, AVALANCHE]\n * @param precrimePeers The precrime peers to set\n * @returns The payload to be used in the transaction\n */\n setPreCrimePeersPayload(\n oftType: string,\n eids: Array<aptos.BCS.Uint32>,\n precrimePeers: Array<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 * @param oftType The OFT type, e.g. 0x1::BTCbOFT::BTCb\n * @param maxBatchSize The max batch size to set\n * @returns 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 async getConfig(packets: Array<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 async simulate(packets: Array<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 async precrime(\n packets: Array<aptos.MaybeHexString>,\n simulations: Array<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 async getConfigTypes(packets: Array<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 async getSimulateTypes(packets: Array<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 async getPreCrimeTypes(\n packets: Array<aptos.MaybeHexString>,\n simulations: Array<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 private formatTypes(types: TypeInfo[]): Array<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 private assertType(oftType: string) {\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"]}
|