diff --git a/.changeset/oft-solana-test-updates.md b/.changeset/oft-solana-test-updates.md new file mode 100644 index 0000000000..89ce348acb --- /dev/null +++ b/.changeset/oft-solana-test-updates.md @@ -0,0 +1,5 @@ +--- +"@layerzerolabs/oft-solana-example": patch +--- + +Add OFT Solana test coverage for peer/config validation and fee withdrawal guards, plus a got shim for test runs. diff --git a/examples/oft-solana/.gitignore b/examples/oft-solana/.gitignore index 0f7da464c7..e8b91c15af 100644 --- a/examples/oft-solana/.gitignore +++ b/examples/oft-solana/.gitignore @@ -4,6 +4,7 @@ node_modules coverage coverage.json target +test-ledger typechain typechain-types diff --git a/examples/oft-solana/Anchor.toml b/examples/oft-solana/Anchor.toml index dfd19e5a98..93c29c93dc 100644 --- a/examples/oft-solana/Anchor.toml +++ b/examples/oft-solana/Anchor.toml @@ -17,4 +17,4 @@ cluster = "Localnet" wallet = "./junk-id.json" [scripts] -test = "npx jest test/anchor" +test = "pnpm test:anchor" diff --git a/examples/oft-solana/package.json b/examples/oft-solana/package.json index 3b6844ba50..afb61f0c56 100644 --- a/examples/oft-solana/package.json +++ b/examples/oft-solana/package.json @@ -13,8 +13,9 @@ "lint:js": "eslint '**/*.{js,ts,json}' && prettier --check .", "lint:sol": "solhint 'contracts/**/*.sol'", "test": "$npm_execpath run test:forge && $npm_execpath run test:hardhat", - "test:anchor": "anchor test", + "test:anchor": "$npm_execpath run test:generate-features && OFT_ID=9UovNrJD8pQyBLheeHNayuG1wJSEAoxkmM14vw5gcsTT anchor build --no-idl && $npm_execpath exec ts-mocha -b -p ./tsconfig.json -t 10000000 test/anchor/index.test.ts", "test:forge": "forge test", + "test:generate-features": "ts-node scripts/generate-features.ts", "test:hardhat": "hardhat test", "test:scripts": "jest --config jest.config.ts --runInBand --testMatch \"**/*.script.test.ts\"" }, @@ -23,6 +24,11 @@ "ethers": "^5.7.2", "hardhat-deploy": "^0.12.1" }, + "overrides": { + "@solana/web3.js": "^1.98.0", + "ethers": "^5.7.2", + "hardhat-deploy": "^0.12.1" + }, "devDependencies": { "@coral-xyz/anchor": "^0.31.1", "@ethersproject/abi": "^5.7.0", @@ -66,6 +72,7 @@ "@metaplex-foundation/umi-eddsa-web3js": "^0.9.2", "@metaplex-foundation/umi-public-keys": "^0.8.9", "@metaplex-foundation/umi-web3js-adapters": "^0.9.2", + "@noble/secp256k1": "^1.7.1", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-ethers": "^2.2.3", "@nomiclabs/hardhat-waffle": "^2.0.6", @@ -83,6 +90,7 @@ "@types/jest": "^29.5.12", "@types/mocha": "^10.0.6", "@types/node": "~18.18.14", + "axios": "^1.6.2", "bs58": "^6.0.0", "chai": "^4.4.1", "concurrently": "~9.1.0", @@ -102,8 +110,10 @@ "prettier": "^3.2.5", "solhint": "^4.1.1", "solidity-bytes-utils": "^0.8.2", + "ts-mocha": "^10.0.0", "ts-node": "^10.9.2", - "typescript": "^5.4.4" + "typescript": "^5.4.4", + "zx": "^8.1.3" }, "engines": { "node": ">=20.19.5" @@ -114,10 +124,5 @@ "ethers": "^5.7.2", "hardhat-deploy": "^0.12.1" } - }, - "overrides": { - "@solana/web3.js": "^1.98.0", - "ethers": "^5.7.2", - "hardhat-deploy": "^0.12.1" } } diff --git a/examples/oft-solana/pnpm-lock.yaml b/examples/oft-solana/pnpm-lock.yaml index a6f807a317..4150a3ff95 100644 --- a/examples/oft-solana/pnpm-lock.yaml +++ b/examples/oft-solana/pnpm-lock.yaml @@ -30,91 +30,91 @@ devDependencies: version: 5.8.0 '@layerzerolabs/devtools': specifier: ~2.0.3 - version: 2.0.3(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) + version: 2.0.4(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) '@layerzerolabs/devtools-evm': specifier: ~3.0.0 - version: 3.0.0(@ethersproject/abi@5.8.0)(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(fp-ts@2.16.11)(zod@3.25.76) + version: 3.0.2(@ethersproject/abi@5.8.0)(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(fp-ts@2.16.11)(typescript@5.9.3)(zod@3.25.76) '@layerzerolabs/devtools-evm-hardhat': specifier: ^4.0.0 - version: 4.0.1(@ethersproject/abi@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.8.0)(fp-ts@2.16.11)(hardhat-deploy@0.12.4)(hardhat@2.26.4) + version: 4.0.4(@ethersproject/abi@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.8.0)(fp-ts@2.16.11)(hardhat-deploy@0.12.4)(hardhat@2.28.2) '@layerzerolabs/devtools-solana': specifier: ~3.0.4 - version: 3.0.4(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@solana/web3.js@1.98.4)(bn.js@5.2.2)(fastestsmallesttextencoderdecoder@1.0.22)(fp-ts@2.16.11)(typescript@5.9.3)(zod@3.25.76) + version: 3.0.5(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@solana/web3.js@1.98.4)(bn.js@5.2.2)(fastestsmallesttextencoderdecoder@1.0.22)(fp-ts@2.16.11)(typescript@5.9.3)(zod@3.25.76) '@layerzerolabs/eslint-config-next': specifier: ~2.3.39 version: 2.3.44(typescript@5.9.3) '@layerzerolabs/io-devtools': specifier: ~0.3.0 - version: 0.3.1(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) + version: 0.3.2(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) '@layerzerolabs/lz-definitions': specifier: ^3.0.86 - version: 3.0.142 + version: 3.0.152 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.86 - version: 3.0.142(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.142)(@layerzerolabs/lz-evm-v1-0.7@3.0.142)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) + version: 3.0.152(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.152)(@layerzerolabs/lz-evm-v1-0.7@3.0.152)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) '@layerzerolabs/lz-evm-protocol-v2': specifier: ^3.0.86 - version: 3.0.142(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) + version: 3.0.152(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) '@layerzerolabs/lz-evm-v1-0.7': specifier: ^3.0.86 - version: 3.0.142(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4) + version: 3.0.152(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4) '@layerzerolabs/lz-solana-sdk-v2': specifier: ^3.0.136 - version: 3.0.142(fastestsmallesttextencoderdecoder@1.0.22)(got@11.8.6)(typescript@5.9.3) + version: 3.0.152(fastestsmallesttextencoderdecoder@1.0.22)(got@11.8.6)(typescript@5.9.3) '@layerzerolabs/lz-v2-utilities': specifier: ^3.0.86 - version: 3.0.142 + version: 3.0.152 '@layerzerolabs/metadata-tools': specifier: ^3.0.0 - version: 3.0.2(@layerzerolabs/devtools-evm-hardhat@4.0.1)(@layerzerolabs/ua-devtools@5.0.1) + version: 3.0.2(@layerzerolabs/devtools-evm-hardhat@4.0.4)(@layerzerolabs/ua-devtools@5.0.2) '@layerzerolabs/oapp-evm': specifier: ^0.4.0 - version: 0.4.0(@layerzerolabs/lz-evm-messagelib-v2@3.0.142)(@layerzerolabs/lz-evm-protocol-v2@3.0.142)(@layerzerolabs/lz-evm-v1-0.7@3.0.142)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0) + version: 0.4.1(@layerzerolabs/lz-evm-messagelib-v2@3.0.152)(@layerzerolabs/lz-evm-protocol-v2@3.0.152)(@layerzerolabs/lz-evm-v1-0.7@3.0.152)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0) '@layerzerolabs/oft-evm': specifier: ^4.0.0 - version: 4.0.0(@layerzerolabs/lz-evm-messagelib-v2@3.0.142)(@layerzerolabs/lz-evm-protocol-v2@3.0.142)(@layerzerolabs/lz-evm-v1-0.7@3.0.142)(@layerzerolabs/oapp-evm@0.4.0)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0) + version: 4.0.1(@layerzerolabs/lz-evm-messagelib-v2@3.0.152)(@layerzerolabs/lz-evm-protocol-v2@3.0.152)(@layerzerolabs/lz-evm-v1-0.7@3.0.152)(@layerzerolabs/oapp-evm@0.4.1)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0) '@layerzerolabs/oft-v2-solana-sdk': specifier: ^3.0.136 - version: 3.0.142(fastestsmallesttextencoderdecoder@1.0.22)(got@11.8.6)(typescript@5.9.3) + version: 3.0.152(fastestsmallesttextencoderdecoder@1.0.22)(got@11.8.6)(typescript@5.9.3) '@layerzerolabs/prettier-config-next': specifier: ^2.3.39 version: 2.3.44 '@layerzerolabs/protocol-devtools': specifier: ^3.0.0 - version: 3.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) + version: 3.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) '@layerzerolabs/protocol-devtools-evm': specifier: ~5.0.0 - version: 5.0.1(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/protocol-devtools@3.0.1)(zod@3.25.76) + version: 5.0.2(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/protocol-devtools@3.0.2)(zod@3.25.76) '@layerzerolabs/protocol-devtools-solana': specifier: ^8.0.3 - version: 8.0.3(@layerzerolabs/devtools-solana@3.0.4)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-solana-sdk-v2@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/protocol-devtools@3.0.1)(@layerzerolabs/ua-devtools@5.0.1)(@solana/web3.js@1.98.4)(fp-ts@2.16.11)(zod@3.25.76) + version: 8.0.6(@layerzerolabs/devtools-solana@3.0.5)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-solana-sdk-v2@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/protocol-devtools@3.0.2)(@layerzerolabs/ua-devtools@5.0.2)(@solana/web3.js@1.98.4)(fp-ts@2.16.11)(zod@3.25.76) '@layerzerolabs/solhint-config': specifier: ^3.0.12 - version: 3.0.142(typescript@5.9.3) + version: 3.0.152(typescript@5.9.3) '@layerzerolabs/test-devtools-evm-foundry': specifier: ~8.0.0 - version: 8.0.0(@layerzerolabs/lz-evm-messagelib-v2@3.0.142)(@layerzerolabs/lz-evm-protocol-v2@3.0.142)(@layerzerolabs/lz-evm-v1-0.7@3.0.142)(@layerzerolabs/oapp-evm@0.4.0)(@layerzerolabs/oft-evm@4.0.0)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0) + version: 8.0.1(@layerzerolabs/lz-evm-messagelib-v2@3.0.152)(@layerzerolabs/lz-evm-protocol-v2@3.0.152)(@layerzerolabs/lz-evm-v1-0.7@3.0.152)(@layerzerolabs/oapp-evm@0.4.1)(@layerzerolabs/oft-evm@4.0.1)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0) '@layerzerolabs/test-devtools-evm-hardhat': specifier: ~0.5.2 - version: 0.5.2(hardhat@2.26.4)(solidity-bytes-utils@0.8.4) + version: 0.5.3(hardhat@2.28.2)(solidity-bytes-utils@0.8.4) '@layerzerolabs/toolbox-foundry': specifier: ~0.1.12 version: 0.1.13 '@layerzerolabs/toolbox-hardhat': specifier: ~0.6.12 - version: 0.6.12(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/providers@5.8.0)(@nomicfoundation/hardhat-ethers@3.1.1)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.8.0)(hardhat-deploy@0.12.4)(hardhat@2.26.4)(solidity-bytes-utils@0.8.4) + version: 0.6.13(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/providers@5.8.0)(@nomicfoundation/hardhat-ethers@3.1.3)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.8.0)(hardhat-deploy@0.12.4)(hardhat@2.28.2)(solidity-bytes-utils@0.8.4)(typescript@5.9.3) '@layerzerolabs/ua-devtools': specifier: ~5.0.0 - version: 5.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/protocol-devtools@3.0.1)(zod@3.25.76) + version: 5.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/protocol-devtools@3.0.2)(zod@3.25.76) '@layerzerolabs/ua-devtools-evm': specifier: ~7.0.0 - version: 7.0.0(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/protocol-devtools-evm@5.0.1)(@layerzerolabs/protocol-devtools@3.0.1)(@layerzerolabs/ua-devtools@5.0.1)(zod@3.25.76) + version: 7.0.1(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/protocol-devtools-evm@5.0.2)(@layerzerolabs/protocol-devtools@3.0.2)(@layerzerolabs/ua-devtools@5.0.2)(zod@3.25.76) '@layerzerolabs/ua-devtools-evm-hardhat': specifier: ~9.0.0 - version: 9.0.0(@ethersproject/abi@5.8.0)(@ethersproject/bytes@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/hash@5.8.0)(@layerzerolabs/devtools-evm-hardhat@4.0.1)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/protocol-devtools-evm@5.0.1)(@layerzerolabs/protocol-devtools@3.0.1)(@layerzerolabs/ua-devtools-evm@7.0.0)(@layerzerolabs/ua-devtools@5.0.1)(ethers@5.8.0)(hardhat-deploy@0.12.4)(hardhat@2.26.4) + version: 9.0.1(@ethersproject/abi@5.8.0)(@ethersproject/bytes@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/hash@5.8.0)(@layerzerolabs/devtools-evm-hardhat@4.0.4)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/protocol-devtools-evm@5.0.2)(@layerzerolabs/protocol-devtools@3.0.2)(@layerzerolabs/ua-devtools-evm@7.0.1)(@layerzerolabs/ua-devtools@5.0.2)(ethers@5.8.0)(hardhat-deploy@0.12.4)(hardhat@2.28.2) '@layerzerolabs/ua-devtools-solana': specifier: ~8.0.2 - version: 8.0.2(@layerzerolabs/devtools-solana@3.0.4)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-solana-sdk-v2@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/oft-v2-solana-sdk@3.0.142)(@layerzerolabs/protocol-devtools-solana@8.0.3)(@layerzerolabs/protocol-devtools@3.0.1)(@layerzerolabs/ua-devtools@5.0.1)(@solana/web3.js@1.98.4)(fp-ts@2.16.11)(zod@3.25.76) + version: 8.0.7(@layerzerolabs/devtools-solana@3.0.5)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-solana-sdk-v2@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/oft-v2-solana-sdk@3.0.152)(@layerzerolabs/protocol-devtools-solana@8.0.6)(@layerzerolabs/protocol-devtools@3.0.2)(@layerzerolabs/ua-devtools@5.0.2)(@solana/web3.js@1.98.4)(fp-ts@2.16.11)(zod@3.25.76) '@metaplex-foundation/mpl-token-metadata': specifier: ^3.2.1 version: 3.4.0(@metaplex-foundation/umi@0.9.2) @@ -136,15 +136,18 @@ devDependencies: '@metaplex-foundation/umi-web3js-adapters': specifier: ^0.9.2 version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.4) + '@noble/secp256k1': + specifier: ^1.7.1 + version: 1.7.2 '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 - version: 3.1.1(ethers@5.8.0)(hardhat@2.26.4) + version: 3.1.3(ethers@5.8.0)(hardhat@2.28.2) '@nomiclabs/hardhat-ethers': specifier: ^2.2.3 - version: 2.2.3(ethers@5.8.0)(hardhat@2.26.4) + version: 2.2.3(ethers@5.8.0)(hardhat@2.28.2) '@nomiclabs/hardhat-waffle': specifier: ^2.0.6 - version: 2.0.6(@nomiclabs/hardhat-ethers@2.2.3)(@types/sinon-chai@3.2.12)(ethereum-waffle@4.0.10)(ethers@5.8.0)(hardhat@2.26.4) + version: 2.0.6(@nomiclabs/hardhat-ethers@2.2.3)(@types/sinon-chai@3.2.12)(ethereum-waffle@4.0.10)(ethers@5.8.0)(hardhat@2.28.2) '@openzeppelin/contracts': specifier: ^5.0.2 version: 5.4.0 @@ -153,7 +156,7 @@ devDependencies: version: 5.4.0(@openzeppelin/contracts@5.4.0) '@rushstack/eslint-patch': specifier: ^1.7.0 - version: 1.14.1 + version: 1.15.0 '@safe-global/safe-core-sdk-types': specifier: ^2.3.0 version: 2.3.0 @@ -171,10 +174,10 @@ devDependencies: version: 2.0.4(typescript@5.9.3) '@swc/core': specifier: ^1.4.0 - version: 1.14.0 + version: 1.15.8 '@swc/jest': specifier: ^0.2.36 - version: 0.2.39(@swc/core@1.14.0) + version: 0.2.39(@swc/core@1.15.8) '@types/chai': specifier: ^4.3.11 version: 4.3.20 @@ -187,6 +190,9 @@ devDependencies: '@types/node': specifier: ~18.18.14 version: 18.18.14 + axios: + specifier: ^1.6.2 + version: 1.13.2 bs58: specifier: ^6.0.0 version: 6.0.0 @@ -219,16 +225,16 @@ devDependencies: version: 2.16.11 hardhat: specifier: ^2.22.10 - version: 2.26.4(ts-node@10.9.2)(typescript@5.9.3) + version: 2.28.2(ts-node@10.9.2)(typescript@5.9.3) hardhat-contract-sizer: specifier: ^2.10.0 - version: 2.10.1(hardhat@2.26.4) + version: 2.10.1(hardhat@2.28.2) hardhat-deploy: specifier: ^0.12.1 version: 0.12.4 hardhat-deploy-ethers: specifier: ^0.4.2 - version: 0.4.2(@nomicfoundation/hardhat-ethers@3.1.1)(hardhat-deploy@0.12.4)(hardhat@2.26.4) + version: 0.4.2(@nomicfoundation/hardhat-ethers@3.1.3)(hardhat-deploy@0.12.4)(hardhat@2.28.2) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@18.18.14)(ts-node@10.9.2) @@ -237,23 +243,29 @@ devDependencies: version: 10.8.2 prettier: specifier: ^3.2.5 - version: 3.6.2 + version: 3.7.4 solhint: specifier: ^4.1.1 version: 4.5.4(typescript@5.9.3) solidity-bytes-utils: specifier: ^0.8.2 version: 0.8.4 + ts-mocha: + specifier: ^10.0.0 + version: 10.1.0(mocha@10.8.2) ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.14.0)(@types/node@18.18.14)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.15.8)(@types/node@18.18.14)(typescript@5.9.3) typescript: specifier: ^5.4.4 version: 5.9.3 + zx: + specifier: ^8.1.3 + version: 8.8.5 packages: - /@0no-co/graphql.web@1.2.0(graphql@16.11.0): + /@0no-co/graphql.web@1.2.0(graphql@16.12.0): resolution: {integrity: sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 @@ -261,22 +273,26 @@ packages: graphql: optional: true dependencies: - graphql: 16.11.0 + graphql: 16.12.0 dev: true - /@0no-co/graphqlsp@1.15.0(graphql@16.11.0)(typescript@5.9.3): - resolution: {integrity: sha512-SReJAGmOeXrHGod+9Odqrz4s43liK0b2DFUetb/jmYvxFpWmeNfFYo0seCh0jz8vG3p1pnYMav0+Tm7XwWtOJw==} + /@0no-co/graphqlsp@1.15.2(graphql@16.12.0)(typescript@5.9.3): + resolution: {integrity: sha512-Ys031WnS3sTQQBtRTkQsYnw372OlW72ais4sp0oh2UMPRNyxxnq85zRfU4PIdoy9kWriysPT5BYAkgIxhbonFA==} peerDependencies: graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 typescript: ^5.0.0 dependencies: - '@gql.tada/internal': 1.0.8(graphql@16.11.0)(typescript@5.9.3) - graphql: 16.11.0 + '@gql.tada/internal': 1.0.8(graphql@16.12.0)(typescript@5.9.3) + graphql: 16.12.0 typescript: 5.9.3 dev: true - /@aptos-labs/aptos-client@2.0.0(got@11.8.6): - resolution: {integrity: sha512-A23T3zTCRXEKURodp00dkadVtIrhWjC9uo08dRDBkh69OhCnBAxkENmUy/rcBarfLoFr60nRWt7cBkc8wxr1mg==} + /@adraffy/ens-normalize@1.11.1: + resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} + dev: true + + /@aptos-labs/aptos-client@2.1.0(got@11.8.6): + resolution: {integrity: sha512-ttdY0qclRvbYAAwzijkFeipuqTfLFJnoXlNIm58tIw3DKhIlfYdR6iLqTeCpI23oOPghnO99FZecej/0MTrtuA==} engines: {node: '>=20.0.0'} peerDependencies: got: ^11.8.6 @@ -343,7 +359,7 @@ packages: dependencies: '@babel/compat-data': 7.28.5 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.27.0 + browserslist: 4.28.1 lru-cache: 5.1.1 semver: 6.3.1 dev: true @@ -814,8 +830,8 @@ packages: kuler: 2.0.0 dev: true - /@emnapi/core@1.6.0: - resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==} + /@emnapi/core@1.8.1: + resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} requiresBuild: true dependencies: '@emnapi/wasi-threads': 1.1.0 @@ -823,8 +839,8 @@ packages: dev: true optional: true - /@emnapi/runtime@1.6.0: - resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} + /@emnapi/runtime@1.8.1: + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} requiresBuild: true dependencies: tslib: 2.8.1 @@ -855,8 +871,8 @@ packages: deprecated: Please use @ensdomains/ens-contracts dev: true - /@eslint-community/eslint-utils@4.9.0(eslint@8.57.1): - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + /@eslint-community/eslint-utils@4.9.1(eslint@8.57.1): + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -880,7 +896,7 @@ packages: globals: 13.24.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -925,7 +941,7 @@ packages: dependencies: '@ethersproject/abi': 5.8.0 '@ethersproject/abstract-provider': 5.8.0 - '@ethersproject/address': 5.8.0 + '@ethersproject/address': 5.7.0 '@ethersproject/bignumber': 5.8.0 '@ethersproject/bytes': 5.8.0 '@ethersproject/constants': 5.8.0 @@ -1088,7 +1104,7 @@ packages: /@ethereumjs/tx@3.4.0: resolution: {integrity: sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw==} dependencies: - '@ethereumjs/common': 2.6.5 + '@ethereumjs/common': 2.6.0 ethereumjs-util: 7.1.5 dev: true @@ -1121,10 +1137,10 @@ packages: dependencies: '@ethereumjs/block': 3.6.3 '@ethereumjs/blockchain': 5.5.3 - '@ethereumjs/common': 2.6.5 - '@ethereumjs/tx': 3.5.2 + '@ethereumjs/common': 2.6.0 + '@ethereumjs/tx': 3.4.0 async-eventemitter: 0.2.4 - core-js-pure: 3.46.0 + core-js-pure: 3.47.0 debug: 2.6.9 ethereumjs-util: 7.1.5 functional-red-black-tree: 1.0.1 @@ -1525,8 +1541,8 @@ packages: '@trufflesuite/bigint-buffer': 1.1.9 dev: true - /@gql.tada/cli-utils@1.7.1(@0no-co/graphqlsp@1.15.0)(graphql@16.11.0)(typescript@5.9.3): - resolution: {integrity: sha512-wg5ysZNQxtNQm67T3laVWmZzLpGb7QfyYWZdaUD2r1OjDj5Bgftq7eQlplmH+hsdffjuUyhJw/b5XAjeE2mJtg==} + /@gql.tada/cli-utils@1.7.2(@0no-co/graphqlsp@1.15.2)(graphql@16.12.0)(typescript@5.9.3): + resolution: {integrity: sha512-Qbc7hbLvCz6IliIJpJuKJa9p05b2Jona7ov7+qofCsMRxHRZE1kpAmZMvL8JCI4c0IagpIlWNaMizXEQUe8XjQ==} peerDependencies: '@0no-co/graphqlsp': ^1.12.13 '@gql.tada/svelte-support': 1.0.1 @@ -1539,29 +1555,29 @@ packages: '@gql.tada/vue-support': optional: true dependencies: - '@0no-co/graphqlsp': 1.15.0(graphql@16.11.0)(typescript@5.9.3) - '@gql.tada/internal': 1.0.8(graphql@16.11.0)(typescript@5.9.3) - graphql: 16.11.0 + '@0no-co/graphqlsp': 1.15.2(graphql@16.12.0)(typescript@5.9.3) + '@gql.tada/internal': 1.0.8(graphql@16.12.0)(typescript@5.9.3) + graphql: 16.12.0 typescript: 5.9.3 dev: true - /@gql.tada/internal@1.0.8(graphql@16.11.0)(typescript@5.9.3): + /@gql.tada/internal@1.0.8(graphql@16.12.0)(typescript@5.9.3): resolution: {integrity: sha512-XYdxJhtHC5WtZfdDqtKjcQ4d7R1s0d1rnlSs3OcBEUbYiPoJJfZU7tWsVXuv047Z6msvmr4ompJ7eLSK5Km57g==} peerDependencies: graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 typescript: ^5.0.0 dependencies: - '@0no-co/graphql.web': 1.2.0(graphql@16.11.0) - graphql: 16.11.0 + '@0no-co/graphql.web': 1.2.0(graphql@16.12.0) + graphql: 16.12.0 typescript: 5.9.3 dev: true - /@graphql-typed-document-node/core@3.2.0(graphql@16.11.0): + /@graphql-typed-document-node/core@3.2.0(graphql@16.12.0): resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - graphql: 16.11.0 + graphql: 16.12.0 dev: true /@humanwhocodes/config-array@0.13.0: @@ -1602,11 +1618,11 @@ packages: '@bitcoinerlab/secp256k1': 1.2.0 '@initia/initia.proto': 0.2.6 '@initia/opinit.proto': 0.0.11 - '@ledgerhq/hw-transport': 6.31.12 - '@ledgerhq/hw-transport-webhid': 6.30.8 - '@ledgerhq/hw-transport-webusb': 6.29.12 + '@ledgerhq/hw-transport': 6.31.15 + '@ledgerhq/hw-transport-webhid': 6.30.11 + '@ledgerhq/hw-transport-webusb': 6.29.15 '@mysten/bcs': 1.9.2 - axios: 1.13.1 + axios: 1.13.2 bech32: 2.0.0 bignumber.js: 9.3.1 bip32: 5.0.0(typescript@5.9.3) @@ -1616,7 +1632,7 @@ packages: ripemd160: 2.0.3 secp256k1: 5.0.1 semver: 7.7.3 - ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - debug @@ -1642,18 +1658,18 @@ packages: protobufjs: 7.5.4 dev: true - /@iota/bcs@1.2.0: - resolution: {integrity: sha512-QdRSR0KpJ87tdjVNmM/j0+0DvE0aTxHIa02337iluaOsMqtJ8OdgUCfSyLduC/3qS+8tJE+UB1KOw55tF+sN2w==} + /@iota/bcs@1.4.0: + resolution: {integrity: sha512-Bpg8uPB3UTweJyFS3G+aycGcTCxaJQi2a9bEy2QXWMBM8a/tLN1KCg4IzKWkAJ4FyMNrZZrdXiBqAzmNK6xdVQ==} dependencies: bs58: 6.0.0 dev: true - /@iota/iota-sdk@1.6.1(typescript@5.9.3): - resolution: {integrity: sha512-V7rx7m9erCn9lr4hNZVMtwmka2NsoTZ9EFSE4ZqEDO44cWdheM61+i/y5HJhvvmYAb/kkDfSmfdmzLaGTbVVYg==} + /@iota/iota-sdk@1.10.0(typescript@5.9.3): + resolution: {integrity: sha512-TbLPxFagi7MZFDsnmefEMkmFVhe1/zn4Co6nSTAyL5W2RIZKcVjLy209zKlbHAYwhJvAjoUJ81q2AthBcKLsyA==} engines: {node: '>=20'} dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) - '@iota/bcs': 1.2.0 + '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) + '@iota/bcs': 1.4.0 '@noble/curves': 1.9.7 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 @@ -1661,10 +1677,10 @@ packages: '@suchipi/femver': 1.0.0 bech32: 2.0.0 bignumber.js: 9.3.1 - gql.tada: 1.8.13(graphql@16.11.0)(typescript@5.9.3) - graphql: 16.11.0 + gql.tada: 1.9.0(graphql@16.12.0)(typescript@5.9.3) + graphql: 16.12.0 tweetnacl: 1.0.3 - valibot: 0.36.0 + valibot: 1.2.0(typescript@5.9.3) transitivePeerDependencies: - '@gql.tada/svelte-support' - '@gql.tada/vue-support' @@ -1678,7 +1694,7 @@ packages: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 - js-yaml: 3.14.1 + js-yaml: 3.14.2 resolve-from: 5.0.0 dev: true @@ -1856,7 +1872,7 @@ packages: resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} dependencies: - '@sinclair/typebox': 0.34.41 + '@sinclair/typebox': 0.34.47 dev: true /@jest/source-map@29.6.3: @@ -1919,7 +1935,7 @@ packages: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 '@types/node': 18.18.14 - '@types/yargs': 17.0.34 + '@types/yargs': 17.0.35 chalk: 4.1.2 dev: true @@ -1932,7 +1948,7 @@ packages: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 '@types/node': 18.18.14 - '@types/yargs': 17.0.34 + '@types/yargs': 17.0.35 chalk: 4.1.2 dev: true @@ -1973,17 +1989,17 @@ packages: '@jridgewell/sourcemap-codec': 1.5.5 dev: true - /@layerzerolabs/devtools-evm-hardhat@4.0.1(@ethersproject/abi@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.8.0)(fp-ts@2.16.11)(hardhat-deploy@0.12.4)(hardhat@2.26.4): - resolution: {integrity: sha512-RqF6hrVhkJ/O83cYXi744TPOaqBzi4W4+daVHpZsp1W32hDbojYNcXwHi7jldt7BOL0KT/t4A5lBVIcGzCh0YQ==} + /@layerzerolabs/devtools-evm-hardhat@4.0.4(@ethersproject/abi@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.8.0)(fp-ts@2.16.11)(hardhat-deploy@0.12.4)(hardhat@2.28.2): + resolution: {integrity: sha512-EnP2dWk9G2PdDP2R30O0Bs85J+4nvBmGlT86QhvhhUqbg2NCZ51h/TQLBWPX6mri7wVMbGMZesNo68xnMntoyQ==} peerDependencies: '@ethersproject/abi': ^5.7.0 '@ethersproject/abstract-signer': ^5.7.0 '@ethersproject/contracts': ^5.7.0 '@ethersproject/providers': ^5.7.0 - '@layerzerolabs/devtools': ~2.0.0 - '@layerzerolabs/devtools-evm': ~3.0.0 - '@layerzerolabs/io-devtools': ~0.3.0 - '@layerzerolabs/lz-definitions': ^3.0.75 + '@layerzerolabs/devtools': ~2.0.4 + '@layerzerolabs/devtools-evm': ~3.0.2 + '@layerzerolabs/io-devtools': ~0.3.2 + '@layerzerolabs/lz-definitions': ^3.0.148 '@nomiclabs/hardhat-ethers': ^2.2.3 fp-ts: ^2.16.2 hardhat: ^2.22.10 @@ -1993,15 +2009,15 @@ packages: '@ethersproject/abstract-signer': 5.8.0 '@ethersproject/contracts': 5.8.0 '@ethersproject/providers': 5.8.0 - '@layerzerolabs/devtools': 2.0.3(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) - '@layerzerolabs/devtools-evm': 3.0.0(@ethersproject/abi@5.8.0)(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(fp-ts@2.16.11)(zod@3.25.76) + '@layerzerolabs/devtools': 2.0.4(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) + '@layerzerolabs/devtools-evm': 3.0.2(@ethersproject/abi@5.8.0)(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(fp-ts@2.16.11)(typescript@5.9.3)(zod@3.25.76) '@layerzerolabs/export-deployments': 0.0.16 - '@layerzerolabs/io-devtools': 0.3.1(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) - '@layerzerolabs/lz-definitions': 3.0.142 - '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.8.0)(hardhat@2.26.4) + '@layerzerolabs/io-devtools': 0.3.2(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) + '@layerzerolabs/lz-definitions': 3.0.152 + '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.8.0)(hardhat@2.28.2) '@safe-global/protocol-kit': 1.3.0(ethers@5.8.0) fp-ts: 2.16.11 - hardhat: 2.26.4(ts-node@10.9.2)(typescript@5.9.3) + hardhat: 2.28.2(ts-node@10.9.2)(typescript@5.9.3) hardhat-deploy: 0.12.4 micro-memoize: 4.1.3 p-memoize: 4.0.4 @@ -2014,8 +2030,8 @@ packages: - utf-8-validate dev: true - /@layerzerolabs/devtools-evm@3.0.0(@ethersproject/abi@5.8.0)(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(fp-ts@2.16.11)(zod@3.25.76): - resolution: {integrity: sha512-k3oqoB8f4eQf111WtrFQOhzLaxsjEZn/N3o7Bbyn8HlNPPWCyockAfXZfTiJ5p5YXRBDJVO2RkwxsqE00wHnOw==} + /@layerzerolabs/devtools-evm@3.0.2(@ethersproject/abi@5.8.0)(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(fp-ts@2.16.11)(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-3GukwiJQ1HYI5MwFQUVH7cK0z1AqKjnAyO/e8McUE9TFNjcwvRinFklrFlAy1euy6DTy1vf6BwNA49mK3N6EkA==} peerDependencies: '@ethersproject/abi': ^5.7.0 '@ethersproject/abstract-provider': ^5.7.0 @@ -2025,9 +2041,9 @@ packages: '@ethersproject/constants': ^5.7.0 '@ethersproject/contracts': ^5.7.0 '@ethersproject/providers': ^5.7.0 - '@layerzerolabs/devtools': ~2.0.0 - '@layerzerolabs/io-devtools': ~0.3.0 - '@layerzerolabs/lz-definitions': ^3.0.75 + '@layerzerolabs/devtools': ~2.0.4 + '@layerzerolabs/io-devtools': ~0.3.2 + '@layerzerolabs/lz-definitions': ^3.0.148 fp-ts: ^2.16.2 zod: ^3.22.4 dependencies: @@ -2039,10 +2055,10 @@ packages: '@ethersproject/constants': 5.8.0 '@ethersproject/contracts': 5.8.0 '@ethersproject/providers': 5.8.0 - '@layerzerolabs/devtools': 2.0.3(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) - '@layerzerolabs/io-devtools': 0.3.1(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) - '@layerzerolabs/lz-definitions': 3.0.142 - '@safe-global/api-kit': 1.3.1 + '@layerzerolabs/devtools': 2.0.4(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) + '@layerzerolabs/io-devtools': 0.3.2(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) + '@layerzerolabs/lz-definitions': 3.0.152 + '@safe-global/api-kit': 4.0.1(typescript@5.9.3)(zod@3.25.76) '@safe-global/protocol-kit': 1.3.0(ethers@5.8.0) ethers: 5.8.0 fp-ts: 2.16.11 @@ -2052,23 +2068,24 @@ packages: - bufferutil - encoding - supports-color + - typescript - utf-8-validate dev: true - /@layerzerolabs/devtools-solana@3.0.4(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@solana/web3.js@1.98.4)(bn.js@5.2.2)(fastestsmallesttextencoderdecoder@1.0.22)(fp-ts@2.16.11)(typescript@5.9.3)(zod@3.25.76): - resolution: {integrity: sha512-RWZsWgG8u0gf6zon/rm5BE2WreSpHL/Li9EkJpxPIrgEs3bDQXB088NTMUBvhlmWGs4M1gCMiA49tUD2tR9V8Q==} + /@layerzerolabs/devtools-solana@3.0.5(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@solana/web3.js@1.98.4)(bn.js@5.2.2)(fastestsmallesttextencoderdecoder@1.0.22)(fp-ts@2.16.11)(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-O+6F668yAL7pD8y+Z9F6XSW2oTBpOnrn/kqpU9XSEA7dkvv6MxvJI9GZkZbM2nJ7Tu0xRHa5R2u7bFbXVL0VRw==} peerDependencies: - '@layerzerolabs/devtools': ~2.0.3 - '@layerzerolabs/io-devtools': ~0.3.0 - '@layerzerolabs/lz-definitions': ^3.0.75 + '@layerzerolabs/devtools': ~2.0.4 + '@layerzerolabs/io-devtools': ~0.3.2 + '@layerzerolabs/lz-definitions': ^3.0.148 '@solana/web3.js': ^1.98.0 bn.js: ^5.2.0 fp-ts: ^2.16.2 zod: ^3.22.4 dependencies: - '@layerzerolabs/devtools': 2.0.3(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) - '@layerzerolabs/io-devtools': 0.3.1(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) - '@layerzerolabs/lz-definitions': 3.0.142 + '@layerzerolabs/devtools': 2.0.4(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) + '@layerzerolabs/io-devtools': 0.3.2(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) + '@layerzerolabs/lz-definitions': 3.0.152 '@solana-developers/helpers': 2.8.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/web3.js': 1.98.4(typescript@5.9.3) bn.js: 5.2.2 @@ -2083,20 +2100,20 @@ packages: - utf-8-validate dev: true - /@layerzerolabs/devtools@2.0.3(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76): - resolution: {integrity: sha512-kpMQerGyDDQw9B9HdN/yqToZR1oDtFNHmfDQu069hiz8699cu/hUqevHmDPOdEKX+3HsRY3Gn/BZ5JW8WQbFmA==} + /@layerzerolabs/devtools@2.0.4(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76): + resolution: {integrity: sha512-ZOruL9eijXMOpqkiIL2i6CIw3nvPeqQeM6ec0FQlCywjsBkdfLj6BDbpEf01qArCWebpvPalR2FFGR5HXJlBxQ==} peerDependencies: '@ethersproject/bytes': ~5.7.0 - '@layerzerolabs/io-devtools': ~0.3.1 - '@layerzerolabs/lz-definitions': ^3.0.75 + '@layerzerolabs/io-devtools': ~0.3.2 + '@layerzerolabs/lz-definitions': ^3.0.148 zod: ^3.22.4 dependencies: '@ethersproject/bytes': 5.8.0 - '@layerzerolabs/io-devtools': 0.3.1(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) - '@layerzerolabs/lz-definitions': 3.0.142 + '@layerzerolabs/io-devtools': 0.3.2(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) + '@layerzerolabs/lz-definitions': 3.0.152 bs58: 6.0.0 exponential-backoff: 3.1.3 - js-yaml: 4.1.0 + js-yaml: 4.1.1 zod: 3.25.76 dev: true @@ -2111,9 +2128,9 @@ packages: eslint-plugin-autofix: 2.2.0(eslint@8.57.1) eslint-plugin-compat: 4.2.0(eslint@8.57.1) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) - eslint-plugin-prettier: 5.5.4(eslint-config-prettier@9.1.2)(eslint@8.57.1)(prettier@3.6.2) + eslint-plugin-prettier: 5.5.4(eslint-config-prettier@9.1.2)(eslint@8.57.1)(prettier@3.7.4) eslint-plugin-unused-imports: 3.2.0(@typescript-eslint/eslint-plugin@7.18.0)(eslint@8.57.1) - prettier: 3.6.2 + prettier: 3.7.4 transitivePeerDependencies: - '@types/eslint' - eslint-import-resolver-webpack @@ -2122,8 +2139,8 @@ packages: - typescript dev: true - /@layerzerolabs/evm-sdks-core@3.0.142: - resolution: {integrity: sha512-F+02Gytj4pzrw/JcyZN9btBUkT4rtXy5QTCv6YRB8Hb7zD1XfUHGG3QkwR00BqDe35nc7lg0ppGclpRdI7PMGg==} + /@layerzerolabs/evm-sdks-core@3.0.152: + resolution: {integrity: sha512-mc0MdMF4eYXavJdrSkZHcmZmaRbfPWxnaIDmy/cZntOQi5ikq5pul+1WKng0C/7WWb0S2P0atFqIBotVtC0WkA==} dependencies: ethers: 5.8.0 transitivePeerDependencies: @@ -2138,8 +2155,8 @@ packages: typescript: 5.9.3 dev: true - /@layerzerolabs/io-devtools@0.3.1(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76): - resolution: {integrity: sha512-sP65pO9Op7vLJV2nd5us3ip30S+ylOvT1JiISZineP6Bj1PaPWlXRmjbbznue1VYnF629l+VJ1nYN7a3f1UOTQ==} + /@layerzerolabs/io-devtools@0.3.2(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76): + resolution: {integrity: sha512-BQzf1enHz2Inflycr52s6C+sjh8d90OpjLgO9EL9aKGfc1TYa786H+21MZBY5djX/nghkp69C/KwsWzhHIc65g==} peerDependencies: ink: ^3.2.0 ink-gradient: ^2.0.0 @@ -2167,20 +2184,20 @@ packages: prompts: 2.4.2 react: 17.0.2 table: 6.8.2 - winston: 3.18.3 + winston: 3.19.0 yoga-layout-prebuilt: 1.10.0 zod: 3.25.76 dev: true - /@layerzerolabs/lz-core@3.0.142: - resolution: {integrity: sha512-ufIjJD2E0p4FLtNXHqxQ2wuK+CHvDfl4TUp5DgJdw6rFzRroLmX3YF9NdhPKbDUyCIcaGzWekJhc7miWftOF1Q==} + /@layerzerolabs/lz-core@3.0.152: + resolution: {integrity: sha512-Myz/jXrvKSf+0NdydFBMYN8zCD272vCf+5O115wa5lnerMB57dWKT7/0CqPhgedrowsvzFPpgcF6/jZtb841pw==} dev: true - /@layerzerolabs/lz-corekit-solana@3.0.142(got@11.8.6)(typescript@5.9.3): - resolution: {integrity: sha512-0U5j572qAN8Q5fzZI0hzRytSYBnHcB5roKXJrczrgBt9zq7n59GMsEE9fDCQ8SDazqyn6pXeeVYJOk1Q6zSBTw==} + /@layerzerolabs/lz-corekit-solana@3.0.152(got@11.8.6)(typescript@5.9.3): + resolution: {integrity: sha512-CbfVnin3/FGpnotsHy91t4uGVNWVmrLxt2ixtF7joX9JS2SBDocilnFtK5ZeaTneUYp5hbUPvs/kJKUDGvoz9A==} dependencies: - '@layerzerolabs/lz-core': 3.0.142 - '@layerzerolabs/lz-utilities': 3.0.142(got@11.8.6)(typescript@5.9.3) + '@layerzerolabs/lz-core': 3.0.152 + '@layerzerolabs/lz-utilities': 3.0.152(got@11.8.6)(typescript@5.9.3) '@metaplex-foundation/umi': 0.9.2 '@metaplex-foundation/umi-eddsa-web3js': 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.4) '@metaplex-foundation/umi-program-repository': 0.9.2(@metaplex-foundation/umi@0.9.2) @@ -2203,21 +2220,21 @@ packages: - utf-8-validate dev: true - /@layerzerolabs/lz-definitions@3.0.142: - resolution: {integrity: sha512-Sxr/Kyg6wGCzrH9zPuPQAAMnc6e/iRC4pXvdTRYaN6OtUZGAJ/mO9s7+NpSJ05unqS8wn+dabahLl5ogt1rYqg==} + /@layerzerolabs/lz-definitions@3.0.152: + resolution: {integrity: sha512-igblZrQhQdMPaaC4sc090qWMCE0h+uzzhr9P6udx45S+CGV1cOfRy2xjYzHNoKlMUvBTd+pGP1swTmpzk6Hp0w==} dependencies: tiny-invariant: 1.3.3 dev: true - /@layerzerolabs/lz-evm-messagelib-v2@3.0.142(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.142)(@layerzerolabs/lz-evm-v1-0.7@3.0.142)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4): - resolution: {integrity: sha512-yjR2DVRQD3eD4kEMvBpIfHSSgKGn6SNVTpRBfQNoRe5qs/pmc2M6+pneAb+W7lKCHXEwqQOFnuXRyvmNbSoufA==} + /@layerzerolabs/lz-evm-messagelib-v2@3.0.152(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.152)(@layerzerolabs/lz-evm-v1-0.7@3.0.152)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4): + resolution: {integrity: sha512-nqLd0qzM077PralXGuy03uRXV2TXYuJfl5pzF09yFjDhf9duvNrhMH6sqTdvyrQaT8VVo8cg7gxQTDA628jVlw==} peerDependencies: '@arbitrum/nitro-contracts': ^1.1.0 '@axelar-network/axelar-gmp-sdk-solidity': ^5.6.4 '@chainlink/contracts-ccip': ^0.7.6 '@eth-optimism/contracts': ^0.6.0 - '@layerzerolabs/lz-evm-protocol-v2': ^3.0.142 - '@layerzerolabs/lz-evm-v1-0.7': ^3.0.142 + '@layerzerolabs/lz-evm-protocol-v2': ^3.0.152 + '@layerzerolabs/lz-evm-v1-0.7': ^3.0.152 '@openzeppelin/contracts': ^4.8.1 || ^5.0.0 '@openzeppelin/contracts-upgradeable': ^4.8.1 || ^5.0.0 hardhat-deploy: ^0.12.1 @@ -2229,16 +2246,16 @@ packages: '@axelar-network/axelar-gmp-sdk-solidity': 5.10.0 '@chainlink/contracts-ccip': 0.7.6(ethers@5.8.0) '@eth-optimism/contracts': 0.6.0(ethers@5.8.0) - '@layerzerolabs/lz-evm-protocol-v2': 3.0.142(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) - '@layerzerolabs/lz-evm-v1-0.7': 3.0.142(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4) + '@layerzerolabs/lz-evm-protocol-v2': 3.0.152(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) + '@layerzerolabs/lz-evm-v1-0.7': 3.0.152(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4) '@openzeppelin/contracts': 5.4.0 '@openzeppelin/contracts-upgradeable': 5.4.0(@openzeppelin/contracts@5.4.0) hardhat-deploy: 0.12.4 solidity-bytes-utils: 0.8.4 dev: true - /@layerzerolabs/lz-evm-protocol-v2@3.0.142(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4): - resolution: {integrity: sha512-pbNX6/+ssLpwfWrdDCrROnp5LJ5Gc16iKAMKAg7CQwX7P6iMMHeXmshaItFqp0La69njiXBP4pTpS3gqNHaj4Q==} + /@layerzerolabs/lz-evm-protocol-v2@3.0.152(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4): + resolution: {integrity: sha512-W2Hcsbk4K+mAa21q/bnT930TQjd/Wvlp11RxouRGXATbvjB4NrFvZ8c0lrJjsgUm1f0LQC7djutZ2+dx2x3R/w==} peerDependencies: '@openzeppelin/contracts': ^4.8.1 || ^5.0.0 '@openzeppelin/contracts-upgradeable': ^4.8.1 || ^5.0.0 @@ -2251,30 +2268,30 @@ packages: solidity-bytes-utils: 0.8.4 dev: true - /@layerzerolabs/lz-evm-sdk-v1@3.0.142: - resolution: {integrity: sha512-5p5JUMq9amqZxt14hvKTb1hlNe0beX1ISPOroJggtQMcBLfm+yLHSUYMCbxuECKAI7kccqF0ACOZtp8FiBxLOw==} + /@layerzerolabs/lz-evm-sdk-v1@3.0.152: + resolution: {integrity: sha512-c2p2/nXzXzZz91GATAeQ+QNn7sWXXNN4Gc0hp8BOG2f7hY27lAdAP0gMYdv7rAGQqJj2NbBHwWRDmAlG338RlA==} dependencies: '@ethersproject/abi': 5.8.0 '@ethersproject/providers': 5.8.0 - '@layerzerolabs/evm-sdks-core': 3.0.142 + '@layerzerolabs/evm-sdks-core': 3.0.152 ethers: 5.8.0 transitivePeerDependencies: - bufferutil - utf-8-validate dev: true - /@layerzerolabs/lz-evm-sdk-v2@3.0.142: - resolution: {integrity: sha512-P5Fi2NyYmeKzQFmsDGKziyEcWI9TX/k0LPT5E+zb8zakg2s+pIlp0o68Q+oMdJdgkv5bh2K2hVdoWpuQdTB7wA==} + /@layerzerolabs/lz-evm-sdk-v2@3.0.152: + resolution: {integrity: sha512-IVJ2/B1F6R5LEJyG+gC3sFkaB60peDu3k5coVfDcdC+CNYp70EZvDSNiy/6fiQBboHSDm9C1qTOoRzf7ynY8Iw==} dependencies: - '@layerzerolabs/evm-sdks-core': 3.0.142 + '@layerzerolabs/evm-sdks-core': 3.0.152 ethers: 5.8.0 transitivePeerDependencies: - bufferutil - utf-8-validate dev: true - /@layerzerolabs/lz-evm-v1-0.7@3.0.142(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4): - resolution: {integrity: sha512-dTYl7MCjeKNtfzF9zkm/E6zCro3/66k1fzQbgioHNK9gSZhjZfgpuQD10zXAVFjBoDI2LGh/SFlBet5mmSWD7g==} + /@layerzerolabs/lz-evm-v1-0.7@3.0.152(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4): + resolution: {integrity: sha512-S1velKlKw2q5pWqXatgSe5OTRbZYslzGwjMwlcgmcpVLiPJpabcX9REZeUvxEI+xHXlQpim2sqUEvHfXtXJRhg==} peerDependencies: '@openzeppelin/contracts': 3.4.2-solc-0.7 || ^3.4.2 || ^4.0.0 || ^5.0.0 '@openzeppelin/contracts-upgradeable': 3.4.2-solc-0.7 || ^3.4.2 || ^4.0.0 || ^5.0.0 @@ -2285,11 +2302,11 @@ packages: hardhat-deploy: 0.12.4 dev: true - /@layerzerolabs/lz-foundation@3.0.142(got@11.8.6)(typescript@5.9.3): - resolution: {integrity: sha512-pkxpZ3WnvsSS5thxmXAjJqNBrsxRp2nUfHsfALUzINMu1YYap3VDjxKveYX28ekS4vrwcR400t4MhAgi4RGevA==} + /@layerzerolabs/lz-foundation@3.0.152(got@11.8.6)(typescript@5.9.3): + resolution: {integrity: sha512-eYFC3aDWN3c7cS2zepDJvv+4Pss4ssjlM4wL+EGTrWXemv8gYNOibOCxH9JmWGN4cO0Qm1ngRPD8Dm1Ua55mzQ==} dependencies: - '@layerzerolabs/lz-definitions': 3.0.142 - '@layerzerolabs/lz-utilities': 3.0.142(got@11.8.6)(typescript@5.9.3) + '@layerzerolabs/lz-definitions': 3.0.152 + '@layerzerolabs/lz-utilities': 3.0.152(got@11.8.6)(typescript@5.9.3) '@noble/ed25519': 1.7.5 '@noble/hashes': 1.8.0 '@noble/secp256k1': 1.7.2 @@ -2307,13 +2324,13 @@ packages: - utf-8-validate dev: true - /@layerzerolabs/lz-serdes@3.0.142(got@11.8.6)(typescript@5.9.3): - resolution: {integrity: sha512-rWhF+qvvwQjFW3HAzsW+6SaeDaccxWhT/+Y/wA2vti6yyE53Ges2nTfDtDyTwM9AVqXersd1r5tlr+fVk1hP0w==} + /@layerzerolabs/lz-serdes@3.0.152(got@11.8.6)(typescript@5.9.3): + resolution: {integrity: sha512-TTHbdVmVaVEdhUgUwTGn+38pd+6VZAJ23SlYjWYzNED7RJKFCglNfZ8+delb6opuQ5Qi+CPwlXyqoER0jny6cw==} dependencies: '@coral-xyz/anchor': 0.29.0(typescript@5.9.3) - '@layerzerolabs/lz-core': 3.0.142 - '@layerzerolabs/lz-utilities': 3.0.142(got@11.8.6)(typescript@5.9.3) - '@layerzerolabs/tron-utilities': 3.0.142(got@11.8.6)(typescript@5.9.3) + '@layerzerolabs/lz-core': 3.0.152 + '@layerzerolabs/lz-utilities': 3.0.152(got@11.8.6)(typescript@5.9.3) + '@layerzerolabs/tron-utilities': 3.0.152(got@11.8.6)(typescript@5.9.3) aptos: 1.22.1(got@11.8.6) bip39: 3.1.0 ed25519-hd-key: 1.3.0 @@ -2331,15 +2348,15 @@ packages: - utf-8-validate dev: true - /@layerzerolabs/lz-solana-sdk-v2@3.0.142(fastestsmallesttextencoderdecoder@1.0.22)(got@11.8.6)(typescript@5.9.3): - resolution: {integrity: sha512-2mew2i37qZ1F27T7JwDCGfUIVrhYyqxD8KhLpxxn3YkekYsBize1LwzW5X+zJB1Ghua5ufdZFb4k6pDVMpFkWA==} + /@layerzerolabs/lz-solana-sdk-v2@3.0.152(fastestsmallesttextencoderdecoder@1.0.22)(got@11.8.6)(typescript@5.9.3): + resolution: {integrity: sha512-vHtENYCmD2uMC8Pui1bepDKljAlslY9Sik8IFyCLZSvouHf1wF3RPxl8ZcBlpSGJHUi0NnqJRdxKmDQrLzaMEQ==} dependencies: - '@layerzerolabs/lz-corekit-solana': 3.0.142(got@11.8.6)(typescript@5.9.3) - '@layerzerolabs/lz-definitions': 3.0.142 - '@layerzerolabs/lz-foundation': 3.0.142(got@11.8.6)(typescript@5.9.3) - '@layerzerolabs/lz-serdes': 3.0.142(got@11.8.6)(typescript@5.9.3) - '@layerzerolabs/lz-utilities': 3.0.142(got@11.8.6)(typescript@5.9.3) - '@layerzerolabs/lz-v2-utilities': 3.0.142 + '@layerzerolabs/lz-corekit-solana': 3.0.152(got@11.8.6)(typescript@5.9.3) + '@layerzerolabs/lz-definitions': 3.0.152 + '@layerzerolabs/lz-foundation': 3.0.152(got@11.8.6)(typescript@5.9.3) + '@layerzerolabs/lz-serdes': 3.0.152(got@11.8.6)(typescript@5.9.3) + '@layerzerolabs/lz-utilities': 3.0.152(got@11.8.6)(typescript@5.9.3) + '@layerzerolabs/lz-v2-utilities': 3.0.152 '@metaplex-foundation/beet': 0.7.2 '@metaplex-foundation/beet-solana': 0.4.1(typescript@5.9.3) '@metaplex-foundation/mpl-toolbox': 0.9.4(@metaplex-foundation/umi@0.9.2) @@ -2366,21 +2383,21 @@ packages: - utf-8-validate dev: true - /@layerzerolabs/lz-utilities@3.0.142(got@11.8.6)(typescript@5.9.3): - resolution: {integrity: sha512-5hRog7grjnsIg+IuP2vBP1IYrXmF4y1xZKUNZ23vNbS3/di2Jj3Hbh5BU5o0z+hBATkKdM6KVsPGIwWts0h8Yw==} + /@layerzerolabs/lz-utilities@3.0.152(got@11.8.6)(typescript@5.9.3): + resolution: {integrity: sha512-yb+CdSYuG4QD0spFwxyeAkLfjQvdDrltl0BCrTJXE0ifBP4te9KQGISZNAO3/+mMBliC2NqHxCXDiLGjIdygNw==} dependencies: '@ethersproject/bytes': 5.8.0 '@initia/initia.js': 1.0.4(typescript@5.9.3) - '@iota/iota-sdk': 1.6.1(typescript@5.9.3) - '@layerzerolabs/lz-definitions': 3.0.142 - '@mysten/sui': 1.43.2(typescript@5.9.3) + '@iota/iota-sdk': 1.10.0(typescript@5.9.3) + '@layerzerolabs/lz-definitions': 3.0.152 + '@mysten/sui': 1.45.2(typescript@5.9.3) '@solana/web3.js': 1.98.4(typescript@5.9.3) '@ton/core': 0.59.1(@ton/crypto@3.3.0) '@ton/crypto': 3.3.0 '@ton/ton': 15.1.0(@ton/core@0.59.1)(@ton/crypto@3.3.0) aptos: 1.22.1(got@11.8.6) bip39: 3.1.0 - dayjs: 1.11.18 + dayjs: 1.11.19 ed25519-hd-key: 1.3.0 ethers: 5.8.0 memoizee: 0.4.17 @@ -2397,8 +2414,8 @@ packages: - utf-8-validate dev: true - /@layerzerolabs/lz-v2-utilities@3.0.142: - resolution: {integrity: sha512-VAa03YAm7Hr9a2Kjj/UGJw5m2pkFSjbo3C5Fh3VumXbKM32vOogDdPurcBoWNRUxD08k8NylX2whse1qfDlZ9g==} + /@layerzerolabs/lz-v2-utilities@3.0.152: + resolution: {integrity: sha512-r96jPIwbapBLmpBh+ept0tq/ujMaR/f0WC+0CFOWg7uFd5lVN9yWfya7RPNwkw0e/oDb9EFBBy+7Pq1mUKCtXA==} dependencies: '@ethersproject/abi': 5.8.0 '@ethersproject/address': 5.8.0 @@ -2410,28 +2427,28 @@ packages: tiny-invariant: 1.3.3 dev: true - /@layerzerolabs/metadata-tools@3.0.2(@layerzerolabs/devtools-evm-hardhat@4.0.1)(@layerzerolabs/ua-devtools@5.0.1): + /@layerzerolabs/metadata-tools@3.0.2(@layerzerolabs/devtools-evm-hardhat@4.0.4)(@layerzerolabs/ua-devtools@5.0.2): resolution: {integrity: sha512-C+LcNFMDXcanDlCOaXm7UGeOObN947BbOCP5mfGkdnKGso1I3+Tak/1QpCRMWvcz1zfa4jikF5KQsfY5bJQD4Q==} peerDependencies: '@layerzerolabs/devtools-evm-hardhat': ~4.0.0 '@layerzerolabs/ua-devtools': ~5.0.1 dependencies: - '@layerzerolabs/devtools-evm-hardhat': 4.0.1(@ethersproject/abi@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.8.0)(fp-ts@2.16.11)(hardhat-deploy@0.12.4)(hardhat@2.26.4) - '@layerzerolabs/ua-devtools': 5.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/protocol-devtools@3.0.1)(zod@3.25.76) + '@layerzerolabs/devtools-evm-hardhat': 4.0.4(@ethersproject/abi@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.8.0)(fp-ts@2.16.11)(hardhat-deploy@0.12.4)(hardhat@2.28.2) + '@layerzerolabs/ua-devtools': 5.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/protocol-devtools@3.0.2)(zod@3.25.76) dev: true - /@layerzerolabs/oapp-evm@0.4.0(@layerzerolabs/lz-evm-messagelib-v2@3.0.142)(@layerzerolabs/lz-evm-protocol-v2@3.0.142)(@layerzerolabs/lz-evm-v1-0.7@3.0.142)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0): - resolution: {integrity: sha512-/AixOWiirp4GH5SGL/LmsMwHKLN8BiOd46u13LSVM0UyLkrwN5ulN6kt76Ed9Z20hafbmq7mt83yZiDxHeG+XA==} + /@layerzerolabs/oapp-evm@0.4.1(@layerzerolabs/lz-evm-messagelib-v2@3.0.152)(@layerzerolabs/lz-evm-protocol-v2@3.0.152)(@layerzerolabs/lz-evm-v1-0.7@3.0.152)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0): + resolution: {integrity: sha512-eOoDepVSrUlVNIlnkH0Vd5Vt4lXBkSBh6Bb16vsLbaN9AryBjy4GDpsE7K4c8iWTFL9BiBXGsV7nJTkgqi+xRQ==} peerDependencies: - '@layerzerolabs/lz-evm-messagelib-v2': ^3.0.75 - '@layerzerolabs/lz-evm-protocol-v2': ^3.0.75 - '@layerzerolabs/lz-evm-v1-0.7': ^3.0.75 + '@layerzerolabs/lz-evm-messagelib-v2': ^3.0.148 + '@layerzerolabs/lz-evm-protocol-v2': ^3.0.148 + '@layerzerolabs/lz-evm-v1-0.7': ^3.0.148 '@openzeppelin/contracts': ^4.8.1 || ^5.0.0 '@openzeppelin/contracts-upgradeable': ^4.8.1 || ^5.0.0 dependencies: - '@layerzerolabs/lz-evm-messagelib-v2': 3.0.142(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.142)(@layerzerolabs/lz-evm-v1-0.7@3.0.142)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) - '@layerzerolabs/lz-evm-protocol-v2': 3.0.142(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) - '@layerzerolabs/lz-evm-v1-0.7': 3.0.142(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4) + '@layerzerolabs/lz-evm-messagelib-v2': 3.0.152(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.152)(@layerzerolabs/lz-evm-v1-0.7@3.0.152)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) + '@layerzerolabs/lz-evm-protocol-v2': 3.0.152(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) + '@layerzerolabs/lz-evm-v1-0.7': 3.0.152(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4) '@openzeppelin/contracts': 5.4.0 '@openzeppelin/contracts-upgradeable': 5.4.0(@openzeppelin/contracts@5.4.0) ethers: 5.8.0 @@ -2440,31 +2457,31 @@ packages: - utf-8-validate dev: true - /@layerzerolabs/oft-evm@4.0.0(@layerzerolabs/lz-evm-messagelib-v2@3.0.142)(@layerzerolabs/lz-evm-protocol-v2@3.0.142)(@layerzerolabs/lz-evm-v1-0.7@3.0.142)(@layerzerolabs/oapp-evm@0.4.0)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0): - resolution: {integrity: sha512-9GTLg/q+XcZHkNOh3gEw60QJWen/TeJOoqHGwEfJfB1csUx+fIPjYmjepwKUbAwU2+tMUQqcfdt7ajhZmbKWdw==} + /@layerzerolabs/oft-evm@4.0.1(@layerzerolabs/lz-evm-messagelib-v2@3.0.152)(@layerzerolabs/lz-evm-protocol-v2@3.0.152)(@layerzerolabs/lz-evm-v1-0.7@3.0.152)(@layerzerolabs/oapp-evm@0.4.1)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0): + resolution: {integrity: sha512-GjjfnUbx77TnFFKALVRXJYb1bt1jvarcyyx/AQo6sZfJng5DIqzI9wDxEGlUz03tEnsS6ZOOLBsH+e/hYsruiA==} peerDependencies: - '@layerzerolabs/lz-evm-messagelib-v2': ^3.0.75 - '@layerzerolabs/lz-evm-protocol-v2': ^3.0.75 - '@layerzerolabs/lz-evm-v1-0.7': ^3.0.75 - '@layerzerolabs/oapp-evm': ^0.4.0 + '@layerzerolabs/lz-evm-messagelib-v2': ^3.0.148 + '@layerzerolabs/lz-evm-protocol-v2': ^3.0.148 + '@layerzerolabs/lz-evm-v1-0.7': ^3.0.148 + '@layerzerolabs/oapp-evm': ^0.4.1 '@openzeppelin/contracts': ^4.8.1 || ^5.0.0 '@openzeppelin/contracts-upgradeable': ^4.8.1 || ^5.0.0 dependencies: - '@layerzerolabs/lz-evm-messagelib-v2': 3.0.142(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.142)(@layerzerolabs/lz-evm-v1-0.7@3.0.142)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) - '@layerzerolabs/lz-evm-protocol-v2': 3.0.142(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) - '@layerzerolabs/lz-evm-v1-0.7': 3.0.142(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4) - '@layerzerolabs/oapp-evm': 0.4.0(@layerzerolabs/lz-evm-messagelib-v2@3.0.142)(@layerzerolabs/lz-evm-protocol-v2@3.0.142)(@layerzerolabs/lz-evm-v1-0.7@3.0.142)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0) + '@layerzerolabs/lz-evm-messagelib-v2': 3.0.152(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.152)(@layerzerolabs/lz-evm-v1-0.7@3.0.152)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) + '@layerzerolabs/lz-evm-protocol-v2': 3.0.152(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) + '@layerzerolabs/lz-evm-v1-0.7': 3.0.152(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4) + '@layerzerolabs/oapp-evm': 0.4.1(@layerzerolabs/lz-evm-messagelib-v2@3.0.152)(@layerzerolabs/lz-evm-protocol-v2@3.0.152)(@layerzerolabs/lz-evm-v1-0.7@3.0.152)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0) '@openzeppelin/contracts': 5.4.0 '@openzeppelin/contracts-upgradeable': 5.4.0(@openzeppelin/contracts@5.4.0) dev: true - /@layerzerolabs/oft-v2-solana-sdk@3.0.142(fastestsmallesttextencoderdecoder@1.0.22)(got@11.8.6)(typescript@5.9.3): - resolution: {integrity: sha512-5FqrCM/5xto21mg10ZgQT9x3PvvHxPq7xlocI9izl0w6Qc6CQTwAZobiZGDeSFM77MsRruDwzQIal5ZuzPokww==} + /@layerzerolabs/oft-v2-solana-sdk@3.0.152(fastestsmallesttextencoderdecoder@1.0.22)(got@11.8.6)(typescript@5.9.3): + resolution: {integrity: sha512-Ot+lhkoddYs/oj+6pwzJPeU8b6ZXGam62UI/6zbbsZEwBLTWVt4Cs+p5rePVqxouWuA/8Tpdd2ew9mnQTRWTpw==} dependencies: '@ethersproject/bytes': 5.8.0 - '@layerzerolabs/lz-foundation': 3.0.142(got@11.8.6)(typescript@5.9.3) - '@layerzerolabs/lz-solana-sdk-v2': 3.0.142(fastestsmallesttextencoderdecoder@1.0.22)(got@11.8.6)(typescript@5.9.3) - '@layerzerolabs/lz-v2-utilities': 3.0.142 + '@layerzerolabs/lz-foundation': 3.0.152(got@11.8.6)(typescript@5.9.3) + '@layerzerolabs/lz-solana-sdk-v2': 3.0.152(fastestsmallesttextencoderdecoder@1.0.22)(got@11.8.6)(typescript@5.9.3) + '@layerzerolabs/lz-v2-utilities': 3.0.152 '@metaplex-foundation/beet': 0.7.2 '@metaplex-foundation/beet-solana': 0.4.1(typescript@5.9.3) '@metaplex-foundation/umi': 0.9.2 @@ -2490,13 +2507,13 @@ packages: /@layerzerolabs/prettier-config-next@2.3.44: resolution: {integrity: sha512-mIsxKLaelXHXXXvMEAE6Jc8IVydra0PesHquHYwvxFKwDhMhzfrnoRLLzbgCX/Zi1q0GGET/oMAKJTs6OWFPxQ==} dependencies: - prettier: 3.6.2 - prettier-plugin-packagejson: 2.5.19(prettier@3.6.2) - prettier-plugin-solidity: 1.4.3(prettier@3.6.2) + prettier: 3.7.4 + prettier-plugin-packagejson: 2.5.20(prettier@3.7.4) + prettier-plugin-solidity: 1.4.3(prettier@3.7.4) dev: true - /@layerzerolabs/protocol-devtools-evm@5.0.1(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/protocol-devtools@3.0.1)(zod@3.25.76): - resolution: {integrity: sha512-g2RwxOWJITuEKU/j04UscEc57OcU03+vEsS7i3jyz+AKKq2vjXFMf6s9rbeQmu548/8LppnHg/t5QH5R33TPkQ==} + /@layerzerolabs/protocol-devtools-evm@5.0.2(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/protocol-devtools@3.0.2)(zod@3.25.76): + resolution: {integrity: sha512-KeBBqxupuJ2CchmjctHSs6IcGd4iWSgIvVnQ9EI662ScwMmESz3JMFMkUhsQQqDa/a4Hvf8rLYW+e7E7D1TuVw==} peerDependencies: '@ethersproject/abstract-provider': ^5.7.0 '@ethersproject/abstract-signer': ^5.7.0 @@ -2504,11 +2521,11 @@ packages: '@ethersproject/constants': ^5.7.0 '@ethersproject/contracts': ^5.7.0 '@ethersproject/providers': ^5.7.0 - '@layerzerolabs/devtools': ~2.0.0 - '@layerzerolabs/devtools-evm': ~3.0.0 - '@layerzerolabs/io-devtools': ~0.3.0 - '@layerzerolabs/lz-definitions': ^3.0.75 - '@layerzerolabs/protocol-devtools': ~3.0.1 + '@layerzerolabs/devtools': ~2.0.4 + '@layerzerolabs/devtools-evm': ~3.0.2 + '@layerzerolabs/io-devtools': ~0.3.2 + '@layerzerolabs/lz-definitions': ^3.0.148 + '@layerzerolabs/protocol-devtools': ~3.0.2 zod: ^3.22.4 dependencies: '@ethersproject/abstract-provider': 5.8.0 @@ -2517,101 +2534,92 @@ packages: '@ethersproject/constants': 5.8.0 '@ethersproject/contracts': 5.8.0 '@ethersproject/providers': 5.8.0 - '@layerzerolabs/devtools': 2.0.3(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) - '@layerzerolabs/devtools-evm': 3.0.0(@ethersproject/abi@5.8.0)(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(fp-ts@2.16.11)(zod@3.25.76) - '@layerzerolabs/io-devtools': 0.3.1(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) - '@layerzerolabs/lz-definitions': 3.0.142 - '@layerzerolabs/protocol-devtools': 3.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) + '@layerzerolabs/devtools': 2.0.4(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) + '@layerzerolabs/devtools-evm': 3.0.2(@ethersproject/abi@5.8.0)(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(fp-ts@2.16.11)(typescript@5.9.3)(zod@3.25.76) + '@layerzerolabs/io-devtools': 0.3.2(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) + '@layerzerolabs/lz-definitions': 3.0.152 + '@layerzerolabs/protocol-devtools': 3.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) p-memoize: 4.0.4 zod: 3.25.76 dev: true - /@layerzerolabs/protocol-devtools-solana@8.0.3(@layerzerolabs/devtools-solana@3.0.4)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-solana-sdk-v2@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/protocol-devtools@3.0.1)(@layerzerolabs/ua-devtools@5.0.1)(@solana/web3.js@1.98.4)(fp-ts@2.16.11)(zod@3.25.76): - resolution: {integrity: sha512-zeor10qzjlVgmGDmlbb/s2JMo8pPGHmRcsnDgorunGwAop3BfZkSZI8RbpedXSNVPTfDAdC0VXykpHsXHyrCKg==} + /@layerzerolabs/protocol-devtools-solana@8.0.6(@layerzerolabs/devtools-solana@3.0.5)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-solana-sdk-v2@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/protocol-devtools@3.0.2)(@layerzerolabs/ua-devtools@5.0.2)(@solana/web3.js@1.98.4)(fp-ts@2.16.11)(zod@3.25.76): + resolution: {integrity: sha512-ovtpI8zfzs05p86lOZFsfb4BHq5SVO6tTDm52tloiGjLNYxOwvHwMea8y74LuPEf7CPw0sROqCOHZst8dN9Q7g==} peerDependencies: - '@layerzerolabs/devtools': ~2.0.0 - '@layerzerolabs/devtools-solana': ~3.0.0 - '@layerzerolabs/io-devtools': ~0.3.0 - '@layerzerolabs/lz-definitions': ^3.0.75 + '@layerzerolabs/devtools': ~2.0.4 + '@layerzerolabs/devtools-solana': ~3.0.5 + '@layerzerolabs/io-devtools': ~0.3.2 + '@layerzerolabs/lz-definitions': ^3.0.148 '@layerzerolabs/lz-solana-sdk-v2': ^3.0.0 - '@layerzerolabs/lz-v2-utilities': ^3.0.75 - '@layerzerolabs/protocol-devtools': ^3.0.1 - '@layerzerolabs/ua-devtools': ^5.0.1 + '@layerzerolabs/lz-v2-utilities': ^3.0.148 + '@layerzerolabs/protocol-devtools': ^3.0.2 + '@layerzerolabs/ua-devtools': ^5.0.2 '@solana/web3.js': ^1.98.0 fp-ts: ^2.16.2 zod: ^3.22.4 dependencies: - '@layerzerolabs/devtools': 2.0.3(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) - '@layerzerolabs/devtools-solana': 3.0.4(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@solana/web3.js@1.98.4)(bn.js@5.2.2)(fastestsmallesttextencoderdecoder@1.0.22)(fp-ts@2.16.11)(typescript@5.9.3)(zod@3.25.76) - '@layerzerolabs/io-devtools': 0.3.1(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) - '@layerzerolabs/lz-definitions': 3.0.142 - '@layerzerolabs/lz-solana-sdk-v2': 3.0.142(fastestsmallesttextencoderdecoder@1.0.22)(got@11.8.6)(typescript@5.9.3) - '@layerzerolabs/lz-v2-utilities': 3.0.142 - '@layerzerolabs/protocol-devtools': 3.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) - '@layerzerolabs/ua-devtools': 5.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/protocol-devtools@3.0.1)(zod@3.25.76) - '@safe-global/api-kit': 1.3.1 - '@safe-global/protocol-kit': 1.3.0(ethers@5.8.0) + '@layerzerolabs/devtools': 2.0.4(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) + '@layerzerolabs/devtools-solana': 3.0.5(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@solana/web3.js@1.98.4)(bn.js@5.2.2)(fastestsmallesttextencoderdecoder@1.0.22)(fp-ts@2.16.11)(typescript@5.9.3)(zod@3.25.76) + '@layerzerolabs/io-devtools': 0.3.2(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) + '@layerzerolabs/lz-definitions': 3.0.152 + '@layerzerolabs/lz-solana-sdk-v2': 3.0.152(fastestsmallesttextencoderdecoder@1.0.22)(got@11.8.6)(typescript@5.9.3) + '@layerzerolabs/lz-v2-utilities': 3.0.152 + '@layerzerolabs/protocol-devtools': 3.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) + '@layerzerolabs/ua-devtools': 5.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/protocol-devtools@3.0.2)(zod@3.25.76) '@solana/web3.js': 1.98.4(typescript@5.9.3) - ethers: 5.8.0 fp-ts: 2.16.11 - p-memoize: 4.0.4 zod: 3.25.76 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate dev: true - /@layerzerolabs/protocol-devtools@3.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76): - resolution: {integrity: sha512-5LndY2OD0PdodEv5IuhSP3RzbThxmE2B8twcrMGuPixrD1PjiIYqLvm2wznUMV/2NLiQrDdY1bOpd+5q9weibw==} + /@layerzerolabs/protocol-devtools@3.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76): + resolution: {integrity: sha512-HFlsMQJTEH7aSxeKtokp4h1bu7u/GkFHy4smBPgcY/OsRQSdtOxXJQzopFcEsikvnfPkpXplnf8IUwJi7YGyNg==} peerDependencies: - '@layerzerolabs/devtools': ~2.0.0 - '@layerzerolabs/io-devtools': ~0.3.0 - '@layerzerolabs/lz-definitions': ^3.0.75 + '@layerzerolabs/devtools': ~2.0.4 + '@layerzerolabs/io-devtools': ~0.3.2 + '@layerzerolabs/lz-definitions': ^3.0.148 zod: ^3.22.4 dependencies: - '@layerzerolabs/devtools': 2.0.3(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) - '@layerzerolabs/io-devtools': 0.3.1(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) - '@layerzerolabs/lz-definitions': 3.0.142 + '@layerzerolabs/devtools': 2.0.4(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) + '@layerzerolabs/io-devtools': 0.3.2(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) + '@layerzerolabs/lz-definitions': 3.0.152 zod: 3.25.76 dev: true - /@layerzerolabs/solhint-config@3.0.142(typescript@5.9.3): - resolution: {integrity: sha512-+qqhrFhKPr3MzDKX2mlbp+CL4pE5qqKBxed6SLA9Vow2QX7uEOz8DOAOqRomrS5/R3YNimYCn0nxYWjy5bywlQ==} + /@layerzerolabs/solhint-config@3.0.152(typescript@5.9.3): + resolution: {integrity: sha512-iGIhfZGFYLUsDFzn2BzrXj/3IuG3KQ6cfyPGnygB+Qf8crkSfrWA4zy98mOYPXKsMPtDo6pApJIk6zGpCeVNQQ==} dependencies: solhint: 4.5.4(typescript@5.9.3) transitivePeerDependencies: - typescript dev: true - /@layerzerolabs/test-devtools-evm-foundry@8.0.0(@layerzerolabs/lz-evm-messagelib-v2@3.0.142)(@layerzerolabs/lz-evm-protocol-v2@3.0.142)(@layerzerolabs/lz-evm-v1-0.7@3.0.142)(@layerzerolabs/oapp-evm@0.4.0)(@layerzerolabs/oft-evm@4.0.0)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0): - resolution: {integrity: sha512-L32qaCai+mcnz6oSbgkb17kBqvR9HdtvUFIB8dkMnNUTEUfzXC7llqS6cfdtriO9zl7m5JH9q5SQUS1GJ/D4Ig==} + /@layerzerolabs/test-devtools-evm-foundry@8.0.1(@layerzerolabs/lz-evm-messagelib-v2@3.0.152)(@layerzerolabs/lz-evm-protocol-v2@3.0.152)(@layerzerolabs/lz-evm-v1-0.7@3.0.152)(@layerzerolabs/oapp-evm@0.4.1)(@layerzerolabs/oft-evm@4.0.1)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0): + resolution: {integrity: sha512-oih2mReJJsSjjxFyovcOefgMmHo22f9LocHPuHNV82aGI5Sw+RR+eP6bIOuKPt/8I5cMJfusMJzQJtuvDYQhDg==} peerDependencies: - '@layerzerolabs/lz-evm-messagelib-v2': ^3.0.75 - '@layerzerolabs/lz-evm-protocol-v2': ^3.0.75 - '@layerzerolabs/lz-evm-v1-0.7': ^3.0.75 - '@layerzerolabs/oapp-evm': ^0.4.0 - '@layerzerolabs/oft-evm': ^4.0.0 + '@layerzerolabs/lz-evm-messagelib-v2': ^3.0.148 + '@layerzerolabs/lz-evm-protocol-v2': ^3.0.148 + '@layerzerolabs/lz-evm-v1-0.7': ^3.0.148 + '@layerzerolabs/oapp-evm': ^0.4.1 + '@layerzerolabs/oft-evm': ^4.0.1 '@openzeppelin/contracts': ^4.9.5 || ^5.0.0 '@openzeppelin/contracts-upgradeable': ^4.9.5 || ^5.0.0 dependencies: - '@layerzerolabs/lz-evm-messagelib-v2': 3.0.142(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.142)(@layerzerolabs/lz-evm-v1-0.7@3.0.142)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) - '@layerzerolabs/lz-evm-protocol-v2': 3.0.142(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) - '@layerzerolabs/lz-evm-v1-0.7': 3.0.142(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4) - '@layerzerolabs/oapp-evm': 0.4.0(@layerzerolabs/lz-evm-messagelib-v2@3.0.142)(@layerzerolabs/lz-evm-protocol-v2@3.0.142)(@layerzerolabs/lz-evm-v1-0.7@3.0.142)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0) - '@layerzerolabs/oft-evm': 4.0.0(@layerzerolabs/lz-evm-messagelib-v2@3.0.142)(@layerzerolabs/lz-evm-protocol-v2@3.0.142)(@layerzerolabs/lz-evm-v1-0.7@3.0.142)(@layerzerolabs/oapp-evm@0.4.0)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0) + '@layerzerolabs/lz-evm-messagelib-v2': 3.0.152(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.152)(@layerzerolabs/lz-evm-v1-0.7@3.0.152)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) + '@layerzerolabs/lz-evm-protocol-v2': 3.0.152(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.4) + '@layerzerolabs/lz-evm-v1-0.7': 3.0.152(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0)(hardhat-deploy@0.12.4) + '@layerzerolabs/oapp-evm': 0.4.1(@layerzerolabs/lz-evm-messagelib-v2@3.0.152)(@layerzerolabs/lz-evm-protocol-v2@3.0.152)(@layerzerolabs/lz-evm-v1-0.7@3.0.152)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0) + '@layerzerolabs/oft-evm': 4.0.1(@layerzerolabs/lz-evm-messagelib-v2@3.0.152)(@layerzerolabs/lz-evm-protocol-v2@3.0.152)(@layerzerolabs/lz-evm-v1-0.7@3.0.152)(@layerzerolabs/oapp-evm@0.4.1)(@openzeppelin/contracts-upgradeable@5.4.0)(@openzeppelin/contracts@5.4.0) '@openzeppelin/contracts': 5.4.0 '@openzeppelin/contracts-upgradeable': 5.4.0(@openzeppelin/contracts@5.4.0) dev: true - /@layerzerolabs/test-devtools-evm-hardhat@0.5.2(hardhat@2.26.4)(solidity-bytes-utils@0.8.4): - resolution: {integrity: sha512-mBZRczjNJdMSsHUjl2EQCCXutS4Yo6s6K0Bc32kSl3MNKIHZZMOEf6Hkj1guVSx/m3l3VZBr+3s0xc9FiyoQgQ==} + /@layerzerolabs/test-devtools-evm-hardhat@0.5.3(hardhat@2.28.2)(solidity-bytes-utils@0.8.4): + resolution: {integrity: sha512-hqtwUAnq3U5I1FPUp0YHLYjEXPjP+8uuLPjG1B6AKGwOWswXE/9mE6CbYTk24fKOQgmgnt33Mem7TiHsSbz4vw==} peerDependencies: hardhat: ^2.22.10 solidity-bytes-utils: ^0.8.2 dependencies: - hardhat: 2.26.4(ts-node@10.9.2)(typescript@5.9.3) + hardhat: 2.28.2(ts-node@10.9.2)(typescript@5.9.3) solidity-bytes-utils: 0.8.4 dev: true @@ -2619,8 +2627,8 @@ packages: resolution: {integrity: sha512-3rC+BVEPgcHLHPO4qn3KqYUG1vhDtr1m/gsaI1S635MK+19475U8HYATznAzHKwi09cf9uEv5C7fdtHXgIw8sQ==} dev: true - /@layerzerolabs/toolbox-hardhat@0.6.12(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/providers@5.8.0)(@nomicfoundation/hardhat-ethers@3.1.1)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.8.0)(hardhat-deploy@0.12.4)(hardhat@2.26.4)(solidity-bytes-utils@0.8.4): - resolution: {integrity: sha512-vw1bfm8q12ZpQ+k0dB58FFWtHuYmPKPxIb9M6nKkLikgpFWeL3/tLg4sXzr/rNTSGrxR7Ut5IY0FTUVx5lI3HQ==} + /@layerzerolabs/toolbox-hardhat@0.6.13(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/providers@5.8.0)(@nomicfoundation/hardhat-ethers@3.1.3)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.8.0)(hardhat-deploy@0.12.4)(hardhat@2.28.2)(solidity-bytes-utils@0.8.4)(typescript@5.9.3): + resolution: {integrity: sha512-RDpVqRbRPyDAlGsRVPpN0UdDVUfYkXq2qFIqkDxgIpNbWxwXPE0dJgC8D/O/gXxGMYUmljk2huNh9btWgU28bw==} peerDependencies: '@nomicfoundation/hardhat-ethers': ^3.0.2 ethers: ^5.7.2 @@ -2632,24 +2640,24 @@ packages: '@ethersproject/bytes': 5.8.0 '@ethersproject/contracts': 5.8.0 '@ethersproject/hash': 5.8.0 - '@layerzerolabs/devtools': 2.0.3(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) - '@layerzerolabs/devtools-evm': 3.0.0(@ethersproject/abi@5.8.0)(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(fp-ts@2.16.11)(zod@3.25.76) - '@layerzerolabs/devtools-evm-hardhat': 4.0.1(@ethersproject/abi@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.8.0)(fp-ts@2.16.11)(hardhat-deploy@0.12.4)(hardhat@2.26.4) - '@layerzerolabs/io-devtools': 0.3.1(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) - '@layerzerolabs/lz-definitions': 3.0.142 - '@layerzerolabs/lz-evm-sdk-v1': 3.0.142 - '@layerzerolabs/lz-evm-sdk-v2': 3.0.142 - '@layerzerolabs/lz-v2-utilities': 3.0.142 - '@layerzerolabs/protocol-devtools': 3.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) - '@layerzerolabs/protocol-devtools-evm': 5.0.1(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/protocol-devtools@3.0.1)(zod@3.25.76) - '@layerzerolabs/test-devtools-evm-hardhat': 0.5.2(hardhat@2.26.4)(solidity-bytes-utils@0.8.4) - '@layerzerolabs/ua-devtools': 5.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/protocol-devtools@3.0.1)(zod@3.25.76) - '@layerzerolabs/ua-devtools-evm': 7.0.0(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/protocol-devtools-evm@5.0.1)(@layerzerolabs/protocol-devtools@3.0.1)(@layerzerolabs/ua-devtools@5.0.1)(zod@3.25.76) - '@layerzerolabs/ua-devtools-evm-hardhat': 9.0.0(@ethersproject/abi@5.8.0)(@ethersproject/bytes@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/hash@5.8.0)(@layerzerolabs/devtools-evm-hardhat@4.0.1)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/protocol-devtools-evm@5.0.1)(@layerzerolabs/protocol-devtools@3.0.1)(@layerzerolabs/ua-devtools-evm@7.0.0)(@layerzerolabs/ua-devtools@5.0.1)(ethers@5.8.0)(hardhat-deploy@0.12.4)(hardhat@2.26.4) - '@nomicfoundation/hardhat-ethers': 3.1.1(ethers@5.8.0)(hardhat@2.26.4) + '@layerzerolabs/devtools': 2.0.4(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) + '@layerzerolabs/devtools-evm': 3.0.2(@ethersproject/abi@5.8.0)(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(fp-ts@2.16.11)(typescript@5.9.3)(zod@3.25.76) + '@layerzerolabs/devtools-evm-hardhat': 4.0.4(@ethersproject/abi@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.8.0)(fp-ts@2.16.11)(hardhat-deploy@0.12.4)(hardhat@2.28.2) + '@layerzerolabs/io-devtools': 0.3.2(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) + '@layerzerolabs/lz-definitions': 3.0.152 + '@layerzerolabs/lz-evm-sdk-v1': 3.0.152 + '@layerzerolabs/lz-evm-sdk-v2': 3.0.152 + '@layerzerolabs/lz-v2-utilities': 3.0.152 + '@layerzerolabs/protocol-devtools': 3.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) + '@layerzerolabs/protocol-devtools-evm': 5.0.2(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/protocol-devtools@3.0.2)(zod@3.25.76) + '@layerzerolabs/test-devtools-evm-hardhat': 0.5.3(hardhat@2.28.2)(solidity-bytes-utils@0.8.4) + '@layerzerolabs/ua-devtools': 5.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/protocol-devtools@3.0.2)(zod@3.25.76) + '@layerzerolabs/ua-devtools-evm': 7.0.1(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/protocol-devtools-evm@5.0.2)(@layerzerolabs/protocol-devtools@3.0.2)(@layerzerolabs/ua-devtools@5.0.2)(zod@3.25.76) + '@layerzerolabs/ua-devtools-evm-hardhat': 9.0.1(@ethersproject/abi@5.8.0)(@ethersproject/bytes@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/hash@5.8.0)(@layerzerolabs/devtools-evm-hardhat@4.0.4)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/protocol-devtools-evm@5.0.2)(@layerzerolabs/protocol-devtools@3.0.2)(@layerzerolabs/ua-devtools-evm@7.0.1)(@layerzerolabs/ua-devtools@5.0.2)(ethers@5.8.0)(hardhat-deploy@0.12.4)(hardhat@2.28.2) + '@nomicfoundation/hardhat-ethers': 3.1.3(ethers@5.8.0)(hardhat@2.28.2) ethers: 5.8.0 fp-ts: 2.16.11 - hardhat: 2.26.4(ts-node@10.9.2)(typescript@5.9.3) + hardhat: 2.28.2(ts-node@10.9.2)(typescript@5.9.3) hardhat-deploy: 0.12.4 ink: 3.2.0(react@17.0.2) ink-gradient: 2.0.0(ink@3.2.0)(react@17.0.2) @@ -2669,13 +2677,14 @@ packages: - encoding - solidity-bytes-utils - supports-color + - typescript - utf-8-validate dev: true - /@layerzerolabs/tron-utilities@3.0.142(got@11.8.6)(typescript@5.9.3): - resolution: {integrity: sha512-Fk/8CKd6GNGS51XEYXmqvsmy3zSM/xyHLJ/MDrKKHj/YA3qEPlQa7fy0SSAEAVm8ukNj/4ITdFLRXPlIyA7idQ==} + /@layerzerolabs/tron-utilities@3.0.152(got@11.8.6)(typescript@5.9.3): + resolution: {integrity: sha512-LHgwg4lOOq9RJw9IYalclOsh0s1JFhR1Gzx/OMsHR4hPWX9YSV7MzuMdF0CA1GXhtlFOM/n4u5LZOQoHVB4Xnw==} dependencies: - '@layerzerolabs/lz-utilities': 3.0.142(got@11.8.6)(typescript@5.9.3) + '@layerzerolabs/lz-utilities': 3.0.152(got@11.8.6)(typescript@5.9.3) ethers: 5.8.0 tronweb: 5.3.4 transitivePeerDependencies: @@ -2689,22 +2698,22 @@ packages: - utf-8-validate dev: true - /@layerzerolabs/ua-devtools-evm-hardhat@9.0.0(@ethersproject/abi@5.8.0)(@ethersproject/bytes@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/hash@5.8.0)(@layerzerolabs/devtools-evm-hardhat@4.0.1)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/protocol-devtools-evm@5.0.1)(@layerzerolabs/protocol-devtools@3.0.1)(@layerzerolabs/ua-devtools-evm@7.0.0)(@layerzerolabs/ua-devtools@5.0.1)(ethers@5.8.0)(hardhat-deploy@0.12.4)(hardhat@2.26.4): - resolution: {integrity: sha512-Wm/88JToOgFAJO0nKnpGMxQDD8mN37VFhz/ejE0DWbXsukp7IdX4ld4gQKM0MU7Yiajardhlvpa3Mwg+xHi8KQ==} + /@layerzerolabs/ua-devtools-evm-hardhat@9.0.1(@ethersproject/abi@5.8.0)(@ethersproject/bytes@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/hash@5.8.0)(@layerzerolabs/devtools-evm-hardhat@4.0.4)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/protocol-devtools-evm@5.0.2)(@layerzerolabs/protocol-devtools@3.0.2)(@layerzerolabs/ua-devtools-evm@7.0.1)(@layerzerolabs/ua-devtools@5.0.2)(ethers@5.8.0)(hardhat-deploy@0.12.4)(hardhat@2.28.2): + resolution: {integrity: sha512-dH+VktHXCHKNI56rnNKpGMCxYPAjLx3iAi+bHpM1kT0ZDCnoEgu6/0NKi0DEROWXyH3jcYh2i16rZQHK0av8Xw==} peerDependencies: '@ethersproject/abi': ^5.7.0 '@ethersproject/bytes': ^5.7.0 '@ethersproject/contracts': ^5.7.0 '@ethersproject/hash': ^5.7.0 - '@layerzerolabs/devtools': ~2.0.0 - '@layerzerolabs/devtools-evm': ~3.0.0 - '@layerzerolabs/devtools-evm-hardhat': ~4.0.0 - '@layerzerolabs/io-devtools': ~0.3.0 - '@layerzerolabs/lz-definitions': ^3.0.75 - '@layerzerolabs/protocol-devtools': ~3.0.0 - '@layerzerolabs/protocol-devtools-evm': ~5.0.0 - '@layerzerolabs/ua-devtools': ~5.0.0 - '@layerzerolabs/ua-devtools-evm': ~7.0.0 + '@layerzerolabs/devtools': ~2.0.4 + '@layerzerolabs/devtools-evm': ~3.0.2 + '@layerzerolabs/devtools-evm-hardhat': ~4.0.4 + '@layerzerolabs/io-devtools': ~0.3.2 + '@layerzerolabs/lz-definitions': ^3.0.148 + '@layerzerolabs/protocol-devtools': ~3.0.2 + '@layerzerolabs/protocol-devtools-evm': ~5.0.2 + '@layerzerolabs/ua-devtools': ~5.0.2 + '@layerzerolabs/ua-devtools-evm': ~7.0.1 ethers: ^5.7.2 hardhat: ^2.22.10 hardhat-deploy: ^0.12.1 @@ -2713,146 +2722,138 @@ packages: '@ethersproject/bytes': 5.8.0 '@ethersproject/contracts': 5.8.0 '@ethersproject/hash': 5.8.0 - '@layerzerolabs/devtools': 2.0.3(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) - '@layerzerolabs/devtools-evm': 3.0.0(@ethersproject/abi@5.8.0)(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(fp-ts@2.16.11)(zod@3.25.76) - '@layerzerolabs/devtools-evm-hardhat': 4.0.1(@ethersproject/abi@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.8.0)(fp-ts@2.16.11)(hardhat-deploy@0.12.4)(hardhat@2.26.4) - '@layerzerolabs/io-devtools': 0.3.1(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) - '@layerzerolabs/lz-definitions': 3.0.142 - '@layerzerolabs/protocol-devtools': 3.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) - '@layerzerolabs/protocol-devtools-evm': 5.0.1(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/protocol-devtools@3.0.1)(zod@3.25.76) - '@layerzerolabs/ua-devtools': 5.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/protocol-devtools@3.0.1)(zod@3.25.76) - '@layerzerolabs/ua-devtools-evm': 7.0.0(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/protocol-devtools-evm@5.0.1)(@layerzerolabs/protocol-devtools@3.0.1)(@layerzerolabs/ua-devtools@5.0.1)(zod@3.25.76) + '@layerzerolabs/devtools': 2.0.4(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) + '@layerzerolabs/devtools-evm': 3.0.2(@ethersproject/abi@5.8.0)(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(fp-ts@2.16.11)(typescript@5.9.3)(zod@3.25.76) + '@layerzerolabs/devtools-evm-hardhat': 4.0.4(@ethersproject/abi@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.8.0)(fp-ts@2.16.11)(hardhat-deploy@0.12.4)(hardhat@2.28.2) + '@layerzerolabs/io-devtools': 0.3.2(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) + '@layerzerolabs/lz-definitions': 3.0.152 + '@layerzerolabs/protocol-devtools': 3.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) + '@layerzerolabs/protocol-devtools-evm': 5.0.2(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/protocol-devtools@3.0.2)(zod@3.25.76) + '@layerzerolabs/ua-devtools': 5.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/protocol-devtools@3.0.2)(zod@3.25.76) + '@layerzerolabs/ua-devtools-evm': 7.0.1(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/protocol-devtools-evm@5.0.2)(@layerzerolabs/protocol-devtools@3.0.2)(@layerzerolabs/ua-devtools@5.0.2)(zod@3.25.76) ethers: 5.8.0 - hardhat: 2.26.4(ts-node@10.9.2)(typescript@5.9.3) + hardhat: 2.28.2(ts-node@10.9.2)(typescript@5.9.3) hardhat-deploy: 0.12.4 p-memoize: 4.0.4 typescript: 5.9.3 dev: true - /@layerzerolabs/ua-devtools-evm@7.0.0(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/protocol-devtools-evm@5.0.1)(@layerzerolabs/protocol-devtools@3.0.1)(@layerzerolabs/ua-devtools@5.0.1)(zod@3.25.76): - resolution: {integrity: sha512-FPm6ESqm2SBOJjCbRnkWCMg6o5zlkoeLUavD8v1hlZeiY4i33wIHccQPtxMz8Yz/ZD8leQ8TiKJJJ9sdVGk7tQ==} + /@layerzerolabs/ua-devtools-evm@7.0.1(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/protocol-devtools-evm@5.0.2)(@layerzerolabs/protocol-devtools@3.0.2)(@layerzerolabs/ua-devtools@5.0.2)(zod@3.25.76): + resolution: {integrity: sha512-YOZ2E2NCJrn/+wFXVPEb77US6OQ+gL3hThQK0xj+CFeATlXlPyDtMVg6dq5EHrY9luCClbf1WE2Iz/I0Tt2EvA==} peerDependencies: '@ethersproject/constants': ^5.7.0 '@ethersproject/contracts': ^5.7.0 - '@layerzerolabs/devtools': ~2.0.0 - '@layerzerolabs/devtools-evm': ~3.0.0 - '@layerzerolabs/io-devtools': ~0.3.0 - '@layerzerolabs/lz-definitions': ^3.0.75 - '@layerzerolabs/lz-v2-utilities': ^3.0.75 - '@layerzerolabs/protocol-devtools': ~3.0.0 - '@layerzerolabs/protocol-devtools-evm': ~5.0.0 - '@layerzerolabs/ua-devtools': ~5.0.0 + '@layerzerolabs/devtools': ~2.0.4 + '@layerzerolabs/devtools-evm': ~3.0.2 + '@layerzerolabs/io-devtools': ~0.3.2 + '@layerzerolabs/lz-definitions': ^3.0.148 + '@layerzerolabs/lz-v2-utilities': ^3.0.148 + '@layerzerolabs/protocol-devtools': ~3.0.2 + '@layerzerolabs/protocol-devtools-evm': ~5.0.2 + '@layerzerolabs/ua-devtools': ~5.0.2 zod: ^3.22.4 dependencies: '@ethersproject/constants': 5.8.0 '@ethersproject/contracts': 5.8.0 - '@layerzerolabs/devtools': 2.0.3(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) - '@layerzerolabs/devtools-evm': 3.0.0(@ethersproject/abi@5.8.0)(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(fp-ts@2.16.11)(zod@3.25.76) - '@layerzerolabs/io-devtools': 0.3.1(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) - '@layerzerolabs/lz-definitions': 3.0.142 - '@layerzerolabs/lz-v2-utilities': 3.0.142 - '@layerzerolabs/protocol-devtools': 3.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) - '@layerzerolabs/protocol-devtools-evm': 5.0.1(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.0)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/protocol-devtools@3.0.1)(zod@3.25.76) - '@layerzerolabs/ua-devtools': 5.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/protocol-devtools@3.0.1)(zod@3.25.76) + '@layerzerolabs/devtools': 2.0.4(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) + '@layerzerolabs/devtools-evm': 3.0.2(@ethersproject/abi@5.8.0)(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(fp-ts@2.16.11)(typescript@5.9.3)(zod@3.25.76) + '@layerzerolabs/io-devtools': 0.3.2(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) + '@layerzerolabs/lz-definitions': 3.0.152 + '@layerzerolabs/lz-v2-utilities': 3.0.152 + '@layerzerolabs/protocol-devtools': 3.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) + '@layerzerolabs/protocol-devtools-evm': 5.0.2(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/constants@5.8.0)(@ethersproject/contracts@5.8.0)(@ethersproject/providers@5.8.0)(@layerzerolabs/devtools-evm@3.0.2)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/protocol-devtools@3.0.2)(zod@3.25.76) + '@layerzerolabs/ua-devtools': 5.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/protocol-devtools@3.0.2)(zod@3.25.76) p-memoize: 4.0.4 zod: 3.25.76 dev: true - /@layerzerolabs/ua-devtools-solana@8.0.2(@layerzerolabs/devtools-solana@3.0.4)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-solana-sdk-v2@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/oft-v2-solana-sdk@3.0.142)(@layerzerolabs/protocol-devtools-solana@8.0.3)(@layerzerolabs/protocol-devtools@3.0.1)(@layerzerolabs/ua-devtools@5.0.1)(@solana/web3.js@1.98.4)(fp-ts@2.16.11)(zod@3.25.76): - resolution: {integrity: sha512-S1uiwLKJZQ87h9V51w1gTDgnMXtq45zHxO5xJ7XUIM7B+NoOX2arZB3cWerwocjAwloKHYBUxmWp8/vhJODkeg==} + /@layerzerolabs/ua-devtools-solana@8.0.7(@layerzerolabs/devtools-solana@3.0.5)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-solana-sdk-v2@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/oft-v2-solana-sdk@3.0.152)(@layerzerolabs/protocol-devtools-solana@8.0.6)(@layerzerolabs/protocol-devtools@3.0.2)(@layerzerolabs/ua-devtools@5.0.2)(@solana/web3.js@1.98.4)(fp-ts@2.16.11)(zod@3.25.76): + resolution: {integrity: sha512-3qdsZhzX9Kf6WlxcJvlCFbh6Lh90ucL4kYUvsDYtGgiHR/DyZ/DXO1sJY2dPwvarBFD0SN90xd+y4OdOcXlaHQ==} peerDependencies: - '@layerzerolabs/devtools': ~2.0.0 - '@layerzerolabs/devtools-solana': ~3.0.1 - '@layerzerolabs/io-devtools': ~0.3.0 - '@layerzerolabs/lz-definitions': ^3.0.75 + '@layerzerolabs/devtools': ~2.0.4 + '@layerzerolabs/devtools-solana': ~3.0.5 + '@layerzerolabs/io-devtools': ~0.3.2 + '@layerzerolabs/lz-definitions': ^3.0.148 '@layerzerolabs/lz-solana-sdk-v2': ^3.0.59 - '@layerzerolabs/lz-v2-utilities': ^3.0.75 + '@layerzerolabs/lz-v2-utilities': ^3.0.148 '@layerzerolabs/oft-v2-solana-sdk': ^3.0.59 - '@layerzerolabs/protocol-devtools': ^3.0.0 - '@layerzerolabs/protocol-devtools-solana': ~8.0.1 - '@layerzerolabs/ua-devtools': ^5.0.0 + '@layerzerolabs/protocol-devtools': ^3.0.2 + '@layerzerolabs/protocol-devtools-solana': ~8.0.6 + '@layerzerolabs/ua-devtools': ^5.0.2 '@solana/web3.js': ^1.98.0 fp-ts: ^2.16.2 zod: ^3.22.4 dependencies: - '@layerzerolabs/devtools': 2.0.3(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) - '@layerzerolabs/devtools-solana': 3.0.4(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@solana/web3.js@1.98.4)(bn.js@5.2.2)(fastestsmallesttextencoderdecoder@1.0.22)(fp-ts@2.16.11)(typescript@5.9.3)(zod@3.25.76) - '@layerzerolabs/io-devtools': 0.3.1(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) - '@layerzerolabs/lz-definitions': 3.0.142 - '@layerzerolabs/lz-solana-sdk-v2': 3.0.142(fastestsmallesttextencoderdecoder@1.0.22)(got@11.8.6)(typescript@5.9.3) - '@layerzerolabs/lz-v2-utilities': 3.0.142 - '@layerzerolabs/oft-v2-solana-sdk': 3.0.142(fastestsmallesttextencoderdecoder@1.0.22)(got@11.8.6)(typescript@5.9.3) - '@layerzerolabs/protocol-devtools': 3.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) - '@layerzerolabs/protocol-devtools-solana': 8.0.3(@layerzerolabs/devtools-solana@3.0.4)(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-solana-sdk-v2@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/protocol-devtools@3.0.1)(@layerzerolabs/ua-devtools@5.0.1)(@solana/web3.js@1.98.4)(fp-ts@2.16.11)(zod@3.25.76) - '@layerzerolabs/ua-devtools': 5.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/protocol-devtools@3.0.1)(zod@3.25.76) - '@safe-global/api-kit': 1.3.1 - '@safe-global/protocol-kit': 1.3.0(ethers@5.8.0) + '@layerzerolabs/devtools': 2.0.4(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) + '@layerzerolabs/devtools-solana': 3.0.5(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@solana/web3.js@1.98.4)(bn.js@5.2.2)(fastestsmallesttextencoderdecoder@1.0.22)(fp-ts@2.16.11)(typescript@5.9.3)(zod@3.25.76) + '@layerzerolabs/io-devtools': 0.3.2(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) + '@layerzerolabs/lz-definitions': 3.0.152 + '@layerzerolabs/lz-solana-sdk-v2': 3.0.152(fastestsmallesttextencoderdecoder@1.0.22)(got@11.8.6)(typescript@5.9.3) + '@layerzerolabs/lz-v2-utilities': 3.0.152 + '@layerzerolabs/oft-v2-solana-sdk': 3.0.152(fastestsmallesttextencoderdecoder@1.0.22)(got@11.8.6)(typescript@5.9.3) + '@layerzerolabs/protocol-devtools': 3.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) + '@layerzerolabs/protocol-devtools-solana': 8.0.6(@layerzerolabs/devtools-solana@3.0.5)(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-solana-sdk-v2@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/protocol-devtools@3.0.2)(@layerzerolabs/ua-devtools@5.0.2)(@solana/web3.js@1.98.4)(fp-ts@2.16.11)(zod@3.25.76) + '@layerzerolabs/ua-devtools': 5.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/protocol-devtools@3.0.2)(zod@3.25.76) '@solana/web3.js': 1.98.4(typescript@5.9.3) - ethers: 5.8.0 fp-ts: 2.16.11 p-memoize: 4.0.4 zod: 3.25.76 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate dev: true - /@layerzerolabs/ua-devtools@5.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(@layerzerolabs/lz-v2-utilities@3.0.142)(@layerzerolabs/protocol-devtools@3.0.1)(zod@3.25.76): - resolution: {integrity: sha512-acoxyJAYqF+di2/akGuWLa5Gdt7Z/8LLZD0LqOui34yjPuHYH88L4xxmKxqrs4Ga/uQnRKcF6Cauy9pjlQCj1A==} + /@layerzerolabs/ua-devtools@5.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(@layerzerolabs/lz-v2-utilities@3.0.152)(@layerzerolabs/protocol-devtools@3.0.2)(zod@3.25.76): + resolution: {integrity: sha512-CxYSKblpzb17z2lR+kZrLMz6LCE2CpML/Ypyi7MZoS0RCr8vTWZrHacRKbtNSwzjIJFUEHFxlktjfPeTlnMSAQ==} peerDependencies: - '@layerzerolabs/devtools': ~2.0.0 - '@layerzerolabs/io-devtools': ~0.3.0 - '@layerzerolabs/lz-definitions': ^3.0.75 - '@layerzerolabs/lz-v2-utilities': ^3.0.75 - '@layerzerolabs/protocol-devtools': ~3.0.1 + '@layerzerolabs/devtools': ~2.0.4 + '@layerzerolabs/io-devtools': ~0.3.2 + '@layerzerolabs/lz-definitions': ^3.0.148 + '@layerzerolabs/lz-v2-utilities': ^3.0.148 + '@layerzerolabs/protocol-devtools': ~3.0.2 zod: ^3.22.4 dependencies: - '@layerzerolabs/devtools': 2.0.3(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) - '@layerzerolabs/io-devtools': 0.3.1(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) - '@layerzerolabs/lz-definitions': 3.0.142 - '@layerzerolabs/lz-v2-utilities': 3.0.142 - '@layerzerolabs/protocol-devtools': 3.0.1(@layerzerolabs/devtools@2.0.3)(@layerzerolabs/io-devtools@0.3.1)(@layerzerolabs/lz-definitions@3.0.142)(zod@3.25.76) + '@layerzerolabs/devtools': 2.0.4(@ethersproject/bytes@5.8.0)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) + '@layerzerolabs/io-devtools': 0.3.2(ink-gradient@2.0.0)(ink-table@3.1.0)(ink@3.2.0)(react@17.0.2)(yoga-layout-prebuilt@1.10.0)(zod@3.25.76) + '@layerzerolabs/lz-definitions': 3.0.152 + '@layerzerolabs/lz-v2-utilities': 3.0.152 + '@layerzerolabs/protocol-devtools': 3.0.2(@layerzerolabs/devtools@2.0.4)(@layerzerolabs/io-devtools@0.3.2)(@layerzerolabs/lz-definitions@3.0.152)(zod@3.25.76) zod: 3.25.76 dev: true - /@ledgerhq/devices@8.6.1: - resolution: {integrity: sha512-PQR2fyWz7P/wMFHY9ZLz17WgFdxC/Im0RVDcWXpp24+iRQRyxhQeX2iG4mBKUzfaAW6pOIEiWt+vmJh88QP9rQ==} + /@ledgerhq/devices@8.8.0: + resolution: {integrity: sha512-ZFRAQQaESxIK/8SYrrHyqb7pQjLPO8f62PI6H16SP0/uC9fdZKR8NqOGMvIf7I6K442SkiQATnC/kxUeUTfuHA==} dependencies: - '@ledgerhq/errors': 6.26.0 + '@ledgerhq/errors': 6.28.0 '@ledgerhq/logs': 6.13.0 rxjs: 7.8.2 semver: 7.7.3 dev: true - /@ledgerhq/errors@6.26.0: - resolution: {integrity: sha512-4OlisaDBafkn7KN5emue08lCGMVREX6T+nxj47C7W30EBA/leLAEDaVvUw5/gFOWrv8Q2A9Scb8aMM3uokyt0w==} + /@ledgerhq/errors@6.28.0: + resolution: {integrity: sha512-Rx6GN801GP/3gCfVmmiXFVZWmiaEGMuXVwjM6WOCX0dzw4v7KcB1nj4vrNC1plDI/xkPt/clYJPG7LgSt0mxlw==} dev: true - /@ledgerhq/hw-transport-webhid@6.30.8: - resolution: {integrity: sha512-2Hc15GjC7BFrpMVJYJ7N2p70A6OzIdcMklwUEYpOcIVYbEWWj84+M5E5pc83ZIBc5j3C8rdtjncPCm2ExGx2LQ==} + /@ledgerhq/hw-transport-webhid@6.30.11: + resolution: {integrity: sha512-VIzJsTWsZFmizSMuRjb60qbrm7ETymBQafID93rTFL+TDabrS7WsVzxuOa69LR47CXjf7GpKpDyhzAZQoCbmwA==} dependencies: - '@ledgerhq/devices': 8.6.1 - '@ledgerhq/errors': 6.26.0 - '@ledgerhq/hw-transport': 6.31.12 + '@ledgerhq/devices': 8.8.0 + '@ledgerhq/errors': 6.28.0 + '@ledgerhq/hw-transport': 6.31.15 '@ledgerhq/logs': 6.13.0 dev: true - /@ledgerhq/hw-transport-webusb@6.29.12: - resolution: {integrity: sha512-mMGKPYAUz9MNcURe+hSTSHwqPwCli6D0lCl15Z4hDOpcqhZ26vwoeWVKeQp53NNCetHOl0lauPkN43Gt9pIggg==} + /@ledgerhq/hw-transport-webusb@6.29.15: + resolution: {integrity: sha512-HYei8oFHACXOigJLPEOsmVDRkGu7J0QPS/3QFMhBRHT4+0N6YDRXum6vSjOH+CoOJZ8zbTmmRh6dF/c5WEsUaQ==} dependencies: - '@ledgerhq/devices': 8.6.1 - '@ledgerhq/errors': 6.26.0 - '@ledgerhq/hw-transport': 6.31.12 + '@ledgerhq/devices': 8.8.0 + '@ledgerhq/errors': 6.28.0 + '@ledgerhq/hw-transport': 6.31.15 '@ledgerhq/logs': 6.13.0 dev: true - /@ledgerhq/hw-transport@6.31.12: - resolution: {integrity: sha512-FO5LRIXYC8ELtaohlO8qK0b3TfHUNBZ3+CXKPHiHj2jJwrxPf4s5kcgBYrmzuf1C/1vfrMOjzyty6OgrMIbU6Q==} + /@ledgerhq/hw-transport@6.31.15: + resolution: {integrity: sha512-I+hzH9XGFPaYq9K+iw+qWJUyVdhN9fdO00Df9zAkOCzju1W5Gc+cDJxbYnZApmY8oMd8mNoXTstEW3Ih5ikaVg==} dependencies: - '@ledgerhq/devices': 8.6.1 - '@ledgerhq/errors': 6.26.0 + '@ledgerhq/devices': 8.8.0 + '@ledgerhq/errors': 6.28.0 '@ledgerhq/logs': 6.13.0 events: 3.3.0 dev: true @@ -3075,11 +3076,11 @@ packages: '@scure/base': 1.2.6 dev: true - /@mysten/sui@1.43.2(typescript@5.9.3): - resolution: {integrity: sha512-xURMCHrhdVUXLFIUTUM0oRBpYh4nCcLPpn7hNUrWa/gdnABginmwldJpK0R8UjxLv4lEwcYGHeWs2yBl7tqLXg==} + /@mysten/sui@1.45.2(typescript@5.9.3): + resolution: {integrity: sha512-gftf7fNpFSiXyfXpbtP2afVEnhc7p2m/MEYc/SO5pov92dacGKOpQIF7etZsGDI1Wvhv+dpph+ulRNpnYSs7Bg==} engines: {node: '>=18'} dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) '@mysten/bcs': 1.9.2 '@mysten/utils': 0.2.0 '@noble/curves': 1.9.4 @@ -3090,10 +3091,10 @@ packages: '@scure/base': 1.2.6 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - gql.tada: 1.8.13(graphql@16.11.0)(typescript@5.9.3) - graphql: 16.11.0 + gql.tada: 1.9.0(graphql@16.12.0)(typescript@5.9.3) + graphql: 16.12.0 poseidon-lite: 0.2.1 - valibot: 0.36.0 + valibot: 1.2.0(typescript@5.9.3) transitivePeerDependencies: - '@gql.tada/svelte-support' - '@gql.tada/vue-support' @@ -3110,12 +3111,17 @@ packages: resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} requiresBuild: true dependencies: - '@emnapi/core': 1.6.0 - '@emnapi/runtime': 1.6.0 + '@emnapi/core': 1.8.1 + '@emnapi/runtime': 1.8.1 '@tybys/wasm-util': 0.10.1 dev: true optional: true + /@noble/ciphers@1.3.0: + resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} + engines: {node: ^14.21.3 || >=16} + dev: true + /@noble/curves@1.4.2: resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} dependencies: @@ -3129,6 +3135,13 @@ packages: '@noble/hashes': 1.7.2 dev: true + /@noble/curves@1.9.1: + resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==} + engines: {node: ^14.21.3 || >=16} + dependencies: + '@noble/hashes': 1.8.0 + dev: true + /@noble/curves@1.9.4: resolution: {integrity: sha512-2bKONnuM53lINoDrSmK8qP8W271ms7pygDhZt4SiLOoLwBtoHqeCFi6RG42V8zd3mLHuJFhU/Bmaqo4nX0/kBw==} engines: {node: ^14.21.3 || >=16} @@ -3197,7 +3210,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + fastq: 1.20.1 dev: true /@nolyfill/is-core-module@1.0.39: @@ -3205,63 +3218,63 @@ packages: engines: {node: '>=12.4.0'} dev: true - /@nomicfoundation/edr-darwin-arm64@0.11.3: - resolution: {integrity: sha512-w0tksbdtSxz9nuzHKsfx4c2mwaD0+l5qKL2R290QdnN9gi9AV62p9DHkOgfBdyg6/a6ZlnQqnISi7C9avk/6VA==} - engines: {node: '>= 18'} + /@nomicfoundation/edr-darwin-arm64@0.12.0-next.21: + resolution: {integrity: sha512-WUBBIlhW9UcYhEKlpuG+A/9gQsTciWID+shi2p5iYzArIZAHssyuUGOZF+z5/KQTyAC+GRQd/2YvCQacNnpOIg==} + engines: {node: '>= 20'} dev: true - /@nomicfoundation/edr-darwin-x64@0.11.3: - resolution: {integrity: sha512-QR4jAFrPbOcrO7O2z2ESg+eUeIZPe2bPIlQYgiJ04ltbSGW27FblOzdd5+S3RoOD/dsZGKAvvy6dadBEl0NgoA==} - engines: {node: '>= 18'} + /@nomicfoundation/edr-darwin-x64@0.12.0-next.21: + resolution: {integrity: sha512-DOLp9TS3pRxX5OVqH2SMv/hLmo2XZcciO+PLaoXcJGMTmUqDJbc1kOS7+e/kvf+f12e2Y4b/wPQGXKGRgcx61w==} + engines: {node: '>= 20'} dev: true - /@nomicfoundation/edr-linux-arm64-gnu@0.11.3: - resolution: {integrity: sha512-Ktjv89RZZiUmOFPspuSBVJ61mBZQ2+HuLmV67InNlh9TSUec/iDjGIwAn59dx0bF/LOSrM7qg5od3KKac4LJDQ==} - engines: {node: '>= 18'} + /@nomicfoundation/edr-linux-arm64-gnu@0.12.0-next.21: + resolution: {integrity: sha512-yYLkOFA9Y51TdHrZIFM6rLzArw/iEQuIGwNnTRUXVBO1bNyKVxfaO7qg4WuRSNWKuZAtMawilcjoyHNuxzm/oQ==} + engines: {node: '>= 20'} dev: true - /@nomicfoundation/edr-linux-arm64-musl@0.11.3: - resolution: {integrity: sha512-B3sLJx1rL2E9pfdD4mApiwOZSrX0a/KQSBWdlq1uAhFKqkl00yZaY4LejgZndsJAa4iKGQJlGnw4HCGeVt0+jA==} - engines: {node: '>= 18'} + /@nomicfoundation/edr-linux-arm64-musl@0.12.0-next.21: + resolution: {integrity: sha512-/L2hJYoUSHG9RTZRfOfYfsEBo1I30EQt3M+kWTDCS09jITnotWbqS9H/qbjd8u+8/xBBtAxNFhBgrIYu0GESSw==} + engines: {node: '>= 20'} dev: true - /@nomicfoundation/edr-linux-x64-gnu@0.11.3: - resolution: {integrity: sha512-D/4cFKDXH6UYyKPu6J3Y8TzW11UzeQI0+wS9QcJzjlrrfKj0ENW7g9VihD1O2FvXkdkTjcCZYb6ai8MMTCsaVw==} - engines: {node: '>= 18'} + /@nomicfoundation/edr-linux-x64-gnu@0.12.0-next.21: + resolution: {integrity: sha512-m5mjLjGbmiRwnv2UX48olr6NxTewt73i3f6pgqpTcQKgHxGWVvEHqDbhdhP2H8Qf31cyya/Qv9p6XQziPfjMYg==} + engines: {node: '>= 20'} dev: true - /@nomicfoundation/edr-linux-x64-musl@0.11.3: - resolution: {integrity: sha512-ergXuIb4nIvmf+TqyiDX5tsE49311DrBky6+jNLgsGDTBaN1GS3OFwFS8I6Ri/GGn6xOaT8sKu3q7/m+WdlFzg==} - engines: {node: '>= 18'} + /@nomicfoundation/edr-linux-x64-musl@0.12.0-next.21: + resolution: {integrity: sha512-FRGJwIPBC0UAtoWHd97bQ3OQwngp3vA4EjwZQqiicCapKoiI9BPt4+eyiZq2eq/K0+I0rHs25hw+dzU0QZL1xg==} + engines: {node: '>= 20'} dev: true - /@nomicfoundation/edr-win32-x64-msvc@0.11.3: - resolution: {integrity: sha512-snvEf+WB3OV0wj2A7kQ+ZQqBquMcrozSLXcdnMdEl7Tmn+KDCbmFKBt3Tk0X3qOU4RKQpLPnTxdM07TJNVtung==} - engines: {node: '>= 18'} + /@nomicfoundation/edr-win32-x64-msvc@0.12.0-next.21: + resolution: {integrity: sha512-rpH/iKqn0Dvbnj+o5tv3CtDNAsA9AnBNHNmEHoJPNnB5rhR7Zw1vVg2MaE1vzCvIONQGKGkArqC+dA7ftsOcpA==} + engines: {node: '>= 20'} dev: true - /@nomicfoundation/edr@0.11.3: - resolution: {integrity: sha512-kqILRkAd455Sd6v8mfP3C1/0tCOynJWY+Ir+k/9Boocu2kObCrsFgG+ZWB7fSBVdd9cPVSNrnhWS+V+PEo637g==} - engines: {node: '>= 18'} + /@nomicfoundation/edr@0.12.0-next.21: + resolution: {integrity: sha512-j4DXqk/b2T1DK3L/YOZtTjwXqr/as4n+eKulu3KGVxyzOv2plZqTv9WpepQSejc0298tk/DBdMVwqzU3sd8CAA==} + engines: {node: '>= 20'} dependencies: - '@nomicfoundation/edr-darwin-arm64': 0.11.3 - '@nomicfoundation/edr-darwin-x64': 0.11.3 - '@nomicfoundation/edr-linux-arm64-gnu': 0.11.3 - '@nomicfoundation/edr-linux-arm64-musl': 0.11.3 - '@nomicfoundation/edr-linux-x64-gnu': 0.11.3 - '@nomicfoundation/edr-linux-x64-musl': 0.11.3 - '@nomicfoundation/edr-win32-x64-msvc': 0.11.3 + '@nomicfoundation/edr-darwin-arm64': 0.12.0-next.21 + '@nomicfoundation/edr-darwin-x64': 0.12.0-next.21 + '@nomicfoundation/edr-linux-arm64-gnu': 0.12.0-next.21 + '@nomicfoundation/edr-linux-arm64-musl': 0.12.0-next.21 + '@nomicfoundation/edr-linux-x64-gnu': 0.12.0-next.21 + '@nomicfoundation/edr-linux-x64-musl': 0.12.0-next.21 + '@nomicfoundation/edr-win32-x64-msvc': 0.12.0-next.21 dev: true - /@nomicfoundation/hardhat-ethers@3.1.1(ethers@5.8.0)(hardhat@2.26.4): - resolution: {integrity: sha512-v/hm2yL7RfTnTShqD0hycgERZSaaj8dtM8pklVFElxwAKUfIpumaXo/lbPqUW5DHgvvG/y440g0g46gWwLlSHQ==} + /@nomicfoundation/hardhat-ethers@3.1.3(ethers@5.8.0)(hardhat@2.28.2): + resolution: {integrity: sha512-208JcDeVIl+7Wu3MhFUUtiA8TJ7r2Rn3Wr+lSx9PfsDTKkbsAsWPY6N6wQ4mtzDv0/pB9nIbJhkjoHe1EsgNsA==} peerDependencies: ethers: ^5.7.2 - hardhat: ^2.26.0 + hardhat: ^2.28.0 dependencies: debug: 4.4.3(supports-color@8.1.1) ethers: 5.8.0 - hardhat: 2.26.4(ts-node@10.9.2)(typescript@5.9.3) + hardhat: 2.28.2(ts-node@10.9.2)(typescript@5.9.3) lodash.isequal: 4.5.0 transitivePeerDependencies: - supports-color @@ -3329,17 +3342,17 @@ packages: '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.2 dev: true - /@nomiclabs/hardhat-ethers@2.2.3(ethers@5.8.0)(hardhat@2.26.4): + /@nomiclabs/hardhat-ethers@2.2.3(ethers@5.8.0)(hardhat@2.28.2): resolution: {integrity: sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==} peerDependencies: ethers: ^5.7.2 hardhat: ^2.0.0 dependencies: ethers: 5.8.0 - hardhat: 2.26.4(ts-node@10.9.2)(typescript@5.9.3) + hardhat: 2.28.2(ts-node@10.9.2)(typescript@5.9.3) dev: true - /@nomiclabs/hardhat-waffle@2.0.6(@nomiclabs/hardhat-ethers@2.2.3)(@types/sinon-chai@3.2.12)(ethereum-waffle@4.0.10)(ethers@5.8.0)(hardhat@2.26.4): + /@nomiclabs/hardhat-waffle@2.0.6(@nomiclabs/hardhat-ethers@2.2.3)(@types/sinon-chai@3.2.12)(ethereum-waffle@4.0.10)(ethers@5.8.0)(hardhat@2.28.2): resolution: {integrity: sha512-+Wz0hwmJGSI17B+BhU/qFRZ1l6/xMW82QGXE/Gi+WTmwgJrQefuBs1lIf7hzQ1hLk6hpkvb/zwcNkpVKRYTQYg==} peerDependencies: '@nomiclabs/hardhat-ethers': ^2.0.0 @@ -3348,11 +3361,11 @@ packages: ethers: ^5.7.2 hardhat: ^2.0.0 dependencies: - '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.8.0)(hardhat@2.26.4) + '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.8.0)(hardhat@2.28.2) '@types/sinon-chai': 3.2.12 ethereum-waffle: 4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0)(ethers@5.8.0)(typescript@5.9.3) ethers: 5.8.0 - hardhat: 2.26.4(ts-node@10.9.2)(typescript@5.9.3) + hardhat: 2.28.2(ts-node@10.9.2)(typescript@5.9.3) dev: true /@openzeppelin/contracts-upgradeable@4.7.3: @@ -3379,6 +3392,16 @@ packages: resolution: {integrity: sha512-eCYgWnLg6WO+X52I16TZt8uEjbtdkgLC0SUX/xnAksjjrQI4Xfn4iBRoI5j55dmlOhDv1Y7BoR3cU7e3WWhC6A==} dev: true + /@peculiar/asn1-schema@2.6.0: + resolution: {integrity: sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==} + requiresBuild: true + dependencies: + asn1js: 3.0.7 + pvtsutils: 1.3.6 + tslib: 2.8.1 + dev: true + optional: true + /@pkgr/core@0.2.9: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -3510,19 +3533,23 @@ packages: resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} dev: true - /@rushstack/eslint-patch@1.14.1: - resolution: {integrity: sha512-jGTk8UD/RdjsNZW8qq10r0RBvxL8OWtoT+kImlzPDFilmozzM+9QmIJsmze9UiSBrFU45ZxhTYBypn9q9z/VfQ==} + /@rushstack/eslint-patch@1.15.0: + resolution: {integrity: sha512-ojSshQPKwVvSMR8yT2L/QtUkV5SXi/IfDiJ4/8d6UbTPjiHVmxZzUAzGD8Tzks1b9+qQkZa0isUOvYObedITaw==} dev: true - /@safe-global/api-kit@1.3.1: - resolution: {integrity: sha512-JKvCNs8p+42+N8pV2MIqoXlBLckTe5CKboVT7t9mTluuA66i5W8+Kr+B5j9D//EIU5vO7iSOOIYnJuA2ck4XRQ==} + /@safe-global/api-kit@4.0.1(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-pNtDLgMHlCSr4Hwwe6jsnvMheAu2SZCTqjYlnNe4cKH2pSKINVRTiILoeJ0wOpixrMCH4NlgJ+9N3QruRNcCpQ==} dependencies: - '@ethersproject/abstract-signer': 5.8.0 - '@safe-global/safe-core-sdk-types': 2.3.0 + '@safe-global/protocol-kit': 6.1.2(typescript@5.9.3)(zod@3.25.76) + '@safe-global/types-kit': 3.0.0(typescript@5.9.3)(zod@3.25.76) node-fetch: 2.7.0 + viem: 2.43.5(typescript@5.9.3)(zod@3.25.76) transitivePeerDependencies: + - bufferutil - encoding - - supports-color + - typescript + - utf-8-validate + - zod dev: true /@safe-global/protocol-kit@1.3.0(ethers@5.8.0): @@ -3531,7 +3558,7 @@ packages: '@ethersproject/address': 5.8.0 '@ethersproject/bignumber': 5.8.0 '@ethersproject/solidity': 5.8.0 - '@safe-global/safe-deployments': 1.37.47 + '@safe-global/safe-deployments': 1.37.49 ethereumjs-util: 7.1.5 semver: 7.7.3 web3: 1.10.4 @@ -3546,13 +3573,32 @@ packages: - utf-8-validate dev: true + /@safe-global/protocol-kit@6.1.2(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-cTpPdUAS2AMfGCkD1T601rQNjT0rtMQLA2TH7L/C+iFPAC6WrrDFop2B9lzeHjczlnVzrRpfFe4cL1bLrJ9NZw==} + dependencies: + '@safe-global/safe-deployments': 1.37.49 + '@safe-global/safe-modules-deployments': 2.2.21 + '@safe-global/types-kit': 3.0.0(typescript@5.9.3)(zod@3.25.76) + abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76) + semver: 7.7.3 + viem: 2.43.5(typescript@5.9.3)(zod@3.25.76) + optionalDependencies: + '@noble/curves': 1.9.7 + '@peculiar/asn1-schema': 2.6.0 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + dev: true + /@safe-global/safe-core-sdk-types@2.3.0: resolution: {integrity: sha512-dU0KkDV1KJNf11ajbUjWiSi4ygdyWfhk1M50lTJWUdCn1/2Bsb/hICM8LoEk6DCoFumxaoCet02SmYakXsW2CA==} deprecated: 'WARNING: This project has been renamed to @safe-global/types-kit. Please, migrate from @safe-global/safe-core-sdk-types@5.1.0 to @safe-global/types-kit@1.0.0.' dependencies: '@ethersproject/bignumber': 5.8.0 '@ethersproject/contracts': 5.8.0 - '@safe-global/safe-deployments': 1.37.47 + '@safe-global/safe-deployments': 1.37.49 web3-core: 1.10.4 web3-utils: 1.10.4 transitivePeerDependencies: @@ -3560,12 +3606,25 @@ packages: - supports-color dev: true - /@safe-global/safe-deployments@1.37.47: - resolution: {integrity: sha512-abxu9nmvjfDahCIFdrHw4ENZ1CD60z/bgrv5cV3+sygADU1vuh96jFumebo+6PR/Q5qz5glrQuLwEtZ8K/lvJQ==} + /@safe-global/safe-deployments@1.37.49: + resolution: {integrity: sha512-132QgqMY1/HktXqmda/uPp5b+73UXTgKRB00Xgc1kduFqceSw/ZyF1Q9jJjbND9q91hhapnXhYKWN2/HiWkRcg==} dependencies: semver: 7.7.3 dev: true + /@safe-global/safe-modules-deployments@2.2.21: + resolution: {integrity: sha512-fveOlRv0ccwsuaZjP1u7ZbXrwCyqMTYYiqETOGo8NdzTaceRUyR9TNzagSWovOSuHPVyUGJ9lnsxizikt/+PiQ==} + dev: true + + /@safe-global/types-kit@3.0.0(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-AZWIlR5MguDPdGiOj7BB4JQPY2afqmWQww1mu8m8Oi16HHBW99G01kFOu4NEHBwEU1cgwWOMY19hsI5KyL4W2w==} + dependencies: + abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76) + transitivePeerDependencies: + - typescript + - zod + dev: true + /@scure/base@1.1.9: resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} dev: true @@ -3578,7 +3637,7 @@ packages: resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} dependencies: '@noble/hashes': 1.2.0 - '@noble/secp256k1': 1.7.1 + '@noble/secp256k1': 1.7.2 '@scure/base': 1.1.9 dev: true @@ -3593,7 +3652,7 @@ packages: /@scure/bip32@1.7.0: resolution: {integrity: sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==} dependencies: - '@noble/curves': 1.9.7 + '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 dev: true @@ -3700,8 +3759,8 @@ packages: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true - /@sinclair/typebox@0.34.41: - resolution: {integrity: sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==} + /@sinclair/typebox@0.34.47: + resolution: {integrity: sha512-ZGIBQ+XDvO5JQku9wmwtabcVTHJsgSWAHYtVuM9pBNNR5E88v6Jcj/llpmsjivig5X8A8HHOb4/mbEKPS5EvAw==} dev: true /@sindresorhus/is@4.6.0: @@ -3729,7 +3788,7 @@ packages: /@so-ric/colorspace@1.1.6: resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} dependencies: - color: 5.0.2 + color: 5.0.3 text-hex: 1.0.0 dev: true @@ -3987,9 +4046,9 @@ packages: bs58: 4.0.1 buffer: 6.0.3 fast-stable-stringify: 1.0.0 - jayson: 4.2.0 + jayson: 4.3.0 node-fetch: 2.7.0 - rpc-websockets: 9.2.0 + rpc-websockets: 9.3.2 superstruct: 2.0.2 transitivePeerDependencies: - bufferutil @@ -4023,8 +4082,8 @@ packages: resolution: {integrity: sha512-bprE8+K5V+DPX7q2e2K57ImqNBdfGHDIWaGI5xHxZoxbKOuQZn4wzPiUxOAHnsUr3w3xHrWXwN7gnG/iIuEMIg==} dev: true - /@swc/core-darwin-arm64@1.14.0: - resolution: {integrity: sha512-uHPC8rlCt04nvYNczWzKVdgnRhxCa3ndKTBBbBpResOZsRmiwRAvByIGh599j+Oo6Z5eyTPrgY+XfJzVmXnN7Q==} + /@swc/core-darwin-arm64@1.15.8: + resolution: {integrity: sha512-M9cK5GwyWWRkRGwwCbREuj6r8jKdES/haCZ3Xckgkl8MUQJZA3XB7IXXK1IXRNeLjg6m7cnoMICpXv1v1hlJOg==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -4032,8 +4091,8 @@ packages: dev: true optional: true - /@swc/core-darwin-x64@1.14.0: - resolution: {integrity: sha512-2SHrlpl68vtePRknv9shvM9YKKg7B9T13tcTg9aFCwR318QTYo+FzsKGmQSv9ox/Ua0Q2/5y2BNjieffJoo4nA==} + /@swc/core-darwin-x64@1.15.8: + resolution: {integrity: sha512-j47DasuOvXl80sKJHSi2X25l44CMc3VDhlJwA7oewC1nV1VsSzwX+KOwE5tLnfORvVJJyeiXgJORNYg4jeIjYQ==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -4041,8 +4100,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf@1.14.0: - resolution: {integrity: sha512-SMH8zn01dxt809svetnxpeg/jWdpi6dqHKO3Eb11u4OzU2PK7I5uKS6gf2hx5LlTbcJMFKULZiVwjlQLe8eqtg==} + /@swc/core-linux-arm-gnueabihf@1.15.8: + resolution: {integrity: sha512-siAzDENu2rUbwr9+fayWa26r5A9fol1iORG53HWxQL1J8ym4k7xt9eME0dMPXlYZDytK5r9sW8zEA10F2U3Xwg==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -4050,8 +4109,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu@1.14.0: - resolution: {integrity: sha512-q2JRu2D8LVqGeHkmpVCljVNltG0tB4o4eYg+dElFwCS8l2Mnt9qurMCxIeo9mgoqz0ax+k7jWtIRHktnVCbjvQ==} + /@swc/core-linux-arm64-gnu@1.15.8: + resolution: {integrity: sha512-o+1y5u6k2FfPYbTRUPvurwzNt5qd0NTumCTFscCNuBksycloXY16J8L+SMW5QRX59n4Hp9EmFa3vpvNHRVv1+Q==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -4059,8 +4118,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl@1.14.0: - resolution: {integrity: sha512-uofpVoPCEUjYIv454ZEZ3sLgMD17nIwlz2z7bsn7rl301Kt/01umFA7MscUovFfAK2IRGck6XB+uulMu6aFhKQ==} + /@swc/core-linux-arm64-musl@1.15.8: + resolution: {integrity: sha512-koiCqL09EwOP1S2RShCI7NbsQuG6r2brTqUYE7pV7kZm9O17wZ0LSz22m6gVibpwEnw8jI3IE1yYsQTVpluALw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -4068,8 +4127,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu@1.14.0: - resolution: {integrity: sha512-quTTx1Olm05fBfv66DEBuOsOgqdypnZ/1Bh3yGXWY7ANLFeeRpCDZpljD9BSjdsNdPOlwJmEUZXMHtGm3v1TZQ==} + /@swc/core-linux-x64-gnu@1.15.8: + resolution: {integrity: sha512-4p6lOMU3bC+Vd5ARtKJ/FxpIC5G8v3XLoPEZ5s7mLR8h7411HWC/LmTXDHcrSXRC55zvAVia1eldy6zDLz8iFQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -4077,8 +4136,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl@1.14.0: - resolution: {integrity: sha512-caaNAu+aIqT8seLtCf08i8C3/UC5ttQujUjejhMcuS1/LoCKtNiUs4VekJd2UGt+pyuuSrQ6dKl8CbCfWvWeXw==} + /@swc/core-linux-x64-musl@1.15.8: + resolution: {integrity: sha512-z3XBnbrZAL+6xDGAhJoN4lOueIxC/8rGrJ9tg+fEaeqLEuAtHSW2QHDHxDwkxZMjuF/pZ6MUTjHjbp8wLbuRLA==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -4086,8 +4145,8 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc@1.14.0: - resolution: {integrity: sha512-EeW3jFlT3YNckJ6V/JnTfGcX7UHGyh6/AiCPopZ1HNaGiXVCKHPpVQZicmtyr/UpqxCXLrTgjHOvyMke7YN26A==} + /@swc/core-win32-arm64-msvc@1.15.8: + resolution: {integrity: sha512-djQPJ9Rh9vP8GTS/Df3hcc6XP6xnG5c8qsngWId/BLA9oX6C7UzCPAn74BG/wGb9a6j4w3RINuoaieJB3t+7iQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -4095,8 +4154,8 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc@1.14.0: - resolution: {integrity: sha512-dPai3KUIcihV5hfoO4QNQF5HAaw8+2bT7dvi8E5zLtecW2SfL3mUZipzampXq5FHll0RSCLzlrXnSx+dBRZIIQ==} + /@swc/core-win32-ia32-msvc@1.15.8: + resolution: {integrity: sha512-/wfAgxORg2VBaUoFdytcVBVCgf1isWZIEXB9MZEUty4wwK93M/PxAkjifOho9RN3WrM3inPLabICRCEgdHpKKQ==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -4104,8 +4163,8 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc@1.14.0: - resolution: {integrity: sha512-nm+JajGrTqUA6sEHdghDlHMNfH1WKSiuvljhdmBACW4ta4LC3gKurX2qZuiBARvPkephW9V/i5S8QPY1PzFEqg==} + /@swc/core-win32-x64-msvc@1.15.8: + resolution: {integrity: sha512-GpMePrh9Sl4d61o4KAHOOv5is5+zt6BEXCOCgs/H0FLGeii7j9bWDE8ExvKFy2GRRZVNR1ugsnzaGWHKM6kuzA==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -4113,8 +4172,8 @@ packages: dev: true optional: true - /@swc/core@1.14.0: - resolution: {integrity: sha512-oExhY90bes5pDTVrei0xlMVosTxwd/NMafIpqsC4dMbRYZ5KB981l/CX8tMnGsagTplj/RcG9BeRYmV6/J5m3w==} + /@swc/core@1.15.8: + resolution: {integrity: sha512-T8keoJjXaSUoVBCIjgL6wAnhADIb09GOELzKg10CjNg+vLX48P93SME6jTfte9MZIm5m+Il57H3rTSk/0kzDUw==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -4126,36 +4185,36 @@ packages: '@swc/counter': 0.1.3 '@swc/types': 0.1.25 optionalDependencies: - '@swc/core-darwin-arm64': 1.14.0 - '@swc/core-darwin-x64': 1.14.0 - '@swc/core-linux-arm-gnueabihf': 1.14.0 - '@swc/core-linux-arm64-gnu': 1.14.0 - '@swc/core-linux-arm64-musl': 1.14.0 - '@swc/core-linux-x64-gnu': 1.14.0 - '@swc/core-linux-x64-musl': 1.14.0 - '@swc/core-win32-arm64-msvc': 1.14.0 - '@swc/core-win32-ia32-msvc': 1.14.0 - '@swc/core-win32-x64-msvc': 1.14.0 + '@swc/core-darwin-arm64': 1.15.8 + '@swc/core-darwin-x64': 1.15.8 + '@swc/core-linux-arm-gnueabihf': 1.15.8 + '@swc/core-linux-arm64-gnu': 1.15.8 + '@swc/core-linux-arm64-musl': 1.15.8 + '@swc/core-linux-x64-gnu': 1.15.8 + '@swc/core-linux-x64-musl': 1.15.8 + '@swc/core-win32-arm64-msvc': 1.15.8 + '@swc/core-win32-ia32-msvc': 1.15.8 + '@swc/core-win32-x64-msvc': 1.15.8 dev: true /@swc/counter@0.1.3: resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} dev: true - /@swc/helpers@0.5.17: - resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + /@swc/helpers@0.5.18: + resolution: {integrity: sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==} dependencies: tslib: 2.8.1 dev: true - /@swc/jest@0.2.39(@swc/core@1.14.0): + /@swc/jest@0.2.39(@swc/core@1.15.8): resolution: {integrity: sha512-eyokjOwYd0Q8RnMHri+8/FS1HIrIUKK/sRrFp8c1dThUOfNeCWbLmBP1P5VsKdvmkd25JaH+OKYwEYiAYg9YAA==} engines: {npm: '>= 7.0.0'} peerDependencies: '@swc/core': '*' dependencies: '@jest/create-cache-key-function': 30.2.0 - '@swc/core': 1.14.0 + '@swc/core': 1.15.8 '@swc/counter': 0.1.3 jsonc-parser: 3.3.1 dev: true @@ -4211,7 +4270,7 @@ packages: dependencies: '@ton/core': 0.59.1(@ton/crypto@3.3.0) '@ton/crypto': 3.3.0 - axios: 1.13.1 + axios: 1.13.2 dataloader: 2.2.3 symbol.inspect: 1.0.1 teslabot: 1.5.0 @@ -4234,8 +4293,8 @@ packages: dev: true optional: true - /@tsconfig/node10@1.0.11: - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + /@tsconfig/node10@1.0.12: + resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} dev: true /@tsconfig/node12@1.0.11: @@ -4379,6 +4438,7 @@ packages: /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + requiresBuild: true dev: true /@types/keyv@3.1.4: @@ -4413,7 +4473,7 @@ packages: resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} dependencies: '@types/node': 18.18.14 - form-data: 4.0.4 + form-data: 4.0.5 dev: true /@types/node@11.11.6: @@ -4464,11 +4524,11 @@ packages: resolution: {integrity: sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==} dependencies: '@types/chai': 4.3.20 - '@types/sinon': 17.0.4 + '@types/sinon': 21.0.0 dev: true - /@types/sinon@17.0.4: - resolution: {integrity: sha512-RHnIrhfPO3+tJT0s7cFaXGZvsL4bbR3/k7z3P312qMS4JaS2Tk+KiwiLx1S0rQ56ERj00u1/BtdyVd0FY+Pdew==} + /@types/sinon@21.0.0: + resolution: {integrity: sha512-+oHKZ0lTI+WVLxx1IbJDNmReQaIsQJjN2e7UUrJHEeByG7bFeKJYsv1E75JxTQ9QKJDp21bAa/0W2Xo4srsDnw==} dependencies: '@types/sinonjs__fake-timers': 15.0.1 dev: true @@ -4509,8 +4569,8 @@ packages: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} dev: true - /@types/yargs@17.0.34: - resolution: {integrity: sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A==} + /@types/yargs@17.0.35: + resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} dependencies: '@types/yargs-parser': 21.0.3 dev: true @@ -4662,7 +4722,7 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.7.1 '@typescript-eslint/scope-manager': 5.62.0 @@ -4682,7 +4742,7 @@ packages: peerDependencies: eslint: ^8.56.0 dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.9.3) @@ -4866,6 +4926,21 @@ packages: dev: true optional: true + /abitype@1.2.3(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.9.3 + zod: 3.25.76 + dev: true + /abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -4883,7 +4958,7 @@ packages: deprecated: Superseded by abstract-level (https://github.com/Level/community#faq) dependencies: buffer: 5.7.1 - immediate: 3.3.0 + immediate: 3.2.3 level-concat-iterator: 2.0.1 level-supports: 1.0.1 xtend: 4.0.2 @@ -5050,7 +5125,7 @@ packages: engines: {node: '>=20.0.0'} deprecated: Please update to the newer '@aptos-labs/ts-sdk'. 'aptos' is deprecated dependencies: - '@aptos-labs/aptos-client': 2.0.0(got@11.8.6) + '@aptos-labs/aptos-client': 2.1.0(got@11.8.6) '@noble/hashes': 1.3.3 '@scure/bip39': 1.2.1 eventemitter3: 5.0.1 @@ -5102,7 +5177,7 @@ packages: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 is-string: 1.1.1 @@ -5121,7 +5196,7 @@ packages: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 @@ -5133,7 +5208,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-shim-unscopables: 1.1.0 dev: true @@ -5143,7 +5218,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-shim-unscopables: 1.1.0 dev: true @@ -5154,18 +5229,34 @@ packages: array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 dev: true + /arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true + /asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} dependencies: safer-buffer: 2.1.2 dev: true + /asn1js@3.0.7: + resolution: {integrity: sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==} + engines: {node: '>=12.0.0'} + requiresBuild: true + dependencies: + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + dev: true + optional: true + /assert-plus@1.0.0: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} @@ -5262,11 +5353,11 @@ packages: - debug dev: true - /axios@1.13.1: - resolution: {integrity: sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw==} + /axios@1.13.2: + resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} dependencies: follow-redirects: 1.15.11(debug@4.4.3) - form-data: 4.0.4 + form-data: 4.0.5 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -5369,8 +5460,8 @@ packages: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true - /baseline-browser-mapping@2.8.21: - resolution: {integrity: sha512-JU0h5APyQNsHOlAM7HnQnPToSDQoEBZqzu/YBlqDnEeymPnZDREeXJA3KBMQee+dKteAxZ2AtvQEvVYdZf241Q==} + /baseline-browser-mapping@2.9.12: + resolution: {integrity: sha512-Mij6Lij93pTAIsSYy5cyBQ975Qh9uLEc5rwGTpomiZeXZL9yIS6uORJakb3ScHgfs0serMMfIbXzokPMuEiRyw==} hasBin: true dev: true @@ -5459,8 +5550,8 @@ packages: resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} dev: true - /body-parser@1.20.3: - resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + /body-parser@1.20.4: + resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 @@ -5468,11 +5559,11 @@ packages: debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 - http-errors: 2.0.0 + http-errors: 2.0.1 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.13.0 - raw-body: 2.5.2 + qs: 6.14.1 + raw-body: 2.5.3 type-is: 1.6.18 unpipe: 1.0.0 transitivePeerDependencies: @@ -5544,16 +5635,16 @@ packages: safe-buffer: 5.2.1 dev: true - /browserslist@4.27.0: - resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==} + /browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - baseline-browser-mapping: 2.8.21 - caniuse-lite: 1.0.30001751 - electron-to-chromium: 1.5.243 + baseline-browser-mapping: 2.9.12 + caniuse-lite: 1.0.30001762 + electron-to-chromium: 1.5.267 node-releases: 2.0.27 - update-browserslist-db: 1.1.4(browserslist@4.27.0) + update-browserslist-db: 1.2.3(browserslist@4.28.1) dev: true /bs58@4.0.1: @@ -5641,8 +5732,8 @@ packages: dev: true optional: true - /bufferutil@4.0.9: - resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + /bufferutil@4.1.0: + resolution: {integrity: sha512-ZMANVnAixE6AWWnPzlW2KpUrxhm9woycYvPOo67jWHyFowASTEd9s+QN1EIMsSDtwhIxN4sWE1jotpuDUIgyIw==} engines: {node: '>=6.14.2'} requiresBuild: true dependencies: @@ -5683,7 +5774,7 @@ packages: http-cache-semantics: 4.2.0 keyv: 4.5.4 mimic-response: 4.0.0 - normalize-url: 8.1.0 + normalize-url: 8.1.1 responselike: 3.0.0 dev: true @@ -5746,8 +5837,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001751: - resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} + /caniuse-lite@1.0.30001762: + resolution: {integrity: sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==} dev: true /caseless@0.12.0: @@ -5963,11 +6054,11 @@ packages: color-name: 1.1.4 dev: true - /color-convert@3.1.2: - resolution: {integrity: sha512-UNqkvCDXstVck3kdowtOTWROIJQwafjOfXSmddoDrXo4cewMKmusCeF22Q24zvjR8nwWib/3S/dfyzPItPEiJg==} + /color-convert@3.1.3: + resolution: {integrity: sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==} engines: {node: '>=14.6'} dependencies: - color-name: 2.0.2 + color-name: 2.1.0 dev: true /color-name@1.1.3: @@ -5978,24 +6069,24 @@ packages: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true - /color-name@2.0.2: - resolution: {integrity: sha512-9vEt7gE16EW7Eu7pvZnR0abW9z6ufzhXxGXZEVU9IqPdlsUiMwJeJfRtq0zePUmnbHGT9zajca7mX8zgoayo4A==} + /color-name@2.1.0: + resolution: {integrity: sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==} engines: {node: '>=12.20'} dev: true - /color-string@2.1.2: - resolution: {integrity: sha512-RxmjYxbWemV9gKu4zPgiZagUxbH3RQpEIO77XoSSX0ivgABDZ+h8Zuash/EMFLTI4N9QgFPOJ6JQpPZKFxa+dA==} + /color-string@2.1.4: + resolution: {integrity: sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==} engines: {node: '>=18'} dependencies: - color-name: 2.0.2 + color-name: 2.1.0 dev: true - /color@5.0.2: - resolution: {integrity: sha512-e2hz5BzbUPcYlIRHo8ieAhYgoajrJr+hWoceg6E345TPsATMUKqDgzt8fSXZJJbxfpiPzkWyphz8yn8At7q3fA==} + /color@5.0.3: + resolution: {integrity: sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==} engines: {node: '>=18'} dependencies: - color-convert: 3.1.2 - color-string: 2.1.2 + color-convert: 3.1.3 + color-string: 2.1.4 dev: true /combined-stream@1.0.8: @@ -6107,8 +6198,8 @@ packages: engines: {node: '>= 4'} dev: true - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + /cookie-signature@1.0.7: + resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} dev: true /cookie@0.4.2: @@ -6116,13 +6207,13 @@ packages: engines: {node: '>= 0.6'} dev: true - /cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + /cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} dev: true - /core-js-pure@3.46.0: - resolution: {integrity: sha512-NMCW30bHNofuhwLhYPt66OLOKTMbOhgTTatKVbaQC3KRHpTCiRIBYvtshr+NBYSnBxwAFhjW/RfJ0XbIjS16rw==} + /core-js-pure@3.47.0: + resolution: {integrity: sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==} requiresBuild: true dev: true @@ -6152,7 +6243,7 @@ packages: optional: true dependencies: import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 parse-json: 5.2.0 path-type: 4.0.0 typescript: 5.9.3 @@ -6284,8 +6375,8 @@ packages: resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} dev: true - /dayjs@1.11.18: - resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==} + /dayjs@1.11.19: + resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==} dev: true /debug@2.6.9: @@ -6352,8 +6443,8 @@ packages: mimic-response: 3.1.0 dev: true - /dedent@1.7.0: - resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} + /dedent@1.7.1: + resolution: {integrity: sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -6454,6 +6545,11 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true + /diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + dev: true + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -6528,8 +6624,8 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /electron-to-chromium@1.5.243: - resolution: {integrity: sha512-ZCphxFW3Q1TVhcgS9blfut1PX8lusVi2SvXQgmEEnK4TCmE1JhH2JkjJN+DNt0pJJwfBri5AROBnz2b/C+YU9g==} + /electron-to-chromium@1.5.267: + resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} dev: true /elliptic@6.6.1: @@ -6566,11 +6662,6 @@ packages: resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} dev: true - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: true - /encodeurl@2.0.0: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} @@ -6619,8 +6710,8 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + /es-abstract@1.24.1: + resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.2 @@ -6888,8 +6979,8 @@ packages: dependencies: '@mdn/browser-compat-data': 5.7.6 ast-metadata-inferer: 0.8.1 - browserslist: 4.27.0 - caniuse-lite: 1.0.30001751 + browserslist: 4.28.1 + caniuse-lite: 1.0.30001762 eslint: 8.57.1 find-up: 5.0.0 lodash.memoize: 4.1.2 @@ -6946,7 +7037,7 @@ packages: - typescript dev: true - /eslint-plugin-prettier@5.5.4(eslint-config-prettier@9.1.2)(eslint@8.57.1)(prettier@3.6.2): + /eslint-plugin-prettier@5.5.4(eslint-config-prettier@9.1.2)(eslint@8.57.1)(prettier@3.7.4): resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -6962,8 +7053,8 @@ packages: dependencies: eslint: 8.57.1 eslint-config-prettier: 9.1.2(eslint@8.57.1) - prettier: 3.6.2 - prettier-linter-helpers: 1.0.0 + prettier: 3.7.4 + prettier-linter-helpers: 1.0.1 synckit: 0.11.11 dev: true @@ -7014,7 +7105,7 @@ packages: deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) '@eslint-community/regexpp': 4.12.2 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.1 @@ -7031,7 +7122,7 @@ packages: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.6.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -7043,7 +7134,7 @@ packages: imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-yaml: 4.1.0 + js-yaml: 4.1.1 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 @@ -7081,8 +7172,8 @@ packages: hasBin: true dev: true - /esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + /esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 @@ -7385,38 +7476,38 @@ packages: resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} dev: true - /express@4.21.2: - resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + /express@4.22.1: + resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.3 + body-parser: 1.20.4 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.7.1 - cookie-signature: 1.0.6 + cookie: 0.7.2 + cookie-signature: 1.0.7 debug: 2.6.9 depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.3.1 + finalhandler: 1.3.2 fresh: 0.5.2 - http-errors: 2.0.0 + http-errors: 2.0.1 merge-descriptors: 1.0.3 methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 path-to-regexp: 0.1.12 proxy-addr: 2.0.7 - qs: 6.13.0 + qs: 6.14.1 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.19.0 - serve-static: 1.16.2 + send: 0.19.2 + serve-static: 1.16.3 setprototypeof: 1.2.0 - statuses: 2.0.1 + statuses: 2.0.2 type-is: 1.6.18 utils-merge: 1.0.1 vary: 1.1.2 @@ -7488,8 +7579,8 @@ packages: resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} dev: true - /fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + /fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} dependencies: reusify: 1.1.0 dev: true @@ -7534,8 +7625,8 @@ packages: to-regex-range: 5.0.1 dev: true - /finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + /finalhandler@1.3.2: + resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} engines: {node: '>= 0.8'} dependencies: debug: 2.6.9 @@ -7543,7 +7634,7 @@ packages: escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 - statuses: 2.0.1 + statuses: 2.0.2 unpipe: 1.0.0 transitivePeerDependencies: - supports-color @@ -7649,8 +7740,8 @@ packages: mime-types: 2.1.35 dev: true - /form-data@4.0.4: - resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + /form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} dependencies: asynckit: 0.4.0 @@ -7915,7 +8006,7 @@ packages: /global@4.4.0: resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} dependencies: - min-document: 2.19.0 + min-document: 2.19.2 process: 0.11.10 dev: true @@ -8008,16 +8099,16 @@ packages: responselike: 3.0.0 dev: true - /gql.tada@1.8.13(graphql@16.11.0)(typescript@5.9.3): - resolution: {integrity: sha512-fYoorairdPgxtE7Sf1X9/6bSN9Kt2+PN8KLg3hcF8972qFnawwUgs1OLVU8efZMHwL7EBHhhKBhrsGPlOs2lZQ==} + /gql.tada@1.9.0(graphql@16.12.0)(typescript@5.9.3): + resolution: {integrity: sha512-1LMiA46dRs5oF7Qev6vMU32gmiNvM3+3nHoQZA9K9j2xQzH8xOAWnnJrLSbZOFHTSdFxqn86TL6beo1/7ja/aA==} hasBin: true peerDependencies: typescript: ^5.0.0 dependencies: - '@0no-co/graphql.web': 1.2.0(graphql@16.11.0) - '@0no-co/graphqlsp': 1.15.0(graphql@16.11.0)(typescript@5.9.3) - '@gql.tada/cli-utils': 1.7.1(@0no-co/graphqlsp@1.15.0)(graphql@16.11.0)(typescript@5.9.3) - '@gql.tada/internal': 1.0.8(graphql@16.11.0)(typescript@5.9.3) + '@0no-co/graphql.web': 1.2.0(graphql@16.12.0) + '@0no-co/graphqlsp': 1.15.2(graphql@16.12.0)(typescript@5.9.3) + '@gql.tada/cli-utils': 1.7.2(@0no-co/graphqlsp@1.15.2)(graphql@16.12.0)(typescript@5.9.3) + '@gql.tada/internal': 1.0.8(graphql@16.12.0)(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - '@gql.tada/svelte-support' @@ -8045,8 +8136,8 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /graphql@16.11.0: - resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} + /graphql@16.12.0: + resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} dev: true @@ -8064,26 +8155,26 @@ packages: har-schema: 2.0.0 dev: true - /hardhat-contract-sizer@2.10.1(hardhat@2.26.4): + /hardhat-contract-sizer@2.10.1(hardhat@2.28.2): resolution: {integrity: sha512-/PPQQbUMgW6ERzk8M0/DA8/v2TEM9xRRAnF9qKPNMYF6FX5DFWcnxBsQvtp8uBz+vy7rmLyV9Elti2wmmhgkbg==} peerDependencies: hardhat: ^2.0.0 dependencies: chalk: 4.1.2 cli-table3: 0.6.5 - hardhat: 2.26.4(ts-node@10.9.2)(typescript@5.9.3) + hardhat: 2.28.2(ts-node@10.9.2)(typescript@5.9.3) strip-ansi: 6.0.1 dev: true - /hardhat-deploy-ethers@0.4.2(@nomicfoundation/hardhat-ethers@3.1.1)(hardhat-deploy@0.12.4)(hardhat@2.26.4): + /hardhat-deploy-ethers@0.4.2(@nomicfoundation/hardhat-ethers@3.1.3)(hardhat-deploy@0.12.4)(hardhat@2.28.2): resolution: {integrity: sha512-AskNH/XRYYYqPT94MvO5s1yMi+/QvoNjS4oU5VcVqfDU99kgpGETl+uIYHIrSXtH5sy7J6gyVjpRMf4x0tjLSQ==} peerDependencies: '@nomicfoundation/hardhat-ethers': ^3.0.2 hardhat: ^2.16.0 hardhat-deploy: ^0.12.1 dependencies: - '@nomicfoundation/hardhat-ethers': 3.1.1(ethers@5.8.0)(hardhat@2.26.4) - hardhat: 2.26.4(ts-node@10.9.2)(typescript@5.9.3) + '@nomicfoundation/hardhat-ethers': 3.1.3(ethers@5.8.0)(hardhat@2.28.2) + hardhat: 2.28.2(ts-node@10.9.2)(typescript@5.9.3) hardhat-deploy: 0.12.4 dev: true @@ -8108,20 +8199,20 @@ packages: debug: 4.4.3(supports-color@8.1.1) enquirer: 2.4.1 ethers: 5.8.0 - form-data: 4.0.4 + form-data: 4.0.5 fs-extra: 10.1.0 match-all: 1.2.7 murmur-128: 0.2.1 - qs: 6.14.0 - zksync-ethers: 5.11.0(ethers@5.8.0) + qs: 6.14.1 + zksync-ethers: 5.11.1(ethers@5.8.0) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: true - /hardhat@2.26.4(ts-node@10.9.2)(typescript@5.9.3): - resolution: {integrity: sha512-2FMv6mmgR2ryefD3k23vRBYMqjdmZw0EhyXwu18Sz6BVRUAon9h8CjcEtVH4U3fHWPqZ4Pqr81h7s6p0RYAvLg==} + /hardhat@2.28.2(ts-node@10.9.2)(typescript@5.9.3): + resolution: {integrity: sha512-CPaMFgCU5+sLO0Kos82xWLGC9YldRRBRydj5JT4v00+ShAg4C6Up2jAgP9+dTPVkMOMTfQc05mOo2JreMX5z3A==} hasBin: true peerDependencies: ts-node: '*' @@ -8134,7 +8225,7 @@ packages: dependencies: '@ethereumjs/util': 9.1.0 '@ethersproject/abi': 5.8.0 - '@nomicfoundation/edr': 0.11.3 + '@nomicfoundation/edr': 0.12.0-next.21 '@nomicfoundation/solidity-analyzer': 0.1.2 '@sentry/node': 5.30.0 adm-zip: 0.4.16 @@ -8160,14 +8251,14 @@ packages: mocha: 10.8.2 p-map: 4.0.0 picocolors: 1.1.1 - raw-body: 2.5.2 + raw-body: 2.5.3 resolve: 1.17.0 semver: 6.3.1 solc: 0.8.26(debug@4.4.3) source-map-support: 0.5.21 stacktrace-parser: 0.1.11 tinyglobby: 0.2.15 - ts-node: 10.9.2(@swc/core@1.14.0)(@types/node@18.18.14)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.8)(@types/node@18.18.14)(typescript@5.9.3) tsort: 0.0.1 typescript: 5.9.3 undici: 5.29.0 @@ -8268,14 +8359,14 @@ packages: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} dev: true - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + /http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} dependencies: depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 - statuses: 2.0.1 + statuses: 2.0.2 toidentifier: 1.0.1 dev: true @@ -8815,6 +8906,14 @@ packages: ws: 7.5.10 dev: true + /isows@1.0.7(ws@8.18.3): + resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.18.3 + dev: true + /isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} dev: true @@ -8878,8 +8977,8 @@ packages: istanbul-lib-report: 3.0.1 dev: true - /jayson@4.2.0: - resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==} + /jayson@4.3.0: + resolution: {integrity: sha512-AauzHcUcqs8OBnCHOkJY280VaTiCm57AbuO7lqzcw7JapGj50BisE3xhksye4zlTSR1+1tAz67wLTl8tEH1obQ==} engines: {node: '>=8'} hasBin: true dependencies: @@ -8920,7 +9019,7 @@ packages: '@types/node': 18.18.14 chalk: 4.1.2 co: 4.6.0 - dedent: 1.7.0 + dedent: 1.7.1 is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -9001,7 +9100,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@swc/core@1.14.0)(@types/node@18.18.14)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.8)(@types/node@18.18.14)(typescript@5.9.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -9332,16 +9431,16 @@ packages: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + /js-yaml@3.14.2: + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 dev: true - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + /js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true dependencies: argparse: 2.0.1 @@ -9404,6 +9503,7 @@ packages: /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true + requiresBuild: true dependencies: minimist: 1.2.8 dev: true @@ -9928,8 +10028,8 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /min-document@2.19.0: - resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + /min-document@2.19.2: + resolution: {integrity: sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A==} dependencies: dom-walk: 0.1.2 dev: true @@ -10026,7 +10126,7 @@ packages: find-up: 5.0.0 glob: 8.1.0 he: 1.2.0 - js-yaml: 4.1.0 + js-yaml: 4.1.1 log-symbols: 4.1.0 minimatch: 5.1.6 ms: 2.1.3 @@ -10187,8 +10287,8 @@ packages: engines: {node: '>=10'} dev: true - /normalize-url@8.1.0: - resolution: {integrity: sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==} + /normalize-url@8.1.1: + resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} engines: {node: '>=14.16'} dev: true @@ -10262,7 +10362,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 dev: true @@ -10272,7 +10372,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 dev: true /object.values@1.2.1: @@ -10359,6 +10459,27 @@ packages: safe-push-apply: 1.0.0 dev: true + /ox@0.11.1(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-1l1gOLAqg0S0xiN1dH5nkPna8PucrZgrIJOfS49MLNiMevxu07Iz4ZjuJS9N+xifvT+PsZyIptS7WHM8nC+0+A==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76) + eventemitter3: 5.0.1 + typescript: 5.9.3 + transitivePeerDependencies: + - zod + dev: true + /p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} @@ -10650,34 +10771,34 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + /prettier-linter-helpers@1.0.1: + resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} engines: {node: '>=6.0.0'} dependencies: fast-diff: 1.3.0 dev: true - /prettier-plugin-packagejson@2.5.19(prettier@3.6.2): - resolution: {integrity: sha512-Qsqp4+jsZbKMpEGZB1UP1pxeAT8sCzne2IwnKkr+QhUe665EXUo3BAvTf1kAPCqyMv9kg3ZmO0+7eOni/C6Uag==} + /prettier-plugin-packagejson@2.5.20(prettier@3.7.4): + resolution: {integrity: sha512-G8cowPh+QmJJECTZlrPDKWkVVcwrFjF2rGcw546w3N8blLoc4szSs8UUPfFVxHUNLUjiru71Ah83g1lZkeK9Bw==} peerDependencies: prettier: '>= 1.16.0' peerDependenciesMeta: prettier: optional: true dependencies: - prettier: 3.6.2 - sort-package-json: 3.4.0 + prettier: 3.7.4 + sort-package-json: 3.5.0 synckit: 0.11.11 dev: true - /prettier-plugin-solidity@1.4.3(prettier@3.6.2): + /prettier-plugin-solidity@1.4.3(prettier@3.7.4): resolution: {integrity: sha512-Mrr/iiR9f9IaeGRMZY2ApumXcn/C5Gs3S7B7hWB3gigBFML06C0yEyW86oLp0eqiA0qg+46FaChgLPJCj/pIlg==} engines: {node: '>=18'} peerDependencies: prettier: '>=2.3.0' dependencies: '@solidity-parser/parser': 0.20.2 - prettier: 3.6.2 + prettier: 3.7.4 semver: 7.7.3 dev: true @@ -10687,8 +10808,8 @@ packages: hasBin: true dev: true - /prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + /prettier@3.7.4: + resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} engines: {node: '>=14'} hasBin: true dev: true @@ -10801,15 +10922,23 @@ packages: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} dev: true - /qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} + /pvtsutils@1.3.6: + resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} + requiresBuild: true dependencies: - side-channel: 1.1.0 + tslib: 2.8.1 + dev: true + optional: true + + /pvutils@1.1.5: + resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} + engines: {node: '>=16.0.0'} + requiresBuild: true dev: true + optional: true - /qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + /qs@6.14.1: + resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} engines: {node: '>=0.6'} dependencies: side-channel: 1.1.0 @@ -10858,12 +10987,12 @@ packages: engines: {node: '>= 0.6'} dev: true - /raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + /raw-body@2.5.3: + resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} engines: {node: '>= 0.8'} dependencies: bytes: 3.1.2 - http-errors: 2.0.0 + http-errors: 2.0.1 iconv-lite: 0.4.24 unpipe: 1.0.0 dev: true @@ -10993,7 +11122,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -11183,18 +11312,18 @@ packages: bn.js: 5.2.2 dev: true - /rpc-websockets@9.2.0: - resolution: {integrity: sha512-DS/XHdPxplQTtNRKiBCRWGBJfjOk56W7fyFUpiYi9fSTWTzoEMbUkn3J4gB0IMniIEVeAGR1/rzFQogzD5MxvQ==} + /rpc-websockets@9.3.2: + resolution: {integrity: sha512-VuW2xJDnl1k8n8kjbdRSWawPRkwaVqUQNjE1TdeTawf0y0abGhtVJFTXCLfgpgGDBkO/Fj6kny8Dc/nvOW78MA==} dependencies: - '@swc/helpers': 0.5.17 + '@swc/helpers': 0.5.18 '@types/uuid': 8.3.4 '@types/ws': 8.18.1 buffer: 6.0.3 eventemitter3: 5.0.1 uuid: 8.3.2 - ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: - bufferutil: 4.0.9 + bufferutil: 4.1.0 utf-8-validate: 5.0.10 dev: true @@ -11315,23 +11444,23 @@ packages: hasBin: true dev: true - /send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + /send@0.19.2: + resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} engines: {node: '>= 0.8.0'} dependencies: debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 fresh: 0.5.2 - http-errors: 2.0.0 + http-errors: 2.0.1 mime: 1.6.0 ms: 2.1.3 on-finished: 2.4.1 range-parser: 1.2.1 - statuses: 2.0.1 + statuses: 2.0.2 transitivePeerDependencies: - supports-color dev: true @@ -11342,14 +11471,14 @@ packages: randombytes: 2.1.0 dev: true - /serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + /serve-static@1.16.3: + resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} engines: {node: '>= 0.8.0'} dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.19.0 + send: 0.19.2 transitivePeerDependencies: - supports-color dev: true @@ -11358,9 +11487,9 @@ packages: resolution: {integrity: sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==} engines: {node: '>=6'} dependencies: - body-parser: 1.20.3 + body-parser: 1.20.4 cors: 2.8.5 - express: 4.21.2 + express: 4.22.1 request: 2.88.2 xhr: 2.6.0 transitivePeerDependencies: @@ -11584,7 +11713,7 @@ packages: fast-diff: 1.3.0 glob: 8.1.0 ignore: 5.3.2 - js-yaml: 4.1.0 + js-yaml: 4.1.1 latest-version: 7.0.0 lodash: 4.17.21 pluralize: 8.0.0 @@ -11608,12 +11737,12 @@ packages: atomic-sleep: 1.0.0 dev: true - /sort-object-keys@1.1.3: - resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + /sort-object-keys@2.0.1: + resolution: {integrity: sha512-R89fO+z3x7hiKPXX5P0qim+ge6Y60AjtlW+QQpRozrrNcR1lw9Pkpm5MLB56HoNvdcLHL4wbpq16OcvGpEDJIg==} dev: true - /sort-package-json@3.4.0: - resolution: {integrity: sha512-97oFRRMM2/Js4oEA9LJhjyMlde+2ewpZQf53pgue27UkbEXfHJnDzHlUxQ/DWUkzqmp7DFwJp8D+wi/TYeQhpA==} + /sort-package-json@3.5.0: + resolution: {integrity: sha512-moY4UtptUuP5sPuu9H9dp8xHNel7eP5/Kz/7+90jTvC0IOiPH2LigtRM/aSFSxreaWoToHUVUpEV4a2tAs2oKQ==} engines: {node: '>=20'} hasBin: true dependencies: @@ -11622,7 +11751,7 @@ packages: git-hooks-list: 4.1.1 is-plain-obj: 4.1.0 semver: 7.7.3 - sort-object-keys: 1.1.3 + sort-object-keys: 2.0.1 tinyglobby: 0.2.15 dev: true @@ -11714,8 +11843,8 @@ packages: type-fest: 0.7.1 dev: true - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + /statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} dev: true @@ -11785,7 +11914,7 @@ packages: call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 dev: true @@ -11845,6 +11974,7 @@ packages: /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + requiresBuild: true dev: true /strip-bom@4.0.0: @@ -12121,7 +12251,7 @@ packages: '@babel/runtime': 7.28.4 '@ethersproject/abi': 5.8.0 '@tronweb3/google-protobuf': 3.21.4 - axios: 1.13.1 + axios: 1.13.2 bignumber.js: 9.3.1 ethereum-cryptography: 2.2.1 ethers: 5.8.0 @@ -12130,7 +12260,7 @@ packages: lodash: 4.17.21 querystring-es3: 0.2.1 semver: 5.7.2 - validator: 13.15.20 + validator: 13.15.26 transitivePeerDependencies: - bufferutil - debug @@ -12164,7 +12294,20 @@ packages: typescript: 5.9.3 dev: true - /ts-node@10.9.2(@swc/core@1.14.0)(@types/node@18.18.14)(typescript@5.9.3): + /ts-mocha@10.1.0(mocha@10.8.2): + resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X + dependencies: + mocha: 10.8.2 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + dev: true + + /ts-node@10.9.2(@swc/core@1.15.8)(@types/node@18.18.14)(typescript@5.9.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -12179,8 +12322,8 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.14.0 - '@tsconfig/node10': 1.0.11 + '@swc/core': 1.15.8 + '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 @@ -12196,6 +12339,21 @@ packages: yn: 3.1.1 dev: true + /ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + dev: true + /tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} dependencies: @@ -12450,13 +12608,13 @@ packages: '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 dev: true - /update-browserslist-db@1.1.4(browserslist@4.27.0): - resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} + /update-browserslist-db@1.2.3(browserslist@4.28.1): + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.27.0 + browserslist: 4.28.1 escalade: 3.2.0 picocolors: 1.1.1 dev: true @@ -12476,7 +12634,7 @@ packages: engines: {node: '>= 0.4'} dependencies: punycode: 1.4.1 - qs: 6.14.0 + qs: 6.14.1 dev: true /utf-8-validate@5.0.10: @@ -12548,10 +12706,6 @@ packages: convert-source-map: 2.0.0 dev: true - /valibot@0.36.0: - resolution: {integrity: sha512-CjF1XN4sUce8sBK9TixrDqFM7RwNkuXdJu174/AwmQUB62QbCQADg5lLe8ldBalFgtj1uKj+pKwDJiNo4Mn+eQ==} - dev: true - /valibot@0.37.0(typescript@5.9.3): resolution: {integrity: sha512-FQz52I8RXgFgOHym3XHYSREbNtkgSjF9prvMFH1nBsRyfL6SfCzoT1GuSDTlbsuPubM7/6Kbw0ZMQb8A+V+VsQ==} peerDependencies: @@ -12563,6 +12717,17 @@ packages: typescript: 5.9.3 dev: true + /valibot@1.2.0(typescript@5.9.3): + resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 5.9.3 + dev: true + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -12570,8 +12735,8 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /validator@13.15.20: - resolution: {integrity: sha512-KxPOq3V2LmfQPP4eqf3Mq/zrT0Dqp2Vmx2Bn285LwVahLc+CsxOM0crBHczm8ijlcjZ0Q5Xd6LW3z3odTPnlrw==} + /validator@13.15.26: + resolution: {integrity: sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA==} engines: {node: '>= 0.10'} dev: true @@ -12593,6 +12758,29 @@ packages: extsprintf: 1.3.0 dev: true + /viem@2.43.5(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-QuJpuEMEPM3EreN+vX4mVY68Sci0+zDxozYfbh/WfV+SSy/Gthm74PH8XmitXdty1xY54uTCJ+/Gbbd1IiMPSA==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76) + isows: 1.0.7(ws@8.18.3) + ox: 0.11.1(typescript@5.9.3)(zod@3.25.76) + typescript: 5.9.3 + ws: 8.18.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: true + /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: @@ -12880,7 +13068,7 @@ packages: resolution: {integrity: sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==} engines: {node: '>=4.0.0'} dependencies: - bufferutil: 4.0.9 + bufferutil: 4.1.0 debug: 2.6.9 es5-ext: 0.10.64 typedarray-to-buffer: 3.1.5 @@ -12990,8 +13178,8 @@ packages: triple-beam: 1.4.1 dev: true - /winston@3.18.3: - resolution: {integrity: sha512-NoBZauFNNWENgsnC9YpgyYwOVrl2m58PpQ8lNHjV3kosGs7KJ7Npk9pCUE+WJlawVSe8mykWDKWFSVfs3QO9ww==} + /winston@3.19.0: + resolution: {integrity: sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==} engines: {node: '>= 12.0.0'} dependencies: '@colors/colors': 1.6.0 @@ -13104,9 +13292,22 @@ packages: optional: true dev: true - /ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): + /ws@8.18.3: resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: '>=5.0.2' @@ -13116,7 +13317,7 @@ packages: utf-8-validate: optional: true dependencies: - bufferutil: 4.0.9 + bufferutil: 4.1.0 utf-8-validate: 5.0.10 dev: true @@ -13243,6 +13444,11 @@ packages: yargs-parser: 2.4.1 dev: true + /yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + dev: true + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} @@ -13260,8 +13466,8 @@ packages: '@types/yoga-layout': 1.9.2 dev: true - /zksync-ethers@5.11.0(ethers@5.8.0): - resolution: {integrity: sha512-oLwfjfVfHYjxMeDjmB3Kb+I0W0fwau5k6ZFSJJS0/gEYyu5A6AZIJV08NP/RnG30V5XP46u6Ld3Dw6HYkESJ+A==} + /zksync-ethers@5.11.1(ethers@5.8.0): + resolution: {integrity: sha512-Znl2p0gporGnHbAO0KKM1TIQpyRQKCi8nf1kOlZuTVCvlgBwhweWjTy53le96ZOoR3J5LUXAk7aYil2czSLJZw==} engines: {node: '>=16.0.0'} peerDependencies: ethers: ^5.7.2 @@ -13281,3 +13487,9 @@ packages: /zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} dev: true + + /zx@8.8.5: + resolution: {integrity: sha512-SNgDF5L0gfN7FwVOdEFguY3orU5AkfFZm9B5YSHog/UDHv+lvmd82ZAsOenOkQixigwH2+yyH198AwNdKhj+RA==} + engines: {node: '>= 12.17.0'} + hasBin: true + dev: true diff --git a/examples/oft-solana/scripts/generate-features.ts b/examples/oft-solana/scripts/generate-features.ts new file mode 100644 index 0000000000..19f6f901dc --- /dev/null +++ b/examples/oft-solana/scripts/generate-features.ts @@ -0,0 +1,92 @@ +import fs from 'fs' +import { execFile } from 'node:child_process' +import { promisify } from 'node:util' +import path from 'path' + +interface FeatureInfo { + description: string + id: string + status: string +} + +interface FeaturesResponse { + features: FeatureInfo[] +} + +const execFileAsync = promisify(execFile) + +async function fetchFeatures(rpc: string): Promise { + const { stdout } = await execFileAsync( + 'solana', + ['feature', 'status', '-u', rpc, '--display-all', '--output', 'json-compact'], + { maxBuffer: 10 * 1024 * 1024 } + ) + + return JSON.parse(stdout.trim()) as FeaturesResponse +} + +async function generateFeatures(): Promise { + console.log('Retrieving mainnet feature flags...') + + try { + const rpcEndpoints = [ + 'https://api.mainnet-beta.solana.com', + 'https://solana-rpc.publicnode.com', + 'https://rpc.ankr.com/solana', + ] + + let features: FeaturesResponse | null = null + let lastError: unknown = null + let successfulRpc: string | null = null + + for (const rpc of rpcEndpoints) { + try { + console.log(` Trying ${rpc}...`) + features = await fetchFeatures(rpc) + successfulRpc = rpc + break + } catch (error) { + lastError = error + console.log(` Failed with ${rpc}, trying next...`) + } + } + + if (!features) { + throw lastError || new Error('All RPC endpoints failed') + } + + const inactiveFeatures = features.features.filter((feature) => feature.status === 'inactive') + + console.log(`Found ${inactiveFeatures.length} inactive features`) + + const targetDir = path.join(__dirname, '../target/programs') + const featuresFile = path.join(targetDir, 'features.json') + + if (!fs.existsSync(targetDir)) { + fs.mkdirSync(targetDir, { recursive: true }) + } + + const featuresData = { + timestamp: new Date().toISOString(), + source: successfulRpc, + totalFeatures: features.features.length, + inactiveFeatures, + inactiveCount: inactiveFeatures.length, + } + + fs.writeFileSync(featuresFile, JSON.stringify(featuresData, null, 2)) + + console.log(`Features data saved to ${featuresFile}`) + console.log(`Cached ${inactiveFeatures.length} inactive features for faster test startup`) + } catch (error) { + console.error('Failed to retrieve features:', error) + process.exit(1) + } +} + +;(async (): Promise => { + await generateFeatures() +})().catch((err: unknown) => { + console.error(err) + process.exit(1) +}) diff --git a/examples/oft-solana/tasks/aptos/aptosEndpointV2.ts b/examples/oft-solana/tasks/aptos/aptosEndpointV2.ts index 4ff52e84d1..11df3242f5 100644 --- a/examples/oft-solana/tasks/aptos/aptosEndpointV2.ts +++ b/examples/oft-solana/tasks/aptos/aptosEndpointV2.ts @@ -11,6 +11,7 @@ import { Uln302SetExecutorConfig, Uln302SetUlnConfig, Uln302UlnConfig, + Uln302UlnUserConfig, UlnReadSetUlnConfig, UlnReadUlnConfig, UlnReadUlnUserConfig, @@ -262,7 +263,7 @@ export class AptosEndpointV2 implements IEndpointV2 { _oapp: OmniAddress, _uln: OmniAddress, _eid: EndpointId, - _config: any, + _config: Uln302UlnUserConfig, _type: Uln302ConfigType ) { return false diff --git a/examples/oft-solana/tasks/aptos/aptosSdkFactory.ts b/examples/oft-solana/tasks/aptos/aptosSdkFactory.ts index a6b6aec3a0..7154058395 100644 --- a/examples/oft-solana/tasks/aptos/aptosSdkFactory.ts +++ b/examples/oft-solana/tasks/aptos/aptosSdkFactory.ts @@ -1,4 +1,4 @@ -import { OmniAddress, OmniPoint, OmniTransaction } from '@layerzerolabs/devtools' +import { Bytes, OmniAddress, OmniPoint, OmniTransaction } from '@layerzerolabs/devtools' import { ChainType, EndpointId, endpointIdToChainType } from '@layerzerolabs/lz-definitions' import { IOApp, OAppEnforcedOptionParam } from '@layerzerolabs/ua-devtools' @@ -49,8 +49,8 @@ export function createAptosOAppFactory() { async isDelegate(): Promise { return false }, - async getEnforcedOptions(): Promise { - return {} + async getEnforcedOptions(_eid: EndpointId, _msgType: number): Promise { + return '0x' }, async setEnforcedOptions(enforcedOptions: OAppEnforcedOptionParam[]): Promise { return createStubTransaction(`setEnforcedOptions(${enforcedOptions.length} options)`) diff --git a/examples/oft-solana/tasks/common/config.get.ts b/examples/oft-solana/tasks/common/config.get.ts index 4d065849af..880e567fe9 100644 --- a/examples/oft-solana/tasks/common/config.get.ts +++ b/examples/oft-solana/tasks/common/config.get.ts @@ -54,7 +54,7 @@ const getNetworkName = (eid: EndpointId) => { if (hardhatUnsupportedEids.includes(eid)) { return `${chainName}-${env}` } else { - return getNetworkNameForEid(eid as any) + return getNetworkNameForEid(eid) } } diff --git a/examples/oft-solana/tasks/common/types.ts b/examples/oft-solana/tasks/common/types.ts index 2c4bf0d940..1d5e954e02 100644 --- a/examples/oft-solana/tasks/common/types.ts +++ b/examples/oft-solana/tasks/common/types.ts @@ -7,7 +7,11 @@ export const keyPair: CLIArgumentType = { parse(name: string, value: string) { return Keypair.fromSecretKey(decode(value)) }, - validate() {}, + validate(name: string, value: unknown) { + if (!(value instanceof Keypair)) { + throw new Error(`${name} is not a valid Keypair`) + } + }, } export const publicKey: CLIArgumentType = { @@ -15,7 +19,11 @@ export const publicKey: CLIArgumentType = { parse(name: string, value: string) { return new PublicKey(value) }, - validate() {}, + validate(name: string, value: unknown) { + if (!(value instanceof PublicKey)) { + throw new Error(`${name} is not a valid PublicKey`) + } + }, } export interface SendResult { diff --git a/examples/oft-solana/tasks/common/wire.ts b/examples/oft-solana/tasks/common/wire.ts index 991e054fd9..d474e3ebdc 100644 --- a/examples/oft-solana/tasks/common/wire.ts +++ b/examples/oft-solana/tasks/common/wire.ts @@ -152,7 +152,7 @@ task(TASK_LZ_OAPP_WIRE) try { // Use the SDK to check if configs exist - const [sendConfig, receiveConfig] = await getSolanaUlnConfigPDAs( + const [_sendConfig, _receiveConfig] = await getSolanaUlnConfigPDAs( connection.vector.to.eid, await connectionFactory(connection.vector.from.eid), new PublicKey(connection.config.sendLibrary), diff --git a/examples/oft-solana/tasks/evm/sendEvm.ts b/examples/oft-solana/tasks/evm/sendEvm.ts index b5bddd5055..3953b96ba0 100644 --- a/examples/oft-solana/tasks/evm/sendEvm.ts +++ b/examples/oft-solana/tasks/evm/sendEvm.ts @@ -50,9 +50,13 @@ export async function sendEvm( const { contracts } = typeof layerzeroConfig === 'function' ? await layerzeroConfig() : layerzeroConfig const wrapper = contracts.find((c) => c.contract.eid === srcEid) if (!wrapper) throw new Error(`No config for EID ${srcEid}`) - wrapperAddress = wrapper.contract.contractName - ? (await srcEidHre.deployments.get(wrapper.contract.contractName)).address - : wrapper.contract.address! + if (wrapper.contract.contractName) { + wrapperAddress = (await srcEidHre.deployments.get(wrapper.contract.contractName)).address + } else if (wrapper.contract.address) { + wrapperAddress = wrapper.contract.address + } else { + throw new Error(`No contract address found for EID ${srcEid}`) + } } // 2️⃣ load OFT ABI const oftArtifact = await srcEidHre.artifacts.readArtifact('OFT') diff --git a/examples/oft-solana/tasks/solana/index.ts b/examples/oft-solana/tasks/solana/index.ts index 996087bad0..c07b43842c 100644 --- a/examples/oft-solana/tasks/solana/index.ts +++ b/examples/oft-solana/tasks/solana/index.ts @@ -181,10 +181,11 @@ export const getOftStoreAddress = (eid: EndpointId): string | null => { return null } return oftStore - } catch (err: any) { + } catch (err: unknown) { + const message = err instanceof Error ? err.message : String(err) DebugLogger.printWarning( KnownWarnings.ERROR_LOADING_SOLANA_DEPLOYMENT, - `Could not load Solana deployment for ${endpointIdToNetwork(eid)} (eid ${eid}): ${err.message}` + `Could not load Solana deployment for ${endpointIdToNetwork(eid)} (eid ${eid}): ${message}` ) return null } diff --git a/examples/oft-solana/tasks/solana/setOutboundRateLimit.ts b/examples/oft-solana/tasks/solana/setOutboundRateLimit.ts index 4d5abbf51c..b4294c4418 100644 --- a/examples/oft-solana/tasks/solana/setOutboundRateLimit.ts +++ b/examples/oft-solana/tasks/solana/setOutboundRateLimit.ts @@ -3,7 +3,7 @@ import assert from 'assert' import { mplToolbox } from '@metaplex-foundation/mpl-toolbox' import { createSignerFromKeypair, publicKey, signerIdentity } from '@metaplex-foundation/umi' import { createUmi } from '@metaplex-foundation/umi-bundle-defaults' -import { fromWeb3JsKeypair, toWeb3JsKeypair, toWeb3JsPublicKey } from '@metaplex-foundation/umi-web3js-adapters' +import { fromWeb3JsKeypair, toWeb3JsPublicKey } from '@metaplex-foundation/umi-web3js-adapters' import { Keypair, PublicKey, sendAndConfirmTransaction } from '@solana/web3.js' import bs58 from 'bs58' import { task } from 'hardhat/config' @@ -47,7 +47,6 @@ task( const connection = await connectionFactory(taskArgs.eid) const umi = createUmi(connection.rpcEndpoint).use(mplToolbox()) const umiWalletSigner = createSignerFromKeypair(umi, umiKeypair) - const web3WalletKeyPair = toWeb3JsKeypair(umiKeypair) umi.use(signerIdentity(umiWalletSigner)) const solanaSdkFactory = createOFTFactory( diff --git a/examples/oft-solana/tasks/solana/utils.ts b/examples/oft-solana/tasks/solana/utils.ts index fd50673af6..fa4ce29218 100644 --- a/examples/oft-solana/tasks/solana/utils.ts +++ b/examples/oft-solana/tasks/solana/utils.ts @@ -73,13 +73,20 @@ export function parseDecimalToUnits(amount: string, decimals: number): bigint { */ export function silenceSolana429(connection: Connection): void { const origWrite = process.stderr.write.bind(process.stderr) - process.stderr.write = ((chunk: any, ...args: any[]) => { - const str = Buffer.isBuffer(chunk) ? chunk.toString('utf8') : chunk + process.stderr.write = (( + chunk: string | Uint8Array, + encoding?: BufferEncoding | ((err?: Error) => void), + cb?: (err?: Error) => void + ) => { + const str = typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString('utf8') if (typeof str === 'string' && str.includes('429 Too Many Requests')) { // swallow it return true } // otherwise pass through - return origWrite(chunk, ...args) + if (typeof encoding === 'function') { + return origWrite(chunk, encoding) + } + return origWrite(chunk, encoding, cb) }) as typeof process.stderr.write } diff --git a/examples/oft-solana/test/anchor/constants.ts b/examples/oft-solana/test/anchor/constants.ts new file mode 100755 index 0000000000..8d9acf8be6 --- /dev/null +++ b/examples/oft-solana/test/anchor/constants.ts @@ -0,0 +1,33 @@ +import { publicKey } from '@metaplex-foundation/umi' +import { utils } from '@noble/secp256k1' + +import { UMI } from '@layerzerolabs/lz-solana-sdk-v2' + +export const SRC_EID = 50168 +export const DST_EID = 50125 +export const INVALID_EID = 999999 // Non-existent EID for testing +export const TON_EID = 50343 + +export const OFT_PROGRAM_ID = publicKey('9UovNrJD8pQyBLheeHNayuG1wJSEAoxkmM14vw5gcsTT') + +export const DVN_SIGNERS = new Array(4).fill(0).map(() => utils.randomPrivateKey()) + +export const OFT_DECIMALS = 6 + +export const defaultMultiplierBps = 12500 // 125% + +export const simpleMessageLib: UMI.SimpleMessageLibProgram.SimpleMessageLib = + new UMI.SimpleMessageLibProgram.SimpleMessageLib(UMI.SimpleMessageLibProgram.SIMPLE_MESSAGELIB_PROGRAM_ID) + +export const endpoint: UMI.EndpointProgram.Endpoint = new UMI.EndpointProgram.Endpoint( + UMI.EndpointProgram.ENDPOINT_PROGRAM_ID +) +export const uln: UMI.UlnProgram.Uln = new UMI.UlnProgram.Uln(UMI.UlnProgram.ULN_PROGRAM_ID) +export const executor: UMI.ExecutorProgram.Executor = new UMI.ExecutorProgram.Executor( + UMI.ExecutorProgram.EXECUTOR_PROGRAM_ID +) +export const priceFeed: UMI.PriceFeedProgram.PriceFeed = new UMI.PriceFeedProgram.PriceFeed( + UMI.PriceFeedProgram.PRICEFEED_PROGRAM_ID +) + +export const dvns = [publicKey('HtEYV4xB4wvsj5fgTkcfuChYpvGYzgzwvNhgDZQNh7wW')] diff --git a/examples/oft-solana/test/anchor/got-shim.cjs b/examples/oft-solana/test/anchor/got-shim.cjs new file mode 100644 index 0000000000..be034b3f04 --- /dev/null +++ b/examples/oft-solana/test/anchor/got-shim.cjs @@ -0,0 +1,26 @@ +const Module = require('module'); + +const originalLoad = Module._load; + +const gotStub = { + default: Object.assign( + async () => { + throw new Error('got stub: network client not available in tests'); + }, + { + get: async () => { + throw new Error('got stub: network client not available in tests'); + }, + post: async () => { + throw new Error('got stub: network client not available in tests'); + }, + } + ), +}; + +Module._load = function (request, parent, isMain) { + if (request === 'got') { + return gotStub; + } + return originalLoad.call(this, request, parent, isMain); +}; diff --git a/examples/oft-solana/test/anchor/helpers/error-assertions.ts b/examples/oft-solana/test/anchor/helpers/error-assertions.ts new file mode 100644 index 0000000000..4b48698abc --- /dev/null +++ b/examples/oft-solana/test/anchor/helpers/error-assertions.ts @@ -0,0 +1,96 @@ +import assert from 'assert' + +import { Program, ProgramError } from '@metaplex-foundation/umi' + +import { oft } from '@layerzerolabs/oft-v2-solana-sdk' + +export async function expectOftError( + operation: () => Promise, + expectedErrorClass: new (...args: unknown[]) => T, + program: Program, + customMessage?: string +): Promise { + try { + await operation() + assert.fail(`Expected ${expectedErrorClass.name} to be thrown, but operation succeeded`) + } catch (error: unknown) { + const errorMessage = customMessage || `Expected ${expectedErrorClass.name}` + assertOftError(error, expectedErrorClass, program, errorMessage) + } +} + +export function assertOftError( + error: unknown, + expectedErrorClass: new (...args: unknown[]) => T, + program: Program, + message: string +): void { + const isMatch = isOftError(error, expectedErrorClass, program) + + if (!isMatch) { + const actualInfo = getErrorInfo(error) + assert.fail(`${message}, but got: ${actualInfo}\nExpected: ${expectedErrorClass.name}`) + } +} + +function isOftError( + error: unknown, + expectedErrorClass: new (...args: unknown[]) => T, + program: Program +): boolean { + const instance = new expectedErrorClass(program) + if (!('code' in instance) || typeof instance.code !== 'number') { + return false + } + const expectedMessage = `Error Code: ${instance.name}. Error Number: ${instance.code.toString(10)}` + + if ( + typeof error === 'object' && + 'message' in error && + typeof error.message === 'string' && + error.message.startsWith('Simulate Fail:') + ) { + const msg = error.message.split('Simulate Fail:')[1] + return JSON.stringify(msg).includes(expectedMessage) + } + + if ( + typeof error !== 'object' || + !('transactionError' in error) || + typeof error.transactionError !== 'object' || + !('logs' in error.transactionError) + ) { + return false + } + + const logs = error.transactionError.logs + return JSON.stringify(logs).includes(expectedMessage) +} + +function getErrorInfo(error: unknown): string { + const err = error as { message?: string; code?: string; name?: string; logs?: string[] } + const parts = [] + + if (err.message) { + parts.push(`Message: "${err.message}"`) + } + + if (err.code) { + parts.push(`Code: ${err.code}`) + } + + if (err.name) { + parts.push(`Name: ${err.name}`) + } + + if (err.logs) { + const errorLogs = err.logs.filter((log: string) => log.includes('Error Code:') || log.includes('Error Number:')) + if (errorLogs.length > 0) { + parts.push(`Logs: [${errorLogs.slice(0, 2).join(', ')}]`) + } + } + + return parts.length > 0 ? parts.join(', ') : 'Unknown error format' +} + +export const OftErrors = oft.errors diff --git a/examples/oft-solana/test/anchor/helpers/index.ts b/examples/oft-solana/test/anchor/helpers/index.ts new file mode 100644 index 0000000000..c3fb981acb --- /dev/null +++ b/examples/oft-solana/test/anchor/helpers/index.ts @@ -0,0 +1,4 @@ +export { initOft, send } from './oft-layerzero-simulation' +export { quoteSend, quoteOft } from './oft-quotes' +export { createOftKeys, createOftKeySets, createKeypairFromSeed, createSignerFromSeed } from './test-keys' +export { expectOftError, assertOftError, OftErrors } from './error-assertions' diff --git a/examples/oft-solana/test/anchor/helpers/oft-layerzero-simulation.ts b/examples/oft-solana/test/anchor/helpers/oft-layerzero-simulation.ts new file mode 100644 index 0000000000..4c83f6ef9e --- /dev/null +++ b/examples/oft-solana/test/anchor/helpers/oft-layerzero-simulation.ts @@ -0,0 +1,108 @@ +import { KeypairSigner, PublicKey, Umi, publicKeyBytes } from '@metaplex-foundation/umi' +import { base58 } from '@metaplex-foundation/umi/serializers' +import { fromWeb3JsPublicKey, toWeb3JsPublicKey } from '@metaplex-foundation/umi-web3js-adapters' +import { TOKEN_PROGRAM_ID } from '@solana/spl-token' + +import { UMI } from '@layerzerolabs/lz-solana-sdk-v2' +import { Options } from '@layerzerolabs/lz-v2-utilities' +import { OFT_DECIMALS, oft } from '@layerzerolabs/oft-v2-solana-sdk' + +import { OFT_PROGRAM_ID, endpoint } from '../constants' +import { OftKeys, PacketSentEvent, TestContext } from '../types' +import { sendAndConfirm } from '../utils' + +const SIMULATION_EXECUTION_OPTIONS = Options.newOptions().addExecutorLzReceiveOption(200000, 200000 * 5) +const SIMULATION_COMPUTE_UNITS = 400000 + +export async function initOft( + umi: Umi, + keys: OftKeys, + oftType: oft.types.OFTType, + sharedDecimals = OFT_DECIMALS +): Promise { + const ix = oft.initOft( + { + payer: keys.oappAdmin, + admin: keys.oappAdmin.publicKey, + mint: keys.mint.publicKey, + escrow: keys.escrow, + }, + oftType, + sharedDecimals, + { + oft: OFT_PROGRAM_ID, + endpoint: endpoint.programId, + } + ) + + await sendAndConfirm(umi, ix, keys.oappAdmin) +} + +export async function send( + context: TestContext, + oftKeys: OftKeys, + source: KeypairSigner, + sourceTokenAccount: PublicKey, + dest: PublicKey, + dstEid: number, + sendAmount: bigint, + fee: UMI.EndpointProgram.types.MessagingFee, + composeMsg?: Uint8Array, + minAmountLd = 0n +): Promise { + const { umi } = context + + const ix = await oft.send( + umi.rpc, + { + payer: source, + tokenMint: oftKeys.mint.publicKey, + tokenEscrow: oftKeys.escrow.publicKey, + tokenSource: sourceTokenAccount, + }, + { + dstEid, + to: publicKeyBytes(dest), + amountLd: sendAmount, + minAmountLd, + options: SIMULATION_EXECUTION_OPTIONS.toBytes(), + composeMsg, + nativeFee: fee.nativeFee, + lzTokenFee: fee.lzTokenFee, + }, + { + oft: context.program.publicKey, + endpoint: endpoint.programId, + token: fromWeb3JsPublicKey(TOKEN_PROGRAM_ID), + } + ) + + const { signature } = await sendAndConfirm( + umi, + ix, + source, + SIMULATION_COMPUTE_UNITS, + context.lookupTable === undefined ? undefined : [context.lookupTable] + ) + + return extractPacketSentEvent(context, signature) +} + +async function extractPacketSentEvent(context: TestContext, signature: Uint8Array): Promise { + const signatureBase58 = base58.deserialize(signature)[0] + const maxAttempts = 10 + for (let attempt = 0; attempt < maxAttempts; attempt++) { + const events = await UMI.extractEventFromTransactionSignature( + context.connection, + toWeb3JsPublicKey(endpoint.programId), + signatureBase58, + UMI.EndpointProgram.events.getPacketSentEventSerializer(), + { commitment: 'confirmed', maxSupportedTransactionVersion: 0 } + ) + if (events && events.length > 0) { + return events[0] + } + await new Promise((resolve) => setTimeout(resolve, 500)) + } + throw new Error(`PacketSent event not found for signature ${signatureBase58}`) +} diff --git a/examples/oft-solana/test/anchor/helpers/oft-quotes.ts b/examples/oft-solana/test/anchor/helpers/oft-quotes.ts new file mode 100644 index 0000000000..c9065c578f --- /dev/null +++ b/examples/oft-solana/test/anchor/helpers/oft-quotes.ts @@ -0,0 +1,75 @@ +import { KeypairSigner, PublicKey, publicKeyBytes } from '@metaplex-foundation/umi' + +import { UMI } from '@layerzerolabs/lz-solana-sdk-v2' +import { Options } from '@layerzerolabs/lz-v2-utilities' +import { oft } from '@layerzerolabs/oft-v2-solana-sdk' + +import { endpoint } from '../constants' +import { OftKeys, TestContext } from '../types' + +const DEFAULT_LZ_RECEIVE_OPTIONS = Options.newOptions().addExecutorLzReceiveOption(200000, 0) + +export async function quoteSend( + context: TestContext, + oftKeys: OftKeys, + payer: KeypairSigner, + dest: PublicKey, + dstEid: number, + sendAmount: bigint, + minAmount = 0n, + composeMessage?: Uint8Array, + options: Uint8Array = DEFAULT_LZ_RECEIVE_OPTIONS.toBytes() +): Promise { + return oft.quote( + context.umi.rpc, + { + payer: payer.publicKey, + tokenMint: oftKeys.mint.publicKey, + tokenEscrow: oftKeys.escrow.publicKey, + }, + { + dstEid, + to: publicKeyBytes(dest), + amountLd: sendAmount, + minAmountLd: minAmount, + options, + composeMsg: composeMessage, + }, + { + oft: context.program.publicKey, + endpoint: endpoint.programId, + }, + undefined, + context.lookupTable?.publicKey + ) +} + +export async function quoteOft( + context: TestContext, + oftKeys: OftKeys, + payer: KeypairSigner, + dest: PublicKey, + dstEid: number, + sendAmount: bigint, + minAmount = 0n, + composeMessage?: Uint8Array, + options: Uint8Array = DEFAULT_LZ_RECEIVE_OPTIONS.toBytes() +): Promise { + return oft.quoteOft( + context.umi.rpc, + { + payer: payer.publicKey, + tokenMint: oftKeys.mint.publicKey, + tokenEscrow: oftKeys.escrow.publicKey, + }, + { + dstEid, + to: publicKeyBytes(dest), + amountLd: sendAmount, + minAmountLd: minAmount, + options, + composeMsg: composeMessage, + }, + context.program.publicKey + ) +} diff --git a/examples/oft-solana/test/anchor/helpers/test-keys.ts b/examples/oft-solana/test/anchor/helpers/test-keys.ts new file mode 100644 index 0000000000..fac44f1607 --- /dev/null +++ b/examples/oft-solana/test/anchor/helpers/test-keys.ts @@ -0,0 +1,53 @@ +import { createHash } from 'crypto' + +import { Keypair, KeypairSigner, PublicKey, createSignerFromKeypair, defaultPublicKey } from '@metaplex-foundation/umi' +import { createWeb3JsEddsa } from '@metaplex-foundation/umi-eddsa-web3js' +import { fromWeb3JsKeypair } from '@metaplex-foundation/umi-web3js-adapters' +import { Keypair as Web3Keypair } from '@solana/web3.js' + +import { OftPDA } from '@layerzerolabs/oft-v2-solana-sdk' + +import { OftKeySets, OftKeys } from '../types' + +const eddsa = createWeb3JsEddsa() + +export function createKeypairFromSeed(seed: string): Keypair { + const hash = createHash('sha256').update(seed).digest() + const seedBytes = hash.subarray(0, 32) + const web3Keypair = Web3Keypair.fromSeed(seedBytes) + return fromWeb3JsKeypair(web3Keypair) +} + +export function createSignerFromSeed(seed: string): KeypairSigner { + const keypair = createKeypairFromSeed(seed) + return createSignerFromKeypair({ eddsa }, keypair) +} + +export function createOftKeys(program: PublicKey, seedPrefix: string): OftKeys { + const admin = createSignerFromSeed(`${seedPrefix}-admin`) + const delegate = createSignerFromSeed(`${seedPrefix}-delegate`) + const pauser = createSignerFromSeed(`${seedPrefix}-pauser`) + const unpauser = createSignerFromSeed(`${seedPrefix}-unpauser`) + const mint = createSignerFromSeed(`${seedPrefix}-mint`) + const escrow = createSignerFromSeed(`${seedPrefix}-escrow`) + const [oftStore] = new OftPDA(program).oftStore(escrow.publicKey) + + return { + escrow, + mint, + oappAdmin: admin, + tokenMintAuthority: defaultPublicKey(), + oappAdminTokenAccount: undefined, + oftStore, + delegate, + pauser, + unpauser, + } +} + +export function createOftKeySets(program: PublicKey): OftKeySets { + return { + native: createOftKeys(program, 'oft-native'), + adapter: createOftKeys(program, 'oft-adapter'), + } +} diff --git a/examples/oft-solana/test/anchor/index.test.ts b/examples/oft-solana/test/anchor/index.test.ts new file mode 100644 index 0000000000..5c04e6dc0f --- /dev/null +++ b/examples/oft-solana/test/anchor/index.test.ts @@ -0,0 +1,281 @@ +import './got-shim.cjs' +import 'mocha' + +import fs from 'fs' +import { ChildProcess, type SpawnOptions, spawn } from 'node:child_process' +import path from 'path' +import { env } from 'process' + +import { + Context, + Program, + Umi, + createNullContext, + createSignerFromKeypair, + generateSigner, + sol, +} from '@metaplex-foundation/umi' +import { createUmi } from '@metaplex-foundation/umi-bundle-defaults' +import { Connection } from '@solana/web3.js' +import axios from 'axios' + +import { OftPDA, oft } from '@layerzerolabs/oft-v2-solana-sdk' + +import { OFT_PROGRAM_ID } from './constants' +import { createOftKeySets } from './helpers' +import { OftKeySets, TestContext } from './types' + +const RPC_PORT = '13033' +const FAUCET_PORT = '13133' +const RPC = `http://localhost:${RPC_PORT}` + +let globalContext: TestContext +let globalUmi: Umi | Context +let solanaProcess: ChildProcess + +const sleep = (ms: number): Promise => new Promise((resolve) => setTimeout(resolve, ms)) + +describe('OFT Solana Tests', function () { + this.timeout(300000) + + before(async function () { + console.log('Setting up test environment...') + + await setupPrograms() + solanaProcess = await startSolanaValidator() + + globalContext = await createGlobalTestContext() + globalUmi = globalContext.umi + + console.log('Test environment ready.') + }) + + after(async function () { + console.log('Cleaning up test environment...') + globalUmi = createNullContext() + if (globalContext) { + globalContext.umi = globalUmi + } + await sleep(2000) + if (solanaProcess) { + solanaProcess.kill('SIGKILL') + } + console.log('Cleanup completed.') + }) + + describe('LayerZero Infrastructure', function () { + require('./suites/layerzero-infrastructure.test') + }) + + describe('Instruction Tests', function () { + require('./suites/init_oft.test') + require('./suites/set_oft_config.test') + require('./suites/set_peer_config.test') + require('./suites/quote_instructions.test') + require('./suites/send_and_receive.test') + require('./suites/layerzero-simulation.test') + require('./suites/withdraw_fee.test') + }) +}) + +export function getGlobalContext(): TestContext { + return globalContext +} + +export function getGlobalUmi(): Umi | Context { + return globalUmi +} + +export function setGlobalKeys(keys: OftKeySets): void { + if (globalContext) { + globalContext.keys = keys + } +} + +export function getGlobalKeys(): OftKeySets { + return globalContext?.keys as OftKeySets +} + +async function setupPrograms(): Promise { + const programsDir = path.join(__dirname, '../../target/programs') + env.RUST_LOG = 'solana_runtime::message_processor=debug' + fs.mkdirSync(programsDir, { recursive: true }) + + const programs = [ + { name: 'endpoint', id: '76y77prsiCMvXMjuoZ5VRrhG5qYBrUMYTE5WgHqgjEn6' }, + { name: 'simple_messagelib', id: '6GsmxMTHAAiFKfemuM4zBjumTjNSX5CAiw4xSSXM2Toy' }, + { name: 'uln', id: '7a4WjyR8VZ7yZz5XJAKm39BUGn5iT9CKcv2pmG9tdXVH' }, + { name: 'executor', id: '6doghB248px58JSSwG4qejQ46kFMW4AMj7vzJnWZHNZn' }, + { name: 'dvn', id: 'HtEYV4xB4wvsj5fgTkcfuChYpvGYzgzwvNhgDZQNh7wW' }, + { name: 'pricefeed', id: '8ahPGPjEbpgGaZx2NV1iG5Shj7TDwvsjkEDcGWjt94TP' }, + { name: 'blocked_messagelib', id: '2XrYqmhBMPJgDsb4SVbjV1PnJBprurd5bzRCkHwiFCJB' }, + ] + + console.log('Downloading LayerZero programs...') + for (const program of programs) { + const programPath = `${programsDir}/${program.name}.so` + if (!fs.existsSync(programPath)) { + console.log(` Downloading ${program.name}...`) + await runCommand('solana', ['program', 'dump', program.id, programPath, '-u', 'devnet'], { + stdio: 'inherit', + }) + } + } +} + +async function startSolanaValidator(): Promise { + const programsDir = path.join(__dirname, '../../target/programs') + + const args = [ + '--reset', + '--rpc-port', + RPC_PORT, + '--faucet-port', + FAUCET_PORT, + + '--bpf-program', + '76y77prsiCMvXMjuoZ5VRrhG5qYBrUMYTE5WgHqgjEn6', + `${programsDir}/endpoint.so`, + + '--bpf-program', + '6GsmxMTHAAiFKfemuM4zBjumTjNSX5CAiw4xSSXM2Toy', + `${programsDir}/simple_messagelib.so`, + + '--bpf-program', + '7a4WjyR8VZ7yZz5XJAKm39BUGn5iT9CKcv2pmG9tdXVH', + `${programsDir}/uln.so`, + + '--bpf-program', + '6doghB248px58JSSwG4qejQ46kFMW4AMj7vzJnWZHNZn', + `${programsDir}/executor.so`, + + '--bpf-program', + 'HtEYV4xB4wvsj5fgTkcfuChYpvGYzgzwvNhgDZQNh7wW', + `${programsDir}/dvn.so`, + + '--bpf-program', + '8ahPGPjEbpgGaZx2NV1iG5Shj7TDwvsjkEDcGWjt94TP', + `${programsDir}/pricefeed.so`, + + '--bpf-program', + '2XrYqmhBMPJgDsb4SVbjV1PnJBprurd5bzRCkHwiFCJB', + `${programsDir}/blocked_messagelib.so`, + + '--bpf-program', + OFT_PROGRAM_ID, + `${__dirname}/../../target/deploy/oft.so`, + ] + + console.log('Loading mainnet feature flags...') + const inactiveFeatures = await loadInactiveFeatures() + inactiveFeatures.forEach((f) => { + args.push('--deactivate-feature', f.id) + }) + + console.log('Starting solana-test-validator...') + const logFile = path.join(__dirname, '../../target/solana-test-validator.log') + const logFd = fs.openSync(logFile, 'w') + const validatorProcess = spawn('solana-test-validator', [...args], { + stdio: ['ignore', logFd, logFd], + }) + + let validatorReady = false + for (let i = 0; i < 60; i++) { + try { + await axios.post(RPC, { jsonrpc: '2.0', id: 1, method: 'getVersion' }, { timeout: 5000 }) + console.log('Solana test validator started.') + validatorReady = true + break + } catch (e) { + await sleep(1000) + console.log('Waiting for solana to start...') + } + } + + if (!validatorReady) { + validatorProcess.kill('SIGKILL') + throw new Error('Solana test validator failed to start within 60 seconds') + } + + return validatorProcess +} + +interface FeatureInfo { + description: string + id: string + status: string +} + +interface CachedFeaturesData { + timestamp: string + source: string + totalFeatures: number + inactiveFeatures: FeatureInfo[] + inactiveCount: number +} + +async function loadInactiveFeatures(): Promise { + const featuresFile = path.join(__dirname, '../../target/programs/features.json') + + if (!fs.existsSync(featuresFile)) { + console.log('Run: pnpm test:generate-features') + process.exit(1) + } + + try { + const cachedData: CachedFeaturesData = JSON.parse(fs.readFileSync(featuresFile, 'utf-8')) + console.log(`Loaded ${cachedData.inactiveCount} inactive features from cache.`) + return cachedData.inactiveFeatures + } catch (error) { + console.error('Failed to read features cache:', error) + process.exit(1) + } +} + +async function createGlobalTestContext(): Promise { + const connection = new Connection(RPC, 'confirmed') + const umi = createUmi(connection) + const program: Program = { + name: 'oft', + publicKey: OFT_PROGRAM_ID, + getErrorFromCode(code: number, cause?: Error) { + return oft.errors.getOftErrorFromCode(code, this, cause) + }, + getErrorFromName(name: string, cause?: Error) { + return oft.errors.getOftErrorFromName(name, this, cause) + }, + isOnCluster() { + return true + }, + } + + const context: TestContext = { + umi, + connection, + executor: createSignerFromKeypair(umi, umi.eddsa.generateKeypair()), + program, + programRepo: oft.createOFTProgramRepo(OFT_PROGRAM_ID, umi.rpc), + pda: new OftPDA(OFT_PROGRAM_ID), + keys: createOftKeySets(OFT_PROGRAM_ID), + } + umi.payer = generateSigner(umi) + + await umi.rpc.airdrop(umi.payer.publicKey, sol(10000)) + + return context +} + +async function runCommand(command: string, args: string[], options?: SpawnOptions): Promise { + await new Promise((resolve, reject) => { + const child = spawn(command, args, { stdio: 'inherit', ...options }) + + child.on('error', reject) + child.on('close', (code) => { + if (code === 0) { + resolve() + return + } + reject(new Error(`Command failed: ${command} ${args.join(' ')} (exit ${code ?? 'unknown'})`)) + }) + }) +} diff --git a/examples/oft-solana/test/anchor/suites/init_oft.test.ts b/examples/oft-solana/test/anchor/suites/init_oft.test.ts new file mode 100644 index 0000000000..bfa92565c5 --- /dev/null +++ b/examples/oft-solana/test/anchor/suites/init_oft.test.ts @@ -0,0 +1,107 @@ +import assert from 'assert' + +import { Context, TransactionBuilder, Umi, publicKeyBytes, sol } from '@metaplex-foundation/umi' +import { fromWeb3JsPublicKey } from '@metaplex-foundation/umi-web3js-adapters' +import { TOKEN_PROGRAM_ID } from '@solana/spl-token' +import { before, describe, it } from 'mocha' + +import { OFT_DECIMALS, OftPDA, oft } from '@layerzerolabs/oft-v2-solana-sdk' + +import { DST_EID, OFT_PROGRAM_ID, SRC_EID, endpoint, uln } from '../constants' +import { createOftKeys } from '../helpers' +import { expectOftError } from '../helpers/error-assertions' +import { initOft } from '../helpers/oft-layerzero-simulation' +import { getGlobalContext, getGlobalKeys, getGlobalUmi, setGlobalKeys } from '../index.test' +import { OftKeySets, TestContext } from '../types' +import { initMint } from '../utils' + +const TOKEN_PROGRAM = fromWeb3JsPublicKey(TOKEN_PROGRAM_ID) + +describe('init_oft', function () { + this.timeout(300000) + + let context: TestContext + let umi: Umi | Context + let keys: OftKeySets + + before(async function () { + context = getGlobalContext() + umi = getGlobalUmi() + keys = getGlobalKeys() + + await umi.rpc.airdrop(keys.native.oappAdmin.publicKey, sol(10000)) + await umi.rpc.airdrop(keys.adapter.oappAdmin.publicKey, sol(10000)) + + await initMint(context, keys.native, TOKEN_PROGRAM) + await initMint(context, keys.adapter, TOKEN_PROGRAM) + setGlobalKeys(keys) + }) + + it('rejects init_oft when shared decimals exceed mint decimals', async () => { + const invalidKeys = createOftKeys(OFT_PROGRAM_ID, 'oft-invalid') + await umi.rpc.airdrop(invalidKeys.oappAdmin.publicKey, sol(10000)) + await initMint(context, invalidKeys, TOKEN_PROGRAM, OFT_DECIMALS - 1) + + await expectOftError( + async () => initOft(umi as Umi, invalidKeys, oft.types.OFTType.Native, OFT_DECIMALS), + oft.errors.InvalidDecimalsError, + context.program + ) + }) + + it('initializes native and adapter OFTs', async () => { + await initOft(umi as Umi, keys.native, oft.types.OFTType.Native, OFT_DECIMALS) + await initOft(umi as Umi, keys.adapter, oft.types.OFTType.Adapter, OFT_DECIMALS) + + const nativeStore = await oft.accounts.fetchOFTStore(umi, keys.native.oftStore) + const adapterStore = await oft.accounts.fetchOFTStore(umi, keys.adapter.oftStore) + + assert.strictEqual(nativeStore.oftType, oft.types.OFTType.Native) + assert.strictEqual(adapterStore.oftType, oft.types.OFTType.Adapter) + + const [nativeTypes] = new OftPDA(context.program.publicKey).lzReceiveTypesAccounts(keys.native.oftStore) + const [adapterTypes] = new OftPDA(context.program.publicKey).lzReceiveTypesAccounts(keys.adapter.oftStore) + + const nativeTypesAccount = await oft.accounts.fetchLzReceiveTypesAccounts(umi, nativeTypes) + const adapterTypesAccount = await oft.accounts.fetchLzReceiveTypesAccounts(umi, adapterTypes) + + assert.strictEqual(nativeTypesAccount.oftStore, keys.native.oftStore) + assert.strictEqual(adapterTypesAccount.oftStore, keys.adapter.oftStore) + }) + + it('sets OApp libraries and nonces', async () => { + await setupOappLibraries(umi as Umi, keys.native) + await setupOappLibraries(umi as Umi, keys.adapter) + }) +}) + +async function setupOappLibraries(umi: Umi, keySet: OftKeySets['native']): Promise { + const oftStore = keySet.oftStore + await new TransactionBuilder( + [ + endpoint.initOAppSendLibrary(keySet.oappAdmin, { sender: oftStore, remote: DST_EID }), + endpoint.setOAppSendLibrary(keySet.oappAdmin, { + sender: oftStore, + remote: DST_EID, + msgLibProgram: uln.programId, + }), + endpoint.initOAppReceiveLibrary(keySet.oappAdmin, { receiver: oftStore, remote: SRC_EID }), + endpoint.setOAppReceiveLibrary(keySet.oappAdmin, { + receiver: oftStore, + remote: SRC_EID, + msgLibProgram: uln.programId, + }), + endpoint.initOAppNonce(keySet.oappAdmin, { + localOApp: oftStore, + remote: DST_EID, + remoteOApp: publicKeyBytes(oftStore), + }), + endpoint.initOAppNonce(keySet.oappAdmin, { + localOApp: oftStore, + remote: SRC_EID, + remoteOApp: publicKeyBytes(oftStore), + }), + ], + { feePayer: keySet.oappAdmin } + ).sendAndConfirm(umi) +} diff --git a/examples/oft-solana/test/anchor/suites/layerzero-infrastructure.test.ts b/examples/oft-solana/test/anchor/suites/layerzero-infrastructure.test.ts new file mode 100644 index 0000000000..8202e0b501 --- /dev/null +++ b/examples/oft-solana/test/anchor/suites/layerzero-infrastructure.test.ts @@ -0,0 +1,388 @@ +import { createLut, extendLut } from '@metaplex-foundation/mpl-toolbox' +import { + Context, + KeypairSigner, + PublicKey, + Signer, + Umi, + none, + publicKey, + publicKeyBytes, + some, +} from '@metaplex-foundation/umi' +import { fromWeb3JsPublicKey } from '@metaplex-foundation/umi-web3js-adapters' +import { getPublicKey } from '@noble/secp256k1' +import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from '@solana/spl-token' + +import { UMI } from '@layerzerolabs/lz-solana-sdk-v2' + +import { + DST_EID, + DVN_SIGNERS, + INVALID_EID, + SRC_EID, + TON_EID, + defaultMultiplierBps, + dvns, + endpoint, + executor, + priceFeed, + simpleMessageLib, + uln, +} from '../constants' +import { getGlobalContext, getGlobalKeys, getGlobalUmi } from '../index.test' +import { OftKeySets } from '../types' +import { sendAndConfirm } from '../utils' + +describe('LayerZero Infrastructure Setup', function () { + let umi: Umi | Context + let endpointAdmin: Signer + let executorInExecutor: KeypairSigner + let keys: OftKeySets + + before(function () { + const context = getGlobalContext() + umi = getGlobalUmi() + endpointAdmin = umi.payer + executorInExecutor = context.executor + keys = getGlobalKeys() + }) + + it('Init Endpoint', async () => { + await sendAndConfirm( + umi, + [ + endpoint.initEndpoint(endpointAdmin, { + eid: SRC_EID, + admin: endpointAdmin.publicKey, + }), + endpoint.registerLibrary(endpointAdmin, { + messageLibProgram: uln.programId, + }), + endpoint.registerLibrary(endpointAdmin, { + messageLibProgram: simpleMessageLib.programId, + }), + await endpoint.setDefaultSendLibrary(umi.rpc, endpointAdmin, { + messageLibProgram: uln.programId, + remote: DST_EID, + }), + await endpoint.setDefaultReceiveLibrary(umi.rpc, endpointAdmin, { + messageLibProgram: uln.programId, + remote: SRC_EID, + }), + ], + endpointAdmin + ) + await sendAndConfirm( + umi, + [ + await endpoint.setDefaultSendLibrary(umi.rpc, endpointAdmin, { + messageLibProgram: uln.programId, + remote: INVALID_EID, + }), + await endpoint.setDefaultReceiveLibrary(umi.rpc, endpointAdmin, { + messageLibProgram: uln.programId, + remote: INVALID_EID, + }), + await endpoint.setDefaultSendLibrary(umi.rpc, endpointAdmin, { + messageLibProgram: uln.programId, + remote: TON_EID, + }), + await endpoint.setDefaultReceiveLibrary(umi.rpc, endpointAdmin, { + messageLibProgram: uln.programId, + remote: TON_EID, + }), + ], + endpointAdmin + ) + }) + + it('Init Executor', async () => { + await sendAndConfirm( + umi, + [ + executor.initExecutor(endpointAdmin, { + admins: [endpointAdmin.publicKey], + executors: [executorInExecutor.publicKey], + msglibs: [uln.pda.messageLib()[0], simpleMessageLib.pda.messageLib()[0]], + owner: endpointAdmin.publicKey, + priceFeed: priceFeed.pda.priceFeed()[0], + }), + executor.setPriceFeed(endpointAdmin, priceFeed.programId), + executor.setDefaultMultiplierBps(endpointAdmin, defaultMultiplierBps), + executor.setDstConfig(endpointAdmin, [ + { + eid: DST_EID, + lzReceiveBaseGas: 10000, + lzComposeBaseGas: 10000, + multiplierBps: some(13000), + floorMarginUsd: some(10000n), + nativeDropCap: BigInt(1e7), + } satisfies UMI.ExecutorProgram.types.DstConfig, + ]), + ], + endpointAdmin + ) + }) + + it('Init PriceFeed', async () => { + const nativeTokenPriceUsd = BigInt(1e10) + const priceRatio = BigInt(1e10) + const gasPriceInUnit = BigInt(1e9) + const gasPerByte = 1 + const modelType: UMI.PriceFeedProgram.types.ModelType = { + __kind: 'Arbitrum', + gasPerL2Tx: BigInt(1e6), + gasPerL1CalldataByte: 1, + } + await sendAndConfirm( + umi, + [ + priceFeed.initPriceFeed(endpointAdmin, { + admin: endpointAdmin.publicKey, + updaters: [endpointAdmin.publicKey], + }), + priceFeed.setSolPrice(endpointAdmin, nativeTokenPriceUsd), + priceFeed.setPrice(endpointAdmin, { + dstEid: DST_EID, + priceRatio, + gasPriceInUnit, + gasPerByte, + modelType: modelType, + }), + ], + endpointAdmin + ) + }) + + it('Init DVN', async () => { + for (const programId of dvns) { + const dvn = new UMI.DVNProgram.DVN(programId) + await sendAndConfirm( + umi, + [ + await dvn.initDVN(umi.rpc, endpointAdmin, { + admins: [endpointAdmin.publicKey], + signers: DVN_SIGNERS.map((signer) => getPublicKey(signer, false).subarray(1)), + msglibs: [uln.pda.messageLib()[0]], + quorum: 1, + vid: DST_EID % 30000, + priceFeed: priceFeed.pda.priceFeed()[0], + }), + dvn.setDefaultMultiplierBps(endpointAdmin, defaultMultiplierBps), + dvn.setPriceFeed(endpointAdmin, priceFeed.programId), + dvn.setDstConfig(endpointAdmin, [ + { + eid: DST_EID, + dstGas: 10000, + multiplierBps: some(defaultMultiplierBps), + floorMarginUsd: none(), + }, + ]), + ], + endpointAdmin + ) + } + }) + + it('Init SimpleMessageLib', async () => { + await sendAndConfirm( + umi, + [ + simpleMessageLib.initSimpleMessageLib(endpointAdmin, { + admin: endpointAdmin.publicKey, + eid: SRC_EID, + nativeFee: 1e4, + lzTokenFee: 0, + }), + simpleMessageLib.setWhitelistCaller(endpointAdmin, endpointAdmin.publicKey), + ], + endpointAdmin + ) + }) + + it('Init UltraLightNode', async () => { + const defaultNativeFeeBps = 100 + const maxMessageSize = 1024 + const requiredDvns = dvns.map((programId) => new UMI.DvnPDA(publicKey(programId)).config()[0]).sort() + const sendUlnConfig: UMI.UlnProgram.types.UlnConfig = { + confirmations: 1n, + requiredDvnCount: requiredDvns.length, + optionalDvnCount: 0, + optionalDvnThreshold: 0, + requiredDvns: requiredDvns, + optionalDvns: [], + } + const receiveUlnConfig: UMI.UlnProgram.types.UlnConfig = { + confirmations: 1n, + requiredDvnCount: requiredDvns.length, + optionalDvnCount: 0, + optionalDvnThreshold: 0, + requiredDvns: requiredDvns, + optionalDvns: [], + } + const executorConfig: UMI.UlnProgram.types.ExecutorConfig = { + maxMessageSize, + executor: executor.pda.config()[0], + } + await sendAndConfirm( + umi, + [ + uln.initUln(endpointAdmin, { + admin: endpointAdmin.publicKey, + eid: DST_EID, + endpointProgram: endpoint.programId, + }), + uln.setTreasury(endpointAdmin, { + admin: endpointAdmin.publicKey, + lzToken: null, + nativeFeeBps: defaultNativeFeeBps, + nativeReceiver: endpointAdmin.publicKey, + }), + await uln.initOrUpdateDefaultConfig(umi.rpc, endpointAdmin, { + executorConfig: some(executorConfig), + receiveUlnConfig: some(receiveUlnConfig), + remote: SRC_EID, + sendUlnConfig: some(sendUlnConfig), + }), + await uln.initOrUpdateDefaultConfig(umi.rpc, endpointAdmin, { + executorConfig: some(executorConfig), + receiveUlnConfig: some(receiveUlnConfig), + remote: DST_EID, + sendUlnConfig: some(sendUlnConfig), + }), + ], + endpointAdmin + ) + + await sendAndConfirm( + umi, + [ + await uln.initOrUpdateDefaultConfig(umi.rpc, endpointAdmin, { + executorConfig: some(executorConfig), + receiveUlnConfig: some(receiveUlnConfig), + remote: INVALID_EID, + sendUlnConfig: some(sendUlnConfig), + }), + await uln.initOrUpdateDefaultConfig(umi.rpc, endpointAdmin, { + executorConfig: some(executorConfig), + receiveUlnConfig: some(receiveUlnConfig), + remote: TON_EID, + sendUlnConfig: some(sendUlnConfig), + }), + ], + endpointAdmin + ) + }) + + it('Init address lookup table', async function () { + const context = getGlobalContext() + const oftStores = [keys.native.oftStore, keys.adapter.oftStore] + const remoteEids = [DST_EID, SRC_EID] + const [oftEventAuthority] = new UMI.EventPDA(context.program.publicKey).eventAuthority() + + const recentSlot = await umi.rpc.getSlot({ commitment: 'finalized' }) + const [builder, input] = createLut(umi, { + recentSlot, + authority: umi.payer, + payer: umi.payer, + addresses: globalAddress(dvns, oftStores), + }) + await builder.sendAndConfirm(umi) + + // Extend the lookup table with more addresses + const extendAddresses = dedupeAddresses([ + ...oftStores.flatMap((store) => + remoteEids.flatMap((remote) => pathwayAddresses(store, remote, publicKeyBytes(store))) + ), + + // executor + executor.pda.context(umi.payer.publicKey, 1)[0], + umi.payer.publicKey, + + // additional oapp pda + oftEventAuthority, + context.program.publicKey, + ]) + + const chunkSize = 20 + for (let index = 0; index < extendAddresses.length; index += chunkSize) { + await extendLut(umi, { + authority: umi.payer, + address: input.publicKey, + addresses: extendAddresses.slice(index, index + chunkSize), + }).sendAndConfirm(umi) + } + + input.addresses = [...input.addresses, ...extendAddresses] + context.lookupTable = input + }) +}) + +function globalAddress(dvns: PublicKey[], oapps: PublicKey[]): PublicKey[] { + const addresses: PublicKey[] = [ + publicKey('11111111111111111111111111111111'), + publicKey('Sysvar1nstructions1111111111111111111111111'), + fromWeb3JsPublicKey(TOKEN_2022_PROGRAM_ID), + fromWeb3JsPublicKey(TOKEN_PROGRAM_ID), + fromWeb3JsPublicKey(ASSOCIATED_TOKEN_PROGRAM_ID), + + // Programs + endpoint.programId, + uln.programId, + executor.programId, + priceFeed.programId, + ...dvns, + + // Endpoint PDAs + endpoint.pda.setting()[0], + endpoint.eventAuthority, + endpoint.pda.messageLibraryInfo(uln.pda.messageLib()[0])[0], + + // Uln PDAs + uln.pda.messageLib()[0], + uln.pda.setting()[0], + uln.eventAuthority, + + // Worker Configs + executor.pda.config()[0], + executor.eventAuthority, + priceFeed.pda.priceFeed()[0], + + ...dvns.map((dvn) => new UMI.DvnPDA(publicKey(dvn)).config()[0]), + ...dvns.map((dvn) => new UMI.EventPDA(publicKey(dvn)).eventAuthority()[0]), + + // OApp + ...oapps, + ...oapps.map((oapp) => endpoint.pda.oappRegistry(oapp)[0]), + ] + + return dedupeAddresses(addresses) +} + +function pathwayAddresses(localOApp: PublicKey, remote: number, remoteOApp: Uint8Array): PublicKey[] { + return [ + endpoint.pda.defaultSendLibraryConfig(remote)[0], + endpoint.pda.oappRegistry(localOApp)[0], + endpoint.pda.sendLibraryConfig(localOApp, remote)[0], + endpoint.pda.nonce(localOApp, remote, remoteOApp)[0], + endpoint.pda.pendingNonce(localOApp, remote, remoteOApp)[0], + + uln.pda.defaultSendConfig(remote)[0], + uln.pda.defaultReceiveConfig(remote)[0], + uln.pda.sendConfig(remote, localOApp)[0], + uln.pda.receiveConfig(remote, localOApp)[0], + ] +} + +function dedupeAddresses(addresses: PublicKey[]): PublicKey[] { + const seen = new Set() + return addresses.filter((address) => { + const key = address.toString() + if (seen.has(key)) { + return false + } + seen.add(key) + return true + }) +} diff --git a/examples/oft-solana/test/anchor/suites/layerzero-simulation.test.ts b/examples/oft-solana/test/anchor/suites/layerzero-simulation.test.ts new file mode 100644 index 0000000000..42b2a997c1 --- /dev/null +++ b/examples/oft-solana/test/anchor/suites/layerzero-simulation.test.ts @@ -0,0 +1,127 @@ +import assert from 'assert' + +import { fetchToken } from '@metaplex-foundation/mpl-toolbox' +import { Context, Umi, generateSigner, sol } from '@metaplex-foundation/umi' +import { fromWeb3JsPublicKey, toWeb3JsKeypair, toWeb3JsPublicKey } from '@metaplex-foundation/umi-web3js-adapters' +import { TOKEN_PROGRAM_ID, getOrCreateAssociatedTokenAccount } from '@solana/spl-token' + +import { oft } from '@layerzerolabs/oft-v2-solana-sdk' + +import { DST_EID, OFT_DECIMALS } from '../constants' +import { quoteOft, quoteSend, send } from '../helpers' +import { getGlobalContext, getGlobalKeys, getGlobalUmi } from '../index.test' +import { OftKeySets, TestContext } from '../types' +import { verifyAndReceive } from '../utils' + +describe('LayerZero Simulation', function () { + let umi: Umi | Context + let context: TestContext + let keys: OftKeySets + + before(async function () { + context = getGlobalContext() + umi = getGlobalUmi() + keys = getGlobalKeys() + }) + ;(['native', 'adapter'] as const).forEach((keyLabel) => { + it(`simulates send and receive for ${keyLabel}`, async () => { + const keySet = keys[keyLabel] + if (!keySet.oappAdminTokenAccount) { + throw new Error('Missing admin token account for simulation') + } + + const sendAmount = BigInt(500 * 10 ** OFT_DECIMALS) + + const dest = generateSigner(umi) + await umi.rpc.airdrop(dest.publicKey, sol(10)) + + const tokenDest = await getOrCreateAssociatedTokenAccount( + context.connection, + toWeb3JsKeypair(dest), + toWeb3JsPublicKey(keySet.mint.publicKey), + toWeb3JsPublicKey(dest.publicKey), + false, + undefined, + undefined, + TOKEN_PROGRAM_ID + ) + + const quote = await quoteOft(context, keySet, keySet.oappAdmin, dest.publicKey, DST_EID, sendAmount) + const amountSentLd = quote.oftReceipt.amountSentLd + const amountReceivedLd = quote.oftReceipt.amountReceivedLd + const oftFeeLd = amountSentLd - amountReceivedLd + assert.ok(amountSentLd >= amountReceivedLd) + + const fee = await quoteSend(context, keySet, keySet.oappAdmin, dest.publicKey, DST_EID, sendAmount) + + const beforeSourceBalance = await fetchToken(umi, keySet.oappAdminTokenAccount) + const beforeEscrowBalance = await fetchToken(umi, keySet.escrow.publicKey) + const beforeDestBalance = await fetchToken(umi, fromWeb3JsPublicKey(tokenDest.address)) + const beforeStore = await oft.accounts.fetchOFTStore(umi, keySet.oftStore) + + const packetSentEvent = await send( + context, + keySet, + keySet.oappAdmin, + keySet.oappAdminTokenAccount, + dest.publicKey, + DST_EID, + sendAmount, + fee + ) + + const afterSendSourceBalance = await fetchToken(umi, keySet.oappAdminTokenAccount) + const afterSendEscrowBalance = await fetchToken(umi, keySet.escrow.publicKey) + const afterSendDestBalance = await fetchToken(umi, fromWeb3JsPublicKey(tokenDest.address)) + const afterSendStore = await oft.accounts.fetchOFTStore(umi, keySet.oftStore) + + assert.strictEqual( + afterSendSourceBalance.amount, + beforeSourceBalance.amount - amountSentLd, + 'Source should be debited by amount sent' + ) + + if (keyLabel === 'adapter') { + assert.strictEqual( + afterSendEscrowBalance.amount, + beforeEscrowBalance.amount + amountSentLd, + 'Escrow should hold sent amount for adapter' + ) + assert.strictEqual(afterSendStore.tvlLd, beforeStore.tvlLd + amountReceivedLd) + } else { + assert.strictEqual( + afterSendEscrowBalance.amount, + beforeEscrowBalance.amount + oftFeeLd, + 'Escrow should hold fees for native' + ) + assert.strictEqual(afterSendStore.tvlLd, beforeStore.tvlLd) + } + + assert.strictEqual(afterSendDestBalance.amount, beforeDestBalance.amount) + + await verifyAndReceive(context, keySet, packetSentEvent) + + const afterReceiveDestBalance = await fetchToken(umi, fromWeb3JsPublicKey(tokenDest.address)) + const afterReceiveEscrowBalance = await fetchToken(umi, keySet.escrow.publicKey) + const afterReceiveStore = await oft.accounts.fetchOFTStore(umi, keySet.oftStore) + + assert.strictEqual( + afterReceiveDestBalance.amount, + beforeDestBalance.amount + amountReceivedLd, + 'Destination should receive amount received' + ) + + if (keyLabel === 'adapter') { + assert.strictEqual( + afterReceiveEscrowBalance.amount, + afterSendEscrowBalance.amount - amountReceivedLd, + 'Escrow should release amount received' + ) + assert.strictEqual(afterReceiveStore.tvlLd, afterSendStore.tvlLd - amountReceivedLd) + } else { + assert.strictEqual(afterReceiveEscrowBalance.amount, afterSendEscrowBalance.amount) + assert.strictEqual(afterReceiveStore.tvlLd, afterSendStore.tvlLd) + } + }) + }) +}) diff --git a/examples/oft-solana/test/anchor/suites/quote_instructions.test.ts b/examples/oft-solana/test/anchor/suites/quote_instructions.test.ts new file mode 100644 index 0000000000..1ad34e2a21 --- /dev/null +++ b/examples/oft-solana/test/anchor/suites/quote_instructions.test.ts @@ -0,0 +1,71 @@ +import assert from 'assert' + +import { before, describe, it } from 'mocha' + +import { oft } from '@layerzerolabs/oft-v2-solana-sdk' + +import { DST_EID, OFT_DECIMALS } from '../constants' +import { expectOftError, quoteOft, quoteSend } from '../helpers' +import { getGlobalContext, getGlobalKeys } from '../index.test' +import { OftKeySets, TestContext } from '../types' + +describe('quote instructions', function () { + this.timeout(300000) + + let context: TestContext + let keys: OftKeySets + + before(() => { + context = getGlobalContext() + keys = getGlobalKeys() + }) + ;(['native', 'adapter'] as const).forEach((keyLabel) => { + describe(`${keyLabel} quotes`, () => { + it('rejects slippage when min amount exceeds computed amount', async () => { + const keySet = keys[keyLabel] + const sendAmount = BigInt(2 * 10 ** OFT_DECIMALS) + const minAmount = BigInt(3 * 10 ** OFT_DECIMALS) + + await expectOftError( + async () => + quoteSend( + context, + keySet, + keySet.oappAdmin, + keySet.oappAdmin.publicKey, + DST_EID, + sendAmount, + minAmount + ), + oft.errors.SlippageExceededError, + context.program + ) + }) + + it('returns quoteSend and quoteOft results', async () => { + const keySet = keys[keyLabel] + const sendAmount = BigInt(10 * 10 ** OFT_DECIMALS) + + const quote = await quoteSend( + context, + keySet, + keySet.oappAdmin, + keySet.oappAdmin.publicKey, + DST_EID, + sendAmount + ) + assert.ok(quote.nativeFee >= 0n) + + const oftQuote = await quoteOft( + context, + keySet, + keySet.oappAdmin, + keySet.oappAdmin.publicKey, + DST_EID, + sendAmount + ) + assert.strictEqual(oftQuote.oftReceipt.amountSentLd, sendAmount) + }) + }) + }) +}) diff --git a/examples/oft-solana/test/anchor/suites/send_and_receive.test.ts b/examples/oft-solana/test/anchor/suites/send_and_receive.test.ts new file mode 100644 index 0000000000..f48ad7ad30 --- /dev/null +++ b/examples/oft-solana/test/anchor/suites/send_and_receive.test.ts @@ -0,0 +1,123 @@ +import { Context, Umi } from '@metaplex-foundation/umi' +import { fromWeb3JsPublicKey } from '@metaplex-foundation/umi-web3js-adapters' +import { TOKEN_PROGRAM_ID } from '@solana/spl-token' +import { before, describe, it } from 'mocha' + +import { UMI } from '@layerzerolabs/lz-solana-sdk-v2' +import { oft } from '@layerzerolabs/oft-v2-solana-sdk' + +import { DST_EID, OFT_DECIMALS, endpoint } from '../constants' +import { expectOftError } from '../helpers' +import { getGlobalContext, getGlobalKeys, getGlobalUmi } from '../index.test' +import { OftKeySets, TestContext } from '../types' +import { sendAndConfirm } from '../utils' + +const helper = new UMI.SendHelper() + +describe('send instruction', function () { + this.timeout(300000) + + let context: TestContext + let umi: Umi | Context + let keys: OftKeySets + + before(async function () { + context = getGlobalContext() + umi = getGlobalUmi() + keys = getGlobalKeys() + }) + ;(['native', 'adapter'] as const).forEach((keyLabel) => { + describe(`${keyLabel} send failures`, () => { + it('rejects slippage when min amount exceeds computed amount', async () => { + const { program } = context + const keySet = keys[keyLabel] + const sendAmount = BigInt(1 * 10 ** OFT_DECIMALS) + const minAmount = BigInt(2 * 10 ** OFT_DECIMALS) + if (!keySet.oappAdminTokenAccount) { + throw new Error('Missing admin token account for send test') + } + + const ix = await oft.send( + umi.rpc, + { + payer: keySet.oappAdmin, + tokenMint: keySet.mint.publicKey, + tokenEscrow: keySet.escrow.publicKey, + tokenSource: keySet.oappAdminTokenAccount, + }, + { + dstEid: DST_EID, + to: new Uint8Array(32).fill(1), + amountLd: sendAmount, + minAmountLd: minAmount, + options: new Uint8Array(), + composeMsg: undefined, + nativeFee: 0n, + lzTokenFee: 0n, + }, + { + oft: context.program.publicKey, + endpoint: endpoint.programId, + token: fromWeb3JsPublicKey(TOKEN_PROGRAM_ID), + } + ) + + await expectOftError( + async () => sendAndConfirm(umi, ix, keySet.oappAdmin), + oft.errors.SlippageExceededError, + program + ) + }) + + it('rejects invalid sender when remaining accounts are tampered', async () => { + const { program } = context + const keySet = keys[keyLabel] + if (!keySet.oappAdminTokenAccount) { + throw new Error('Missing admin token account for send test') + } + + const remainingAccounts = await helper.getSendAccounts(umi.rpc, { + payer: keySet.oappAdmin.publicKey, + dstEid: DST_EID, + sender: keySet.oftStore, + receiver: keySet.oftStore, + }) + + const tamperedAccounts = remainingAccounts.slice() + tamperedAccounts[1] = { ...tamperedAccounts[1], pubkey: keySet.mint.publicKey } + + const ix = await oft.send( + umi.rpc, + { + payer: keySet.oappAdmin, + tokenMint: keySet.mint.publicKey, + tokenEscrow: keySet.escrow.publicKey, + tokenSource: keySet.oappAdminTokenAccount, + }, + { + dstEid: DST_EID, + to: new Uint8Array(32).fill(1), + amountLd: 1n, + minAmountLd: 0n, + options: new Uint8Array(), + composeMsg: undefined, + nativeFee: 0n, + lzTokenFee: 0n, + }, + { + oft: context.program.publicKey, + endpoint: endpoint.programId, + token: fromWeb3JsPublicKey(TOKEN_PROGRAM_ID), + }, + tamperedAccounts + ) + + await expectOftError( + async () => sendAndConfirm(umi, ix, keySet.oappAdmin), + oft.errors.InvalidSenderError, + program + ) + }) + }) + }) +}) diff --git a/examples/oft-solana/test/anchor/suites/set_oft_config.test.ts b/examples/oft-solana/test/anchor/suites/set_oft_config.test.ts new file mode 100644 index 0000000000..f226676627 --- /dev/null +++ b/examples/oft-solana/test/anchor/suites/set_oft_config.test.ts @@ -0,0 +1,215 @@ +import assert from 'assert' + +import { Context, PublicKey, Umi, generateSigner, sol } from '@metaplex-foundation/umi' +import { before, describe, it } from 'mocha' + +import { UMI } from '@layerzerolabs/lz-solana-sdk-v2' +import { oft } from '@layerzerolabs/oft-v2-solana-sdk' + +import { endpoint } from '../constants' +import { expectOftError } from '../helpers' +import { getGlobalContext, getGlobalKeys, getGlobalUmi } from '../index.test' +import { OftKeySets, TestContext } from '../types' +import { sendAndConfirm } from '../utils' + +const FEE_TOO_HIGH = 10000 + +describe('set_oft_config', function () { + this.timeout(300000) + + let context: TestContext + let umi: Umi | Context + let keys: OftKeySets + + before(async function () { + context = getGlobalContext() + umi = getGlobalUmi() + keys = getGlobalKeys() + }) + ;(['native', 'adapter'] as const).forEach((keyLabel) => { + describe(`${keyLabel} config`, () => { + let programs: { oft: PublicKey; endpoint: PublicKey } + + before(() => { + programs = { oft: context.program.publicKey, endpoint: endpoint.programId } + }) + + it('rejects unauthorized config updates', async () => { + const { program } = context + const keySet = keys[keyLabel] + const unauthorizedUser = generateSigner(umi) + await umi.rpc.airdrop(unauthorizedUser.publicKey, sol(1)) + + const ix = oft.setOFTConfig( + { + admin: unauthorizedUser, + oftStore: keySet.oftStore, + }, + { + __kind: 'DefaultFee', + defaultFee: 100, + }, + programs + ) + + await expectOftError( + async () => sendAndConfirm(umi, ix, unauthorizedUser), + oft.errors.UnauthorizedError, + program + ) + }) + + it('rejects invalid default fee bps', async () => { + const { program } = context + const keySet = keys[keyLabel] + + const ix = oft.setOFTConfig( + { + admin: keySet.oappAdmin, + oftStore: keySet.oftStore, + }, + { + __kind: 'DefaultFee', + defaultFee: FEE_TOO_HIGH, + }, + programs + ) + + await expectOftError( + async () => sendAndConfirm(umi, ix, keySet.oappAdmin), + oft.errors.InvalidFeeError, + program + ) + }) + + it('sets minimum default fee bps', async () => { + const keySet = keys[keyLabel] + + await sendAndConfirm( + umi, + oft.setOFTConfig( + { + admin: keySet.oappAdmin, + oftStore: keySet.oftStore, + }, + { + __kind: 'DefaultFee', + defaultFee: 0, + }, + programs + ), + keySet.oappAdmin + ) + + const oftStoreAccount = await oft.accounts.fetchOFTStore(umi, keySet.oftStore) + assert.strictEqual(oftStoreAccount.defaultFeeBps, 0) + }) + + it('sets maximum default fee bps', async () => { + const keySet = keys[keyLabel] + + await sendAndConfirm( + umi, + oft.setOFTConfig( + { + admin: keySet.oappAdmin, + oftStore: keySet.oftStore, + }, + { + __kind: 'DefaultFee', + defaultFee: 9999, + }, + programs + ), + keySet.oappAdmin + ) + + const oftStoreAccount = await oft.accounts.fetchOFTStore(umi, keySet.oftStore) + assert.strictEqual(oftStoreAccount.defaultFeeBps, 9999) + }) + + it('updates admin, delegate, and fee', async () => { + const keySet = keys[keyLabel] + + const newAdmin = generateSigner(umi) + await umi.rpc.airdrop(newAdmin.publicKey, sol(10000)) + + await sendAndConfirm( + umi, + oft.setOFTConfig( + { + admin: keySet.oappAdmin, + oftStore: keySet.oftStore, + }, + { + __kind: 'Admin', + admin: newAdmin.publicKey, + }, + programs + ), + keySet.oappAdmin + ) + + const oftStoreAccount = await oft.accounts.fetchOFTStore(umi, keySet.oftStore) + assert.strictEqual(oftStoreAccount.admin, newAdmin.publicKey) + + await sendAndConfirm( + umi, + oft.setOFTConfig( + { + admin: newAdmin, + oftStore: keySet.oftStore, + }, + { + __kind: 'Admin', + admin: keySet.oappAdmin.publicKey, + }, + programs + ), + newAdmin + ) + + await sendAndConfirm( + umi, + oft.setOFTConfig( + { + admin: keySet.oappAdmin, + oftStore: keySet.oftStore, + }, + { + __kind: 'Delegate', + delegate: keySet.delegate.publicKey, + }, + programs + ), + keySet.oappAdmin + ) + + const oappRegistry = await UMI.EndpointProgram.accounts.fetchOAppRegistry( + umi, + endpoint.pda.oappRegistry(keySet.oftStore) + ) + assert.strictEqual(oappRegistry.delegate, keySet.delegate.publicKey) + + await sendAndConfirm( + umi, + oft.setOFTConfig( + { + admin: keySet.oappAdmin, + oftStore: keySet.oftStore, + }, + { + __kind: 'DefaultFee', + defaultFee: 500, + }, + programs + ), + keySet.oappAdmin + ) + + const updatedStore = await oft.accounts.fetchOFTStore(umi, keySet.oftStore) + assert.strictEqual(updatedStore.defaultFeeBps, 500) + }) + }) + }) +}) diff --git a/examples/oft-solana/test/anchor/suites/set_peer_config.test.ts b/examples/oft-solana/test/anchor/suites/set_peer_config.test.ts new file mode 100644 index 0000000000..66252fa422 --- /dev/null +++ b/examples/oft-solana/test/anchor/suites/set_peer_config.test.ts @@ -0,0 +1,204 @@ +import assert from 'assert' + +import { Context, Program, ProgramError, Umi, generateSigner, publicKeyBytes, sol } from '@metaplex-foundation/umi' +import { before, describe, it } from 'mocha' + +import { Options } from '@layerzerolabs/lz-v2-utilities' +import { oft } from '@layerzerolabs/oft-v2-solana-sdk' + +import { DST_EID, SRC_EID } from '../constants' +import { expectOftError } from '../helpers' +import { getGlobalContext, getGlobalKeys, getGlobalUmi } from '../index.test' +import { OftKeySets, TestContext } from '../types' +import { sendAndConfirm, setPeerConfig } from '../utils' + +const enforcedOptions = Options.newOptions().addExecutorLzReceiveOption(200_000, 2_500_000).toBytes() + +describe('set_peer_config', function () { + this.timeout(300000) + + let context: TestContext + let umi: Umi | Context + let keys: OftKeySets + + before(async function () { + context = getGlobalContext() + umi = getGlobalUmi() + keys = getGlobalKeys() + }) + ;(['native', 'adapter'] as const).forEach((keyLabel) => { + describe(`${keyLabel} peer config`, () => { + it('rejects unauthorized peer updates', async () => { + const { program } = context + const keySet = keys[keyLabel] + const invalidSender = generateSigner(umi) + await umi.rpc.airdrop(invalidSender.publicKey, sol(1)) + + const ix = oft.setPeerConfig( + { + admin: invalidSender, + oftStore: keySet.oftStore, + }, + { + __kind: 'PeerAddress', + remote: DST_EID, + peer: publicKeyBytes(keySet.oftStore), + }, + context.programRepo + ) + + await expectOftError( + async () => sendAndConfirm(umi, ix, invalidSender), + oft.errors.UnauthorizedError, + program + ) + }) + + it('rejects invalid fee bps', async () => { + const { program } = context + const keySet = keys[keyLabel] + + const ix = oft.setPeerConfig( + { + admin: keySet.oappAdmin, + oftStore: keySet.oftStore, + }, + { + __kind: 'FeeBps', + remote: DST_EID, + feeBps: 10000, + }, + context.programRepo + ) + + await expectOftError( + async () => sendAndConfirm(umi, ix, keySet.oappAdmin), + oft.errors.InvalidFeeError, + program + ) + }) + + it('rejects invalid enforced options', async () => { + const { program } = context + const keySet = keys[keyLabel] + + const invalidOptions = Uint8Array.from([0, 1]) + const ix = oft.setPeerConfig( + { + admin: keySet.oappAdmin, + oftStore: keySet.oftStore, + }, + { + __kind: 'EnforcedOptions', + remote: DST_EID, + send: invalidOptions, + sendAndCall: invalidOptions, + }, + context.programRepo + ) + + await expectOftError( + async () => sendAndConfirm(umi, ix, keySet.oappAdmin), + class InvalidOptionsError extends ProgramError { + override readonly name: string = 'InvalidOptions' + readonly code: number = 0x1770 // 6000 + constructor(program: Program, cause?: Error) { + super('InvalidOptions', program, cause) + } + }, + program + ) + }) + + it('sets peer addresses and enforced options', async () => { + const keySet = keys[keyLabel] + const peerAddr = publicKeyBytes(keySet.oftStore) + + const dstPeer = await setPeerConfig( + umi as Umi, + keySet, + context.pda, + context.programRepo, + peerAddr, + DST_EID + ) + const srcPeer = await setPeerConfig( + umi as Umi, + keySet, + context.pda, + context.programRepo, + peerAddr, + SRC_EID + ) + + const [dstPeerAccount, srcPeerAccount] = await oft.accounts.fetchAllPeerConfig(umi, [dstPeer, srcPeer]) + assert.strictEqual(dstPeerAccount.peerAddress.toString(), peerAddr.toString()) + assert.strictEqual(srcPeerAccount.peerAddress.toString(), peerAddr.toString()) + + await sendAndConfirm( + umi, + [ + oft.setPeerConfig( + { admin: keySet.oappAdmin, oftStore: keySet.oftStore }, + { + __kind: 'EnforcedOptions', + remote: DST_EID, + send: enforcedOptions, + sendAndCall: enforcedOptions, + }, + context.programRepo + ), + oft.setPeerConfig( + { admin: keySet.oappAdmin, oftStore: keySet.oftStore }, + { + __kind: 'EnforcedOptions', + remote: SRC_EID, + send: enforcedOptions, + sendAndCall: enforcedOptions, + }, + context.programRepo + ), + ], + keySet.oappAdmin + ) + }) + + it('sets outbound rate limit values', async () => { + const keySet = keys[keyLabel] + + await sendAndConfirm( + umi, + oft.setPeerConfig( + { admin: keySet.oappAdmin, oftStore: keySet.oftStore }, + { + __kind: 'OutboundRateLimit', + remote: DST_EID, + rateLimit: { refillPerSecond: 1n, capacity: 5n }, + }, + context.programRepo + ), + keySet.oappAdmin + ) + + const [peer] = context.pda.peer(keySet.oftStore, DST_EID) + const peerConfig = await oft.accounts.fetchPeerConfig(umi, peer) + assert.ok(peerConfig.outboundRateLimiter.__option === 'Some') + assert.strictEqual(peerConfig.outboundRateLimiter.value.capacity, 5n) + + await sendAndConfirm( + umi, + oft.setPeerConfig( + { admin: keySet.oappAdmin, oftStore: keySet.oftStore }, + { + __kind: 'OutboundRateLimit', + remote: DST_EID, + rateLimit: undefined, + }, + context.programRepo + ), + keySet.oappAdmin + ) + }) + }) + }) +}) diff --git a/examples/oft-solana/test/anchor/suites/withdraw_fee.test.ts b/examples/oft-solana/test/anchor/suites/withdraw_fee.test.ts new file mode 100644 index 0000000000..a5eff9dd22 --- /dev/null +++ b/examples/oft-solana/test/anchor/suites/withdraw_fee.test.ts @@ -0,0 +1,165 @@ +import assert from 'assert' + +import { fetchToken } from '@metaplex-foundation/mpl-toolbox' +import { Context, PublicKey, Umi, generateSigner, sol } from '@metaplex-foundation/umi' +import { before, describe, it } from 'mocha' + +import { oft } from '@layerzerolabs/oft-v2-solana-sdk' + +import { DST_EID, OFT_DECIMALS } from '../constants' +import { expectOftError, quoteOft, quoteSend, send } from '../helpers' +import { getGlobalContext, getGlobalKeys, getGlobalUmi } from '../index.test' +import { OftKeySets, TestContext } from '../types' +import { sendAndConfirm } from '../utils' + +const SEND_AMOUNT = BigInt(100 * 10 ** OFT_DECIMALS) + +describe('withdraw_fee', function () { + this.timeout(300000) + + let context: TestContext + let umi: Umi | Context + let keys: OftKeySets + + before(async function () { + context = getGlobalContext() + umi = getGlobalUmi() + keys = getGlobalKeys() + }) + ;(['native', 'adapter'] as const).forEach((keyLabel) => { + describe(`${keyLabel} fee withdrawal`, () => { + it('rejects unauthorized fee withdrawal', async () => { + const { program } = context + const keySet = keys[keyLabel] + const invalidSender = generateSigner(umi) + await umi.rpc.airdrop(invalidSender.publicKey, sol(1)) + + const ix = oft.withdrawFee( + { + admin: invalidSender, + mint: keySet.mint.publicKey, + escrow: keySet.escrow.publicKey, + dest: keySet.oappAdminTokenAccount as PublicKey, + }, + 1n, + { oft: context.program.publicKey } + ) + + await expectOftError( + async () => sendAndConfirm(umi, ix, invalidSender), + oft.errors.UnauthorizedError, + program + ) + }) + + it('rejects withdrawal above available fees', async () => { + const { program } = context + const keySet = keys[keyLabel] + if (!keySet.oappAdminTokenAccount) { + throw new Error('Missing admin token account for fee withdrawal') + } + + const fee = await quoteSend( + context, + keySet, + keySet.oappAdmin, + keySet.oappAdmin.publicKey, + DST_EID, + SEND_AMOUNT + ) + + await send( + context, + keySet, + keySet.oappAdmin, + keySet.oappAdminTokenAccount, + keySet.oappAdmin.publicKey, + DST_EID, + SEND_AMOUNT, + fee + ) + + const oftStore = await oft.accounts.fetchOFTStore(umi, keySet.oftStore) + const escrowBalance = await fetchToken(umi, keySet.escrow.publicKey) + const availableFee = escrowBalance.amount - oftStore.tvlLd + + const ix = oft.withdrawFee( + { + admin: keySet.oappAdmin, + mint: keySet.mint.publicKey, + escrow: keySet.escrow.publicKey, + dest: keySet.oappAdminTokenAccount, + }, + availableFee + 1n, + { oft: context.program.publicKey } + ) + + await expectOftError( + async () => sendAndConfirm(umi, ix, keySet.oappAdmin), + oft.errors.InvalidFeeError, + program + ) + }) + + it('withdraws available fees', async () => { + const keySet = keys[keyLabel] + if (!keySet.oappAdminTokenAccount) { + throw new Error('Missing admin token account for fee withdrawal') + } + + const fee = await quoteSend( + context, + keySet, + keySet.oappAdmin, + keySet.oappAdmin.publicKey, + DST_EID, + SEND_AMOUNT + ) + const quote = await quoteOft( + context, + keySet, + keySet.oappAdmin, + keySet.oappAdmin.publicKey, + DST_EID, + SEND_AMOUNT + ) + const amountSentLd = quote.oftReceipt.amountSentLd + const amountReceivedLd = quote.oftReceipt.amountReceivedLd + const oftFeeLd = amountSentLd - amountReceivedLd + + await send( + context, + keySet, + keySet.oappAdmin, + keySet.oappAdminTokenAccount, + keySet.oappAdmin.publicKey, + DST_EID, + SEND_AMOUNT, + fee + ) + + const oftStore = await oft.accounts.fetchOFTStore(umi, keySet.oftStore) + const escrowBalance = await fetchToken(umi, keySet.escrow.publicKey) + const availableFee = escrowBalance.amount - oftStore.tvlLd + assert.ok(availableFee >= oftFeeLd) + + const destBalanceBefore = await fetchToken(umi, keySet.oappAdminTokenAccount) + + const ix = oft.withdrawFee( + { + admin: keySet.oappAdmin, + mint: keySet.mint.publicKey, + escrow: keySet.escrow.publicKey, + dest: keySet.oappAdminTokenAccount, + }, + oftFeeLd, + { oft: context.program.publicKey } + ) + await sendAndConfirm(umi, ix, keySet.oappAdmin) + + const destBalanceAfter = await fetchToken(umi, keySet.oappAdminTokenAccount) + assert.strictEqual(destBalanceAfter.amount, destBalanceBefore.amount + oftFeeLd) + }) + }) + }) +}) diff --git a/examples/oft-solana/test/anchor/types.ts b/examples/oft-solana/test/anchor/types.ts new file mode 100644 index 0000000000..37b183bf73 --- /dev/null +++ b/examples/oft-solana/test/anchor/types.ts @@ -0,0 +1,42 @@ +import { + AddressLookupTableInput, + Context, + KeypairSigner, + Program, + ProgramRepositoryInterface, + PublicKey, +} from '@metaplex-foundation/umi' +import { Connection } from '@solana/web3.js' + +import { UMI } from '@layerzerolabs/lz-solana-sdk-v2' +import { OftPDA } from '@layerzerolabs/oft-v2-solana-sdk' + +export type PacketSentEvent = UMI.EndpointProgram.events.PacketSentEvent + +export interface TestContext { + umi: Context + connection: Connection + executor: KeypairSigner + program: Program + programRepo: ProgramRepositoryInterface + pda: OftPDA + lookupTable?: AddressLookupTableInput + keys?: OftKeySets +} + +export interface OftKeySets { + native: OftKeys + adapter: OftKeys +} + +export interface OftKeys { + escrow: KeypairSigner + mint: KeypairSigner + tokenMintAuthority: PublicKey + oappAdmin: KeypairSigner + oappAdminTokenAccount?: PublicKey + oftStore: PublicKey + delegate: KeypairSigner + pauser: KeypairSigner + unpauser: KeypairSigner +} diff --git a/examples/oft-solana/test/anchor/utils.ts b/examples/oft-solana/test/anchor/utils.ts new file mode 100755 index 0000000000..a8a3ee3723 --- /dev/null +++ b/examples/oft-solana/test/anchor/utils.ts @@ -0,0 +1,323 @@ +import { hexlify } from '@ethersproject/bytes' +import { + AddressLookupTableInput, + Context, + ProgramRepositoryInterface, + PublicKey, + RpcConfirmTransactionResult, + Signer, + TransactionBuilder, + Umi, + WrappedInstruction, + createNoopSigner, + publicKeyBytes, +} from '@metaplex-foundation/umi' +import { + fromWeb3JsInstruction, + fromWeb3JsPublicKey, + toWeb3JsKeypair, + toWeb3JsPublicKey, +} from '@metaplex-foundation/umi-web3js-adapters' +import { sign, utils } from '@noble/secp256k1' +import { + createAssociatedTokenAccountInstruction, + createInitializeMintInstruction, + createMintToInstruction, + createMultisig, + getAssociatedTokenAddressSync, + getMintLen, +} from '@solana/spl-token' +import * as web3 from '@solana/web3.js' + +import { UMI } from '@layerzerolabs/lz-solana-sdk-v2' +import { Options, PacketSerializer, PacketV1Codec } from '@layerzerolabs/lz-v2-utilities' +import { OftPDA, oft } from '@layerzerolabs/oft-v2-solana-sdk' + +import { DST_EID, DVN_SIGNERS, OFT_DECIMALS, SRC_EID, dvns, endpoint, executor, uln } from './constants' +import { OftKeys, PacketSentEvent, TestContext } from './types' + +async function signWithECDSA( + data: Buffer, + privateKey: Uint8Array +): Promise<{ signature: Uint8Array; recoveryId: number }> { + const [signature, recoveryId] = await sign(Uint8Array.from(data), utils.bytesToHex(privateKey), { + canonical: true, + recovered: true, + der: false, + }) + return { + signature, + recoveryId, + } +} + +export async function initMint( + context: TestContext, + keys: OftKeys, + tokenProgram: PublicKey, + decimals: number = OFT_DECIMALS +): Promise { + const { connection } = context + const multiSigKey = await createMultisig( + connection, + toWeb3JsKeypair(keys.oappAdmin), + [toWeb3JsPublicKey(keys.oftStore), toWeb3JsPublicKey(keys.oappAdmin.publicKey)], + 1, + undefined, + { + commitment: 'confirmed', + preflightCommitment: 'confirmed', + }, + toWeb3JsPublicKey(tokenProgram) + ) + keys.tokenMintAuthority = fromWeb3JsPublicKey(multiSigKey) + + const mintLen = getMintLen([]) + const mintLamports = await connection.getMinimumBalanceForRentExemption(mintLen) + const mintAmount = 100000 * 10 ** decimals + + const tokenAccount = getAssociatedTokenAddressSync( + toWeb3JsPublicKey(keys.mint.publicKey), + toWeb3JsPublicKey(keys.oappAdmin.publicKey), + false, + toWeb3JsPublicKey(tokenProgram) + ) + keys.oappAdminTokenAccount = fromWeb3JsPublicKey(tokenAccount) + + const createMintIx = [ + web3.SystemProgram.createAccount({ + fromPubkey: toWeb3JsPublicKey(keys.oappAdmin.publicKey), + newAccountPubkey: toWeb3JsPublicKey(keys.mint.publicKey), + space: mintLen, + lamports: mintLamports, + programId: toWeb3JsPublicKey(tokenProgram), + }), + ] + + createMintIx.push( + createInitializeMintInstruction( + toWeb3JsPublicKey(keys.mint.publicKey), + decimals, + toWeb3JsPublicKey(keys.tokenMintAuthority), + null, + toWeb3JsPublicKey(tokenProgram) + ), + createAssociatedTokenAccountInstruction( + toWeb3JsPublicKey(keys.oappAdmin.publicKey), + tokenAccount, + toWeb3JsPublicKey(keys.oappAdmin.publicKey), + toWeb3JsPublicKey(keys.mint.publicKey), + toWeb3JsPublicKey(tokenProgram) + ), + createMintToInstruction( + toWeb3JsPublicKey(keys.mint.publicKey), + tokenAccount, + toWeb3JsPublicKey(keys.tokenMintAuthority), + mintAmount, + [toWeb3JsKeypair(keys.oappAdmin)], + toWeb3JsPublicKey(tokenProgram) + ) + ) + + await sendAndConfirm(context.umi, createMintIx, [keys.oappAdmin, keys.mint]) +} + +export async function setPeerConfig( + umi: Umi, + keys: OftKeys, + pda: OftPDA, + programRepo: ProgramRepositoryInterface, + peerAddress: Uint8Array, + dstEid: number = DST_EID +): Promise { + const [peer] = pda.peer(keys.oftStore, dstEid) + + const ix = oft.setPeerConfig( + { + admin: keys.oappAdmin, + oftStore: keys.oftStore, + }, + { + __kind: 'PeerAddress', + remote: dstEid, + peer: peerAddress, + }, + programRepo + ) + await sendAndConfirm(umi, ix, keys.oappAdmin) + return peer +} + +export async function verifyByDvn(context: TestContext, packetSentEvent: PacketSentEvent): Promise { + const packetBytes = packetSentEvent.encodedPacket + + const expiration = BigInt(Math.floor(new Date().getTime() / 1000 + 120)) + const { umi } = context + for (const programId of dvns) { + const dvn = new UMI.DVNProgram.DVN(programId) + const [requiredDVN] = dvn.pda.config() + await new TransactionBuilder( + [ + uln.initVerify(umi.payer, { + dvn: requiredDVN, + packetBytes, + }), + await dvn.invoke( + umi.rpc, + umi.payer, + { + vid: DST_EID % 30000, + instruction: uln.verify(createNoopSigner(requiredDVN), { packetBytes, confirmations: 10 }) + .instruction, + expiration, + }, + { + sign: async (message: Buffer): Promise<{ signature: Uint8Array; recoveryId: number }[]> => { + return Promise.all(DVN_SIGNERS.map(async (s) => signWithECDSA(message, s))) + }, + } + ), + ], + { addressLookupTables: context.lookupTable === undefined ? undefined : [context.lookupTable] } + ).sendAndConfirm(umi, { + send: { preflightCommitment: 'confirmed', commitment: 'confirmed' }, + }) + } +} + +export async function commitVerification( + context: TestContext, + sender: Uint8Array, + receiver: PublicKey, + packetSentEvent: PacketSentEvent +): Promise { + const packetBytes = packetSentEvent.encodedPacket + const deserializedPacket = PacketV1Codec.fromBytes(packetSentEvent.encodedPacket) + const { umi } = context + const expiration = BigInt(Math.floor(new Date().getTime() / 1000 + 120)) + + await new TransactionBuilder([ + endpoint.initVerify(umi.payer, { + srcEid: SRC_EID, + sender, + receiver, + nonce: BigInt(deserializedPacket.nonce()), + }), + await uln.commitVerification(umi.rpc, packetBytes, endpoint.programId), + ]).sendAndConfirm(umi, { send: { preflightCommitment: 'confirmed', commitment: 'confirmed' } }) + + for (const programId of dvns) { + const dvn = new UMI.DVNProgram.DVN(programId) + const [requiredDVN] = dvn.pda.config() + await new TransactionBuilder([ + await dvn.invoke( + umi.rpc, + umi.payer, + { + vid: DST_EID % 30000, + instruction: uln.closeVerify(createNoopSigner(requiredDVN), { + receiver, + packetBytes, + }).instruction, + expiration, + }, + { + sign: async (message: Buffer): Promise<{ signature: Uint8Array; recoveryId: number }[]> => { + return Promise.all(DVN_SIGNERS.map(async (s) => signWithECDSA(message, s))) + }, + } + ), + ]).sendAndConfirm(umi, { send: { preflightCommitment: 'confirmed', commitment: 'confirmed' } }) + } +} + +export async function verifyAndReceive( + context: TestContext, + oftKeys: OftKeys, + packetSentEvent: PacketSentEvent +): Promise { + const { umi } = context + await verifyByDvn(context, packetSentEvent) + await commitVerification(context, publicKeyBytes(oftKeys.oftStore), oftKeys.oftStore, packetSentEvent) + return receive(context, umi, packetSentEvent) +} + +export async function receive(context: TestContext, umi: Context, packetSentEvent: PacketSentEvent): Promise { + const deserializedPacket = PacketSerializer.deserialize(packetSentEvent.encodedPacket) + const { options } = packetSentEvent + const lzReceiveOptions = Options.fromOptions(hexlify(options)).decodeExecutorLzReceiveOption() + const { instructions, signers, addressLookupTables } = await executor.execute(umi.rpc, umi.payer, { + packet: deserializedPacket, + extraData: new Uint8Array(2).fill(0), + value: lzReceiveOptions?.value, + }) + const newAddressLookupTables = [ + ...(context.lookupTable ? [context.lookupTable] : []), + ...(addressLookupTables || []), + ] + const { signature } = await sendAndConfirm( + umi, + instructions.map((ix, index) => ({ + instruction: ix, + signers: index === 0 ? signers : [], + bytesCreatedOnChain: 0, + })), + [umi.payer, ...signers], + 200_000, + newAddressLookupTables + ) + return signature +} + +export async function sendAndConfirm( + umi: Pick, + instructions: WrappedInstruction | WrappedInstruction[] | web3.TransactionInstruction[], + signers: Signer | Signer[], + computeUnitsLimit = 0, + addressLookupTables?: AddressLookupTableInput[] +): Promise<{ + signature: Uint8Array + result: RpcConfirmTransactionResult +}> { + if (!Array.isArray(instructions)) { + instructions = [instructions] + } + if (instructions[0] instanceof web3.TransactionInstruction) { + instructions = (instructions as web3.TransactionInstruction[]).map((ix) => { + return { + instruction: fromWeb3JsInstruction(ix), + signers: [], + bytesCreatedOnChain: 0, + } + }) + } else { + instructions = instructions as WrappedInstruction[] + } + const feePayer = Array.isArray(signers) ? signers[0] : signers + if (Array.isArray(signers) && signers.length > 1) { + const ixSigners = signers.slice(1) + instructions.forEach((ix) => { + ix.signers = ixSigners + }) + } + if (computeUnitsLimit > 0) { + const computeUnitsBudgetIX = web3.ComputeBudgetProgram.setComputeUnitLimit({ + units: computeUnitsLimit, + }) + instructions = [ + { + instruction: fromWeb3JsInstruction(computeUnitsBudgetIX), + signers: [], + bytesCreatedOnChain: 0, + }, + ...instructions, + ] + } + return new TransactionBuilder(instructions, { feePayer: feePayer, addressLookupTables }) + .sendAndConfirm(umi, { + send: { preflightCommitment: 'confirmed', commitment: 'confirmed' }, + }) + .then((result) => { + return { signature: result.signature, result: result.result } + }) +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 91e579cd40..484d0d6f0f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2493,6 +2493,9 @@ importers: '@metaplex-foundation/umi-web3js-adapters': specifier: ^0.9.2 version: 0.9.2(@metaplex-foundation/umi@0.9.2)(@solana/web3.js@1.98.0) + '@noble/secp256k1': + specifier: ^1.7.1 + version: 1.7.1 '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 version: 3.0.5(ethers@5.7.2)(hardhat@2.22.12) @@ -2544,6 +2547,9 @@ importers: '@types/node': specifier: ~18.18.14 version: 18.18.14 + axios: + specifier: ^1.6.2 + version: 1.8.4(debug@4.3.7) bs58: specifier: ^6.0.0 version: 6.0.0 @@ -2601,12 +2607,18 @@ importers: solidity-bytes-utils: specifier: ^0.8.2 version: 0.8.2 + ts-mocha: + specifier: ^10.0.0 + version: 10.1.0(mocha@10.2.0) ts-node: specifier: ^10.9.2 version: 10.9.2(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3) typescript: specifier: ^5.4.4 version: 5.5.3 + zx: + specifier: ^8.1.3 + version: 8.8.5 examples/oft-upgradeable: devDependencies: @@ -4343,7 +4355,7 @@ importers: version: 22.15.3 axios: specifier: ^1.7.2 - version: 1.8.4 + version: 1.8.4(debug@4.3.7) cli-table3: specifier: ^0.6.5 version: 0.6.5 @@ -6645,7 +6657,7 @@ packages: resolution: {integrity: sha512-kJsoy4fAPTOhzVr7Vwq8s/AUg6BQiJDa7WOqRzev4zsuIS3+JCuIZ6vUd7UBsjnxtmguJJulMRs9qWCzVBt2XA==} engines: {node: '>=15.10.0'} dependencies: - axios: 1.7.4(debug@4.3.7) + axios: 1.7.4 got: 11.8.6 transitivePeerDependencies: - debug @@ -9122,7 +9134,7 @@ packages: '@ledgerhq/hw-transport-webhid': 6.30.0 '@ledgerhq/hw-transport-webusb': 6.29.4 '@mysten/bcs': 1.2.0 - axios: 1.8.4 + axios: 1.8.4(debug@4.3.7) bech32: 2.0.0 bignumber.js: 9.1.2 bip32: 5.0.0-rc.0(typescript@5.5.3) @@ -9150,7 +9162,7 @@ packages: '@ledgerhq/hw-transport-webhid': 6.30.0 '@ledgerhq/hw-transport-webusb': 6.29.4 '@mysten/bcs': 1.2.0 - axios: 1.8.4 + axios: 1.8.4(debug@4.3.7) bech32: 2.0.0 bignumber.js: 9.1.2 bip32: 5.0.0-rc.0(typescript@5.5.3) @@ -9178,7 +9190,7 @@ packages: '@ledgerhq/hw-transport-webhid': 6.30.0 '@ledgerhq/hw-transport-webusb': 6.29.4 '@mysten/bcs': 1.2.0 - axios: 1.8.4 + axios: 1.8.4(debug@4.3.7) bech32: 2.0.0 bignumber.js: 9.1.2 bip32: 5.0.0-rc.0(typescript@5.5.3) @@ -12326,7 +12338,7 @@ packages: '@ton/crypto': 3.3.0 '@ton/sandbox': 0.22.0(@ton/core@0.59.0)(@ton/crypto@3.3.0) '@ton/test-utils': 0.4.2(@jest/globals@29.7.0)(@ton/core@0.59.0)(chai@4.5.0) - axios: 1.7.9 + axios: 1.8.4(debug@4.3.7) dataloader: 2.2.2 symbol.inspect: 1.0.1 teslabot: 1.5.0 @@ -12354,7 +12366,7 @@ packages: '@ton/crypto': 3.3.0 '@ton/sandbox': 0.22.0(@ton/core@0.59.0)(@ton/crypto@3.3.0) '@ton/test-utils': 0.4.2(@ton/core@0.59.0)(chai@4.4.1) - axios: 1.7.9 + axios: 1.8.4(debug@4.3.7) dataloader: 2.2.2 symbol.inspect: 1.0.1 teslabot: 1.5.0 @@ -12383,7 +12395,7 @@ packages: '@ton/crypto': 3.3.0 '@ton/sandbox': 0.22.0(@ton/core@0.59.0)(@ton/crypto@3.3.0) '@ton/test-utils': 0.4.2(@jest/globals@29.7.0)(@ton/core@0.59.0)(chai@4.5.0) - axios: 1.7.9 + axios: 1.8.4(debug@4.3.7) dataloader: 2.2.2 symbol.inspect: 1.0.1 teslabot: 1.5.0 @@ -12411,7 +12423,7 @@ packages: '@ton/crypto': 3.3.0 '@ton/sandbox': 0.22.0(@ton/core@0.59.0)(@ton/crypto@3.3.0) '@ton/test-utils': 0.4.2(@jest/globals@29.7.0)(@ton/core@0.59.0)(chai@4.5.0) - axios: 1.7.9 + axios: 1.8.4(debug@4.3.7) dataloader: 2.2.2 symbol.inspect: 1.0.1 teslabot: 1.5.0 @@ -12689,7 +12701,7 @@ packages: '@ethersproject/address': 5.7.0 '@matterlabs/hardhat-zksync-solc': 1.2.5(hardhat@2.22.12) '@nomicfoundation/hardhat-verify': 2.0.11(hardhat@2.22.12) - axios: 1.7.4(debug@4.3.7) + axios: 1.8.4(debug@4.3.7) cbor: 9.0.2 chai: 4.5.0 chalk: 4.1.2 @@ -14888,7 +14900,7 @@ packages: '@ton/ton': /@layerzerolabs/ton@15.2.0-rc.3(@layerzerolabs/ton@15.2.0-rc.3)(@swc/core@1.4.0)(@ton/core@0.59.0)(@ton/crypto@3.3.0)(@types/node@18.18.14)(typescript@5.5.3) '@tonconnect/sdk': 2.2.0 arg: 5.0.2 - axios: 1.8.4 + axios: 1.8.4(debug@4.3.7) chalk: 4.1.2 dotenv: 16.4.7 inquirer: 8.2.6 @@ -14919,7 +14931,7 @@ packages: '@ton/ton': /@layerzerolabs/ton@15.2.0-rc.3(@jest/globals@29.7.0)(@layerzerolabs/ton@15.2.0-rc.3)(@ton/core@0.59.0)(@ton/crypto@3.3.0)(@types/node@18.18.14)(chai@4.5.0)(typescript@5.5.3) '@tonconnect/sdk': 2.2.0 arg: 5.0.2 - axios: 1.8.4 + axios: 1.8.4(debug@4.3.7) chalk: 4.1.2 dotenv: 16.4.7 inquirer: 8.2.6 @@ -14950,7 +14962,7 @@ packages: '@ton/ton': /@layerzerolabs/ton@15.2.0-rc.3(@layerzerolabs/ton@15.2.0-rc.3)(@ton/core@0.59.0)(@ton/crypto@3.3.0)(@types/node@22.15.3)(typescript@5.5.3) '@tonconnect/sdk': 2.2.0 arg: 5.0.2 - axios: 1.8.4 + axios: 1.8.4(debug@4.3.7) chalk: 4.1.2 dotenv: 16.4.7 inquirer: 8.2.6 @@ -16302,6 +16314,11 @@ packages: is-shared-array-buffer: 1.0.2 dev: true + /arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true + /arrify@2.0.1: resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} engines: {node: '>=8'} @@ -16430,7 +16447,7 @@ packages: - debug dev: true - /axios@1.7.4(debug@4.3.7): + /axios@1.7.4: resolution: {integrity: sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==} dependencies: follow-redirects: 1.15.9(debug@4.3.7) @@ -16439,28 +16456,19 @@ packages: transitivePeerDependencies: - debug - /axios@1.7.9: - resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} - dependencies: - follow-redirects: 1.15.9(debug@4.3.7) - form-data: 4.0.1 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - - /axios@1.8.4: + /axios@1.8.4(debug@4.3.5): resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} dependencies: - follow-redirects: 1.15.9(debug@4.3.7) + follow-redirects: 1.15.9(debug@4.3.5) form-data: 4.0.1 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - /axios@1.8.4(debug@4.3.5): + /axios@1.8.4(debug@4.3.7): resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} dependencies: - follow-redirects: 1.15.9(debug@4.3.5) + follow-redirects: 1.15.9(debug@4.3.7) form-data: 4.0.1 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -18077,6 +18085,11 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + dev: true + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -19188,7 +19201,7 @@ packages: optional: true dependencies: '@solidity-parser/parser': 0.14.5 - axios: 1.8.4 + axios: 1.8.4(debug@4.3.7) cli-table3: 0.5.1 colors: 1.4.0 ethereum-cryptography: 1.2.0 @@ -26378,7 +26391,7 @@ packages: '@babel/runtime': 7.25.6 '@ethersproject/abi': 5.8.0 '@tronweb3/google-protobuf': 3.21.4 - axios: 1.8.4 + axios: 1.8.4(debug@4.3.7) bignumber.js: 9.1.2 ethereum-cryptography: 2.1.3 ethers: 5.7.2 @@ -26505,6 +26518,19 @@ packages: yargs-parser: 21.1.1 dev: true + /ts-mocha@10.1.0(mocha@10.2.0): + resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X + dependencies: + mocha: 10.2.0 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + dev: true + /ts-mocha@11.1.0(mocha@11.7.1)(ts-node@10.9.2): resolution: {integrity: sha512-yT7FfzNRCu8ZKkYvAOiH01xNma/vLq6Vit7yINKYFNVP8e5UyrYXSOMIipERTpzVKJQ4Qcos5bQo1tNERNZevQ==} engines: {node: '>= 6.X.X'} @@ -26620,6 +26646,21 @@ packages: yn: 3.1.1 dev: true + /ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + dev: true + /tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} dependencies: @@ -27991,6 +28032,11 @@ packages: yargs-parser: 2.4.1 dev: true + /yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + dev: true + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} @@ -28045,6 +28091,12 @@ packages: /zod@3.22.4: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + /zx@8.8.5: + resolution: {integrity: sha512-SNgDF5L0gfN7FwVOdEFguY3orU5AkfFZm9B5YSHog/UDHv+lvmd82ZAsOenOkQixigwH2+yyH198AwNdKhj+RA==} + engines: {node: '>= 12.17.0'} + hasBin: true + dev: true + github.com/LayerZero-Labs/es5-ext/7e360296a7e27176e240bc063b32f5ada55f9aa6: resolution: {tarball: https://codeload.github.com/LayerZero-Labs/es5-ext/tar.gz/7e360296a7e27176e240bc063b32f5ada55f9aa6} name: es5-ext