From 4df85d1042d22b1a983783575d993e432e794d8e Mon Sep 17 00:00:00 2001 From: layerzero-bot <131946195+layerzero-bot@users.noreply.github.com> Date: Wed, 4 Dec 2024 18:43:43 +0000 Subject: [PATCH 01/24] =?UTF-8?q?=F0=9F=9A=80=20Version=20packages=20(#110?= =?UTF-8?q?7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: github-actions[bot] --- .changeset/brown-candles-sort.md | 8 -------- packages/devtools-solana/CHANGELOG.md | 6 ++++++ packages/devtools-solana/package.json | 4 ++-- packages/protocol-devtools-solana/CHANGELOG.md | 8 ++++++++ packages/protocol-devtools-solana/package.json | 8 ++++---- packages/test-devtools-solana/CHANGELOG.md | 6 ++++++ packages/test-devtools-solana/package.json | 2 +- packages/ua-devtools-solana/CHANGELOG.md | 9 +++++++++ packages/ua-devtools-solana/package.json | 12 ++++++------ pnpm-lock.yaml | 12 ++++++------ 10 files changed, 48 insertions(+), 27 deletions(-) delete mode 100644 .changeset/brown-candles-sort.md diff --git a/.changeset/brown-candles-sort.md b/.changeset/brown-candles-sort.md deleted file mode 100644 index a877c7dd8..000000000 --- a/.changeset/brown-candles-sort.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@layerzerolabs/devtools-solana": patch -"@layerzerolabs/protocol-devtools-solana": patch -"@layerzerolabs/test-devtools-solana": patch -"@layerzerolabs/ua-devtools-solana": patch ---- - -Update web3js dependencies diff --git a/packages/devtools-solana/CHANGELOG.md b/packages/devtools-solana/CHANGELOG.md index 47c924014..6ad82f3e4 100644 --- a/packages/devtools-solana/CHANGELOG.md +++ b/packages/devtools-solana/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/devtools-solana +## 1.0.3 + +### Patch Changes + +- e3c04dc: Update web3js dependencies + ## 1.0.2 ### Patch Changes diff --git a/packages/devtools-solana/package.json b/packages/devtools-solana/package.json index 4552dd6ce..67e377553 100644 --- a/packages/devtools-solana/package.json +++ b/packages/devtools-solana/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/devtools-solana", - "version": "1.0.2", + "version": "1.0.3", "description": "Utilities for LayerZero Solana projects", "repository": { "type": "git", @@ -46,7 +46,7 @@ "@layerzerolabs/io-devtools": "~0.1.12", "@layerzerolabs/lz-definitions": "^3.0.21", "@layerzerolabs/test-devtools": "~0.4.1", - "@layerzerolabs/test-devtools-solana": "~0.0.3", + "@layerzerolabs/test-devtools-solana": "~0.0.4", "@solana/web3.js": "~1.95.8", "@sqds/multisig": "^2.1.3", "@swc/core": "^1.4.0", diff --git a/packages/protocol-devtools-solana/CHANGELOG.md b/packages/protocol-devtools-solana/CHANGELOG.md index 3f7b89e75..ffbbd3a7a 100644 --- a/packages/protocol-devtools-solana/CHANGELOG.md +++ b/packages/protocol-devtools-solana/CHANGELOG.md @@ -1,5 +1,13 @@ # @layerzerolabs/protocol-devtools-solana +## 4.0.2 + +### Patch Changes + +- e3c04dc: Update web3js dependencies +- Updated dependencies [e3c04dc] + - @layerzerolabs/devtools-solana@1.0.3 + ## 4.0.1 ### Patch Changes diff --git a/packages/protocol-devtools-solana/package.json b/packages/protocol-devtools-solana/package.json index 0f72148d2..7d915e100 100644 --- a/packages/protocol-devtools-solana/package.json +++ b/packages/protocol-devtools-solana/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/protocol-devtools-solana", - "version": "4.0.1", + "version": "4.0.2", "description": "Utilities for LayerZero Solana protocol programs", "repository": { "type": "git", @@ -43,14 +43,14 @@ }, "devDependencies": { "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-solana": "~1.0.2", + "@layerzerolabs/devtools-solana": "~1.0.3", "@layerzerolabs/io-devtools": "~0.1.12", "@layerzerolabs/lz-definitions": "^3.0.21", "@layerzerolabs/lz-solana-sdk-v2": "^3.0.0", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/protocol-devtools": "~1.1.1", "@layerzerolabs/test-devtools": "~0.4.1", - "@layerzerolabs/test-devtools-solana": "~0.0.3", + "@layerzerolabs/test-devtools-solana": "~0.0.4", "@layerzerolabs/ua-devtools": "~3.0.1", "@solana/web3.js": "~1.95.8", "@swc/core": "^1.4.0", @@ -68,7 +68,7 @@ }, "peerDependencies": { "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-solana": "~1.0.2", + "@layerzerolabs/devtools-solana": "~1.0.3", "@layerzerolabs/io-devtools": "~0.1.12", "@layerzerolabs/lz-definitions": "^3.0.21", "@layerzerolabs/lz-solana-sdk-v2": "^3.0.0", diff --git a/packages/test-devtools-solana/CHANGELOG.md b/packages/test-devtools-solana/CHANGELOG.md index a625a070a..078ad825f 100644 --- a/packages/test-devtools-solana/CHANGELOG.md +++ b/packages/test-devtools-solana/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/test-devtools-solana +## 0.0.4 + +### Patch Changes + +- e3c04dc: Update web3js dependencies + ## 0.0.3 ### Patch Changes diff --git a/packages/test-devtools-solana/package.json b/packages/test-devtools-solana/package.json index b3a377a0f..9c29c0239 100644 --- a/packages/test-devtools-solana/package.json +++ b/packages/test-devtools-solana/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/test-devtools-solana", - "version": "0.0.3", + "version": "0.0.4", "description": "Helpers for testing LayerZero Solana packages", "repository": { "type": "git", diff --git a/packages/ua-devtools-solana/CHANGELOG.md b/packages/ua-devtools-solana/CHANGELOG.md index 9f6eeebec..de20dac94 100644 --- a/packages/ua-devtools-solana/CHANGELOG.md +++ b/packages/ua-devtools-solana/CHANGELOG.md @@ -1,5 +1,14 @@ # @layerzerolabs/ua-devtools-solana +## 4.0.3 + +### Patch Changes + +- e3c04dc: Update web3js dependencies +- Updated dependencies [e3c04dc] + - @layerzerolabs/devtools-solana@1.0.3 + - @layerzerolabs/protocol-devtools-solana@4.0.2 + ## 4.0.2 ### Patch Changes diff --git a/packages/ua-devtools-solana/package.json b/packages/ua-devtools-solana/package.json index 2fab58d1f..7cc3663e3 100644 --- a/packages/ua-devtools-solana/package.json +++ b/packages/ua-devtools-solana/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/ua-devtools-solana", - "version": "4.0.2", + "version": "4.0.3", "description": "Utilities for LayerZero Solana projects", "repository": { "type": "git", @@ -43,16 +43,16 @@ }, "devDependencies": { "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-solana": "~1.0.2", + "@layerzerolabs/devtools-solana": "~1.0.3", "@layerzerolabs/io-devtools": "~0.1.12", "@layerzerolabs/lz-definitions": "^3.0.21", "@layerzerolabs/lz-solana-sdk-v2": "^3.0.0", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/oft-v2-solana-sdk": "^3.0.0", "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/protocol-devtools-solana": "~4.0.1", + "@layerzerolabs/protocol-devtools-solana": "~4.0.2", "@layerzerolabs/test-devtools": "~0.4.1", - "@layerzerolabs/test-devtools-solana": "~0.0.3", + "@layerzerolabs/test-devtools-solana": "~0.0.4", "@layerzerolabs/ua-devtools": "~3.0.1", "@metaplex-foundation/mpl-toolbox": "^0.9.4", "@metaplex-foundation/umi": "^0.9.2", @@ -74,14 +74,14 @@ }, "peerDependencies": { "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-solana": "~1.0.2", + "@layerzerolabs/devtools-solana": "~1.0.3", "@layerzerolabs/io-devtools": "~0.1.12", "@layerzerolabs/lz-definitions": "^3.0.21", "@layerzerolabs/lz-solana-sdk-v2": "^3.0.0", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/oft-v2-solana-sdk": "^3.0.0", "@layerzerolabs/protocol-devtools": "^1.1.1", - "@layerzerolabs/protocol-devtools-solana": "~4.0.1", + "@layerzerolabs/protocol-devtools-solana": "~4.0.2", "@layerzerolabs/ua-devtools": "^3.0.1", "@solana/web3.js": "^1.95.8", "fp-ts": "^2.16.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7fbe1340c..a0eb4151e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1901,7 +1901,7 @@ importers: specifier: ~0.4.1 version: link:../test-devtools '@layerzerolabs/test-devtools-solana': - specifier: ~0.0.3 + specifier: ~0.0.4 version: link:../test-devtools-solana '@solana/web3.js': specifier: ~1.95.8 @@ -2578,7 +2578,7 @@ importers: specifier: ~0.4.2 version: link:../devtools '@layerzerolabs/devtools-solana': - specifier: ~1.0.2 + specifier: ~1.0.3 version: link:../devtools-solana '@layerzerolabs/io-devtools': specifier: ~0.1.12 @@ -2599,7 +2599,7 @@ importers: specifier: ~0.4.1 version: link:../test-devtools '@layerzerolabs/test-devtools-solana': - specifier: ~0.0.3 + specifier: ~0.0.4 version: link:../test-devtools-solana '@layerzerolabs/ua-devtools': specifier: ~3.0.1 @@ -3196,7 +3196,7 @@ importers: specifier: ~0.4.2 version: link:../devtools '@layerzerolabs/devtools-solana': - specifier: ~1.0.2 + specifier: ~1.0.3 version: link:../devtools-solana '@layerzerolabs/io-devtools': specifier: ~0.1.12 @@ -3217,13 +3217,13 @@ importers: specifier: ~1.1.1 version: link:../protocol-devtools '@layerzerolabs/protocol-devtools-solana': - specifier: ~4.0.1 + specifier: ~4.0.2 version: link:../protocol-devtools-solana '@layerzerolabs/test-devtools': specifier: ~0.4.1 version: link:../test-devtools '@layerzerolabs/test-devtools-solana': - specifier: ~0.0.3 + specifier: ~0.0.4 version: link:../test-devtools-solana '@layerzerolabs/ua-devtools': specifier: ~3.0.1 From df085387f0b904fbfb5d40488cfd616e82e7fc74 Mon Sep 17 00:00:00 2001 From: Nazreen Date: Thu, 5 Dec 2024 02:45:13 +0800 Subject: [PATCH 02/24] docs(oft-solana): mention rent (#1094) --- examples/oft-solana/README.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/examples/oft-solana/README.md b/examples/oft-solana/README.md index d0cef435d..10837ea82 100644 --- a/examples/oft-solana/README.md +++ b/examples/oft-solana/README.md @@ -142,8 +142,35 @@ Replace `9UovNrJD8pQyBLheeHNayuG1wJSEAoxkmM14vw5gcsTT` with the programId that y Ensure you have Docker running before running the build command. +#### Build the Solana OFT program + ```bash anchor build -v # verification flag enabled +``` + +#### Preview Rent Costs for the Solana OFT + +:information_source: The majority of the SOL required to deploy your program will be for [**rent**](https://solana.com/docs/core/fees#rent) (specifically, for the minimum balance of SOL required for [rent-exemption](https://solana.com/docs/core/fees#rent-exempt)), which is calculated based on the amount of bytes the program or account uses. Programs typically require more rent than PDAs as more bytes are required to store the program's executable code. + +In our case, the OFT Program's rent accounts for roughly 99% of the SOL needed during deployment, while the other accounts' rent, OFT Store, Mint, Mint Authority Multisig and Escrow make up for only a fraction of the SOL needed. + +You can preview how much SOL would be needed for the program account. Note that the total SOL required would to be slightly higher than just this, to account for the other accounts that need to be created. + +```bash +solana rent $(wc -c < target/verifiable/oft.so) +``` + +You should see an output such as + +```bash +Rent-exempt minimum: 3.87415872 SOL +``` + +:information_source: LayerZero's default deployment path for Solana OFTs require you to deploy your own OFT program as this means you own the Upgrade Authority and don't rely on LayerZero to manage that authority for you. Read [this](https://neodyme.io/en/blog/solana_upgrade_authority/) to understand more no why this is important. + +#### Deploy the Solana OFT + +```bash solana program deploy --program-id target/deploy/oft-keypair.json target/verifiable/oft.so -u devnet ``` @@ -151,7 +178,7 @@ solana program deploy --program-id target/deploy/oft-keypair.json target/verifia :warning: If the deployment is slow, it could be that the network is congested. If so, you can either wait it out or opt to include a `priorityFee`. -### (optional) Deploying with a priority fee +#### (optional) Deploying with a priority fee This section only applies if you are unable to land your deployment transaction due to network congestion. From 486c69df421061b3769e6d2ac9d356887ebb661a Mon Sep 17 00:00:00 2001 From: Quit <89236324+QuitCrypto@users.noreply.github.com> Date: Wed, 4 Dec 2024 15:59:58 -0800 Subject: [PATCH 03/24] =?UTF-8?q?=F0=9F=A7=B9=20Fix=20logic=20to=20compare?= =?UTF-8?q?=20compute=20setting=20to=20static=20counterparts,=20rather=20t?= =?UTF-8?q?han=20evaluating=20static=20ComputeSetting=20directly=20(#1108)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/eight-llamas-deny.md | 5 +++++ .../src/read/commandResolver/compute/sdk.ts | 18 ++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 .changeset/eight-llamas-deny.md diff --git a/.changeset/eight-llamas-deny.md b/.changeset/eight-llamas-deny.md new file mode 100644 index 000000000..4b3e31edc --- /dev/null +++ b/.changeset/eight-llamas-deny.md @@ -0,0 +1,5 @@ +--- +"@layerzerolabs/ua-devtools-evm": patch +--- + +Fixes an breaking issue when running lz:read:resolve-command with map or reduce compute settings diff --git a/packages/ua-devtools-evm/src/read/commandResolver/compute/sdk.ts b/packages/ua-devtools-evm/src/read/commandResolver/compute/sdk.ts index e38698591..7d54b0d46 100644 --- a/packages/ua-devtools-evm/src/read/commandResolver/compute/sdk.ts +++ b/packages/ua-devtools-evm/src/read/commandResolver/compute/sdk.ts @@ -28,14 +28,16 @@ export class ComputerEVM extends EVMViewFunctionBase implements IComputerEVM { this.validateComputeSetting(computeSetting) try { - const mapper = ComputeSetting.OnlyReduce - ? (this.logger.info('OnlyReduce setting is used. Skipping map step.'), - (r: RequestResponsePair) => r.response) - : (r: RequestResponsePair) => this.lzMap(compute, r, timeMarker) - const reducer = ComputeSetting.OnlyMap - ? (this.logger.info('OnlyMap setting is used. Skipping reduce step.'), - (mappedResponses: string[]) => mappedResponses.join('')) - : (mappedResponses: string[]) => this.lzReduce(compute, cmd, mappedResponses, timeMarker) + const mapper = + computeSetting === ComputeSetting.OnlyReduce + ? (this.logger.info('OnlyReduce setting is used. Skipping map step.'), + (r: RequestResponsePair) => r.response) + : (r: RequestResponsePair) => this.lzMap(compute, r, timeMarker) + const reducer = + computeSetting === ComputeSetting.OnlyMap + ? (this.logger.info('OnlyMap setting is used. Skipping reduce step.'), + (mappedResponses: string[]) => mappedResponses.join('')) + : (mappedResponses: string[]) => this.lzReduce(compute, cmd, mappedResponses, timeMarker) const applicative = createDefaultApplicative(this.logger) const mapped = await applicative(responses.map((r) => () => mapper(r))) From 766142b3858bdef1204648b51d144400fbfab29b Mon Sep 17 00:00:00 2001 From: layerzero-bot <131946195+layerzero-bot@users.noreply.github.com> Date: Thu, 5 Dec 2024 01:26:56 +0000 Subject: [PATCH 04/24] =?UTF-8?q?=F0=9F=9A=80=20Version=20packages=20(#110?= =?UTF-8?q?9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: github-actions[bot] --- .changeset/eight-llamas-deny.md | 5 ----- packages/ua-devtools-evm/CHANGELOG.md | 6 ++++++ packages/ua-devtools-evm/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/eight-llamas-deny.md diff --git a/.changeset/eight-llamas-deny.md b/.changeset/eight-llamas-deny.md deleted file mode 100644 index 4b3e31edc..000000000 --- a/.changeset/eight-llamas-deny.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@layerzerolabs/ua-devtools-evm": patch ---- - -Fixes an breaking issue when running lz:read:resolve-command with map or reduce compute settings diff --git a/packages/ua-devtools-evm/CHANGELOG.md b/packages/ua-devtools-evm/CHANGELOG.md index 85cee6edf..d2217b820 100644 --- a/packages/ua-devtools-evm/CHANGELOG.md +++ b/packages/ua-devtools-evm/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/ua-devtools-evm +## 5.0.2 + +### Patch Changes + +- 486c69d: Fixes an breaking issue when running lz:read:resolve-command with map or reduce compute settings + ## 5.0.1 ### Patch Changes diff --git a/packages/ua-devtools-evm/package.json b/packages/ua-devtools-evm/package.json index 107dbfe15..91997279c 100644 --- a/packages/ua-devtools-evm/package.json +++ b/packages/ua-devtools-evm/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/ua-devtools-evm", - "version": "5.0.1", + "version": "5.0.2", "description": "Utilities for working with LayerZero contracts", "repository": { "type": "git", From 42e83997400575fd5d4a7920807046c4b2a3ce27 Mon Sep 17 00:00:00 2001 From: Nazreen Date: Thu, 5 Dec 2024 23:37:03 +0800 Subject: [PATCH 05/24] docs(solana): remove receiveLibraryTimeoutConfig (#1111) --- examples/oft-solana/layerzero.config.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/examples/oft-solana/layerzero.config.ts b/examples/oft-solana/layerzero.config.ts index 7be16c051..eed5a406c 100644 --- a/examples/oft-solana/layerzero.config.ts +++ b/examples/oft-solana/layerzero.config.ts @@ -69,12 +69,6 @@ const config: OAppOmniGraphHardhat = { // receiveLibrary: '7a4WjyR8VZ7yZz5XJAKm39BUGn5iT9CKcv2pmG9tdXVH', // gracePeriod: BigInt(0), // }, - // // Optional Receive Library Timeout for when the Old Receive Library Address will no longer be valid - // // Note: This configuring `receiveLibraryTimeoutConfig` using devtools is not currently available for Solana. - // // receiveLibraryTimeoutConfig: { - // // lib: '0x0000000000000000000000000000000000000000', - // // expiry: BigInt(0), - // // }, // // Optional Send Configuration // // @dev Controls how the `from` chain sends messages to the `to` chain. // sendConfig: { From dab81aca4abdef3a3130eec08a8a1eb17fd2cc63 Mon Sep 17 00:00:00 2001 From: zzm Date: Sat, 7 Dec 2024 01:07:09 +0800 Subject: [PATCH 06/24] Solana: Update oft dependencies (#1110) --- examples/oft-solana/Cargo.lock | 10 +++++----- examples/oft-solana/programs/endpoint-mock/Cargo.toml | 2 +- examples/oft-solana/programs/oft/Cargo.toml | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/oft-solana/Cargo.lock b/examples/oft-solana/Cargo.lock index 6d60d3613..da79dc53b 100644 --- a/examples/oft-solana/Cargo.lock +++ b/examples/oft-solana/Cargo.lock @@ -686,7 +686,7 @@ checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" [[package]] name = "cpi-helper" version = "0.1.0" -source = "git+https://github.com/LayerZero-Labs/LayerZero-v2.git?rev=7aebbd7c79b2dc818f7bb054aed2405ca076b9d6#7aebbd7c79b2dc818f7bb054aed2405ca076b9d6" +source = "git+https://github.com/LayerZero-Labs/LayerZero-v2.git?rev=34321ac15e47e0dafd25d66659e2f3d1b9b6db8f#34321ac15e47e0dafd25d66659e2f3d1b9b6db8f" dependencies = [ "bs58 0.5.1", "proc-macro2", @@ -893,7 +893,7 @@ checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "endpoint" version = "0.1.0" -source = "git+https://github.com/LayerZero-Labs/LayerZero-v2.git?rev=7aebbd7c79b2dc818f7bb054aed2405ca076b9d6#7aebbd7c79b2dc818f7bb054aed2405ca076b9d6" +source = "git+https://github.com/LayerZero-Labs/LayerZero-v2.git?rev=34321ac15e47e0dafd25d66659e2f3d1b9b6db8f#34321ac15e47e0dafd25d66659e2f3d1b9b6db8f" dependencies = [ "anchor-lang", "cpi-helper", @@ -1259,7 +1259,7 @@ dependencies = [ [[package]] name = "messagelib-interface" version = "0.1.0" -source = "git+https://github.com/LayerZero-Labs/LayerZero-v2.git?rev=7aebbd7c79b2dc818f7bb054aed2405ca076b9d6#7aebbd7c79b2dc818f7bb054aed2405ca076b9d6" +source = "git+https://github.com/LayerZero-Labs/LayerZero-v2.git?rev=34321ac15e47e0dafd25d66659e2f3d1b9b6db8f#34321ac15e47e0dafd25d66659e2f3d1b9b6db8f" dependencies = [ "anchor-lang", ] @@ -1359,7 +1359,7 @@ dependencies = [ [[package]] name = "oapp" version = "0.1.0" -source = "git+https://github.com/LayerZero-Labs/LayerZero-v2.git?rev=7aebbd7c79b2dc818f7bb054aed2405ca076b9d6#7aebbd7c79b2dc818f7bb054aed2405ca076b9d6" +source = "git+https://github.com/LayerZero-Labs/LayerZero-v2.git?rev=34321ac15e47e0dafd25d66659e2f3d1b9b6db8f#34321ac15e47e0dafd25d66659e2f3d1b9b6db8f" dependencies = [ "anchor-lang", "endpoint", @@ -2476,7 +2476,7 @@ dependencies = [ [[package]] name = "utils" version = "0.1.0" -source = "git+https://github.com/LayerZero-Labs/LayerZero-v2.git?rev=7aebbd7c79b2dc818f7bb054aed2405ca076b9d6#7aebbd7c79b2dc818f7bb054aed2405ca076b9d6" +source = "git+https://github.com/LayerZero-Labs/LayerZero-v2.git?rev=34321ac15e47e0dafd25d66659e2f3d1b9b6db8f#34321ac15e47e0dafd25d66659e2f3d1b9b6db8f" dependencies = [ "anchor-lang", ] diff --git a/examples/oft-solana/programs/endpoint-mock/Cargo.toml b/examples/oft-solana/programs/endpoint-mock/Cargo.toml index 1c7ab8769..756ebf747 100644 --- a/examples/oft-solana/programs/endpoint-mock/Cargo.toml +++ b/examples/oft-solana/programs/endpoint-mock/Cargo.toml @@ -19,4 +19,4 @@ idl-build = ["anchor-lang/idl-build"] [dependencies] anchor-lang = { version = "0.29.0", features = ["event-cpi"] } solana-program = "=1.17.31" -cpi-helper = { git = "https://github.com/LayerZero-Labs/LayerZero-v2.git", rev = "7aebbd7c79b2dc818f7bb054aed2405ca076b9d6" } +cpi-helper = { git = "https://github.com/LayerZero-Labs/LayerZero-v2.git", rev = "34321ac15e47e0dafd25d66659e2f3d1b9b6db8f" } diff --git a/examples/oft-solana/programs/oft/Cargo.toml b/examples/oft-solana/programs/oft/Cargo.toml index eaf6cc11c..457f6ac54 100644 --- a/examples/oft-solana/programs/oft/Cargo.toml +++ b/examples/oft-solana/programs/oft/Cargo.toml @@ -19,6 +19,6 @@ idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build", "oapp/idl-build"] [dependencies] anchor-lang = { version = "0.29.0", features = ["init-if-needed"] } anchor-spl = "0.29.0" -oapp = { git = "https://github.com/LayerZero-Labs/LayerZero-v2.git", rev = "7aebbd7c79b2dc818f7bb054aed2405ca076b9d6" } -utils = { git = "https://github.com/LayerZero-Labs/LayerZero-v2.git", rev = "7aebbd7c79b2dc818f7bb054aed2405ca076b9d6" } +oapp = { git = "https://github.com/LayerZero-Labs/LayerZero-v2.git", rev = "34321ac15e47e0dafd25d66659e2f3d1b9b6db8f" } +utils = { git = "https://github.com/LayerZero-Labs/LayerZero-v2.git", rev = "34321ac15e47e0dafd25d66659e2f3d1b9b6db8f" } solana-helper = "0.1.0" \ No newline at end of file From cf4722897e68b4fc8dbf97f9e1f5b8f2a7ce7cb6 Mon Sep 17 00:00:00 2001 From: Ryan Goulding Date: Fri, 6 Dec 2024 20:54:01 -0500 Subject: [PATCH 07/24] =?UTF-8?q?=F0=9F=AA=B2=20make=20initConfig=20idempo?= =?UTF-8?q?tent=20(#1114)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ryan Goulding --- packages/ua-devtools-solana/src/oft/config.ts | 29 ++++++++++++++----- packages/ua-devtools-solana/src/oft/sdk.ts | 9 +++++- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/packages/ua-devtools-solana/src/oft/config.ts b/packages/ua-devtools-solana/src/oft/config.ts index d23c686f5..869033466 100644 --- a/packages/ua-devtools-solana/src/oft/config.ts +++ b/packages/ua-devtools-solana/src/oft/config.ts @@ -7,12 +7,13 @@ import { OmniSDKFactory, OmniPoint, } from '@layerzerolabs/devtools' -import { createModuleLogger } from '@layerzerolabs/io-devtools' +import { createModuleLogger, createWithAsyncLogger } from '@layerzerolabs/io-devtools' import { isOmniPointOnSolana } from '@layerzerolabs/devtools-solana' import type { IOApp, OAppConfigurator, OAppOmniGraph } from '@layerzerolabs/ua-devtools' import { OFT } from './sdk' const createOFTLogger = () => createModuleLogger('OFT') +const withOFTLogger = createWithAsyncLogger(createOFTLogger) /** * Helper function that checks whether a vector originates from a Solana network @@ -44,12 +45,26 @@ const onlyEdgesFromSolana = ( } export const initConfig: OAppConfigurator = createConfigureEdges( - onlyEdgesFromSolana(async ({ vector: { to } }, sdk) => { - if (typeof sdk.initConfig !== 'function') { - return createOFTLogger().warn(`Could not find initConfig() method on OFT SDK, skipping`), undefined - } - return sdk.initConfig(to.eid) - }) + onlyEdgesFromSolana( + withOFTLogger(async ({ vector: { to } }, sdk) => { + const logger = createOFTLogger() + if (typeof sdk.sendConfigIsInitialized !== 'function') { + return logger.warn(`Could not find sendConfigIsInitialized() method on OFT SDK, skipping`), undefined + } + if (typeof sdk.initConfig !== 'function') { + return logger.warn(`Could not find initConfig() method on OFT SDK, skipping`), undefined + } + + logger.verbose(`Checking if the sendConfig for ${to.eid} ${to.address} is initialized`) + + const isInitialized = await sdk.sendConfigIsInitialized(to.eid) + if (isInitialized) { + return logger.verbose(`sendConfig for ${to.eid} ${to.address} is already initialized`), undefined + } + logger.verbose(`Initializing sendConfig for ${to.eid} ${to.address}`) + return sdk.initConfig(to.eid) + }) + ) ) export const initOFTAccounts = createConfigureMultiple(initConfig) diff --git a/packages/ua-devtools-solana/src/oft/sdk.ts b/packages/ua-devtools-solana/src/oft/sdk.ts index 921da9046..97fcc3d12 100644 --- a/packages/ua-devtools-solana/src/oft/sdk.ts +++ b/packages/ua-devtools-solana/src/oft/sdk.ts @@ -33,7 +33,7 @@ import { import { mplToolbox } from '@metaplex-foundation/mpl-toolbox' import { createUmi } from '@metaplex-foundation/umi-bundle-defaults' import { fromWeb3JsPublicKey } from '@metaplex-foundation/umi-web3js-adapters' -import { EndpointProgram, UlnProgram } from '@layerzerolabs/lz-solana-sdk-v2' +import { EndpointProgram, MessageLibPDADeriver, UlnProgram } from '@layerzerolabs/lz-solana-sdk-v2' // TODO: Use exported interfaces when they are available interface SetPeerAddressParam { @@ -408,6 +408,13 @@ export class OFT extends OmniSDK implements IOApp { throw new TypeError(`getCallerBpsCap() not implemented on Solana OFT SDK`) } + public async sendConfigIsInitialized(_eid: EndpointId): Promise { + const deriver = new MessageLibPDADeriver(UlnProgram.PROGRAM_ID) + const [sendConfig] = deriver.sendConfig(_eid, new PublicKey(this.point.address)) + const accountInfo = await this.connection.getAccountInfo(sendConfig) + return accountInfo != null + } + public async initConfig(eid: EndpointId): Promise { return { ...(await this.createTransaction( From e3fced8c411facecb04b542d4d60b7bd95911e34 Mon Sep 17 00:00:00 2001 From: Nazreen Date: Tue, 10 Dec 2024 21:59:34 +0800 Subject: [PATCH 08/24] docs(oft-solana): fix typo (#1122) --- examples/oft-solana/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/oft-solana/README.md b/examples/oft-solana/README.md index 10837ea82..3e767ca57 100644 --- a/examples/oft-solana/README.md +++ b/examples/oft-solana/README.md @@ -298,6 +298,7 @@ spl-token mint --multisig-signer ~/.config/solana/id.json ``` :information_source: `~/.config/solana/id.json` assumes that you will use the keypair in the default location. To verify if this path applies to you, run `solana config get` and not the keypair path value. + :information_source: You can get the `` address from [deployments/solana-testnet/OFT.json](deployments/solana-testnet/OFT.json). ### Set Message Execution Options From 5c47a41148a40d894acc305deb4e6609fad06049 Mon Sep 17 00:00:00 2001 From: Matthew Krak Date: Tue, 10 Dec 2024 09:19:29 -0800 Subject: [PATCH 09/24] =?UTF-8?q?=F0=9F=97=9E=EF=B8=8F=20Add=20MintBurnOFT?= =?UTF-8?q?Adapter.sol=20to=20oft-evm=20package=20(#1116)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/nice-buttons-work.md | 5 + .../oft-evm/contracts/MintBurnOFTAdapter.sol | 115 +++++++++++++++++ .../interfaces/IMintableBurnable.sol | 22 ++++ packages/oft-evm/test/OFT.t.sol | 118 +++++++++++++++++- .../test/lib/MintBurnOFTAdapterMockCodec.sol | 15 +++ .../test/mocks/ElevatedMinterBurnerMock.sol | 66 ++++++++++ .../oft-evm/test/mocks/MintBurnERC20Mock.sol | 21 ++++ .../test/mocks/MintBurnOFTAdapterMock.sol | 30 +++++ 8 files changed, 389 insertions(+), 3 deletions(-) create mode 100644 .changeset/nice-buttons-work.md create mode 100644 packages/oft-evm/contracts/MintBurnOFTAdapter.sol create mode 100644 packages/oft-evm/contracts/interfaces/IMintableBurnable.sol create mode 100644 packages/oft-evm/test/lib/MintBurnOFTAdapterMockCodec.sol create mode 100644 packages/oft-evm/test/mocks/ElevatedMinterBurnerMock.sol create mode 100644 packages/oft-evm/test/mocks/MintBurnERC20Mock.sol create mode 100644 packages/oft-evm/test/mocks/MintBurnOFTAdapterMock.sol diff --git a/.changeset/nice-buttons-work.md b/.changeset/nice-buttons-work.md new file mode 100644 index 000000000..478ac9bf1 --- /dev/null +++ b/.changeset/nice-buttons-work.md @@ -0,0 +1,5 @@ +--- +"@layerzerolabs/oft-evm": minor +--- + +Added MintBurnOFTAdapter diff --git a/packages/oft-evm/contracts/MintBurnOFTAdapter.sol b/packages/oft-evm/contracts/MintBurnOFTAdapter.sol new file mode 100644 index 000000000..067b15646 --- /dev/null +++ b/packages/oft-evm/contracts/MintBurnOFTAdapter.sol @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.22; + +// External imports +import { IERC20, IERC20Metadata } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; + +// Local imports +import { IMintableBurnable } from "./interfaces/IMintableBurnable.sol"; +import { OFTCore } from "./OFTCore.sol"; + +/** + * @title MintBurnOFTAdapter + * @notice A variant of the standard OFT Adapter that uses an existing ERC20's mint and burn mechanisms for cross-chain transfers. + * + * @dev Inherits from OFTCore and provides implementations for _debit and _credit functions using a mintable and burnable token. + */ +abstract contract MintBurnOFTAdapter is OFTCore { + /// @dev The underlying ERC20 token. + IERC20 internal immutable innerToken; + + /// @notice The contract responsible for minting and burning tokens. + IMintableBurnable public immutable minterBurner; + + /** + * @notice Initializes the MintBurnOFTAdapter contract. + * + * @param _token The address of the underlying ERC20 token. + * @param _minterBurner The contract responsible for minting and burning tokens. + * @param _lzEndpoint The LayerZero endpoint address. + * @param _delegate The address of the delegate. + * + * @dev Calls the OFTCore constructor with the token's decimals, the endpoint, and the delegate. + */ + constructor( + address _token, + IMintableBurnable _minterBurner, + address _lzEndpoint, + address _delegate + ) OFTCore(IERC20Metadata(_token).decimals(), _lzEndpoint, _delegate) { + innerToken = IERC20(_token); + minterBurner = _minterBurner; + } + + /** + * @notice Retrieves the address of the underlying ERC20 token. + * + * @return The address of the adapted ERC20 token. + * + * @dev In the case of MintBurnOFTAdapter, address(this) and erc20 are NOT the same contract. + */ + function token() public view returns (address) { + return address(innerToken); + } + + /** + * @notice Indicates whether the OFT contract requires approval of the underlying token to send. + * + * @return requiresApproval True if approval is required, false otherwise. + * + * @dev In this MintBurnOFTAdapter, approval is NOT required because it uses mint and burn privileges. + */ + function approvalRequired() external pure virtual returns (bool) { + return false; + } + + /** + * @notice Burns tokens from the sender's balance to prepare for sending. + * + * @param _from The address to debit the tokens from. + * @param _amountLD The amount of tokens to send in local decimals. + * @param _minAmountLD The minimum amount to send in local decimals. + * @param _dstEid The destination chain ID. + * + * @return amountSentLD The amount sent in local decimals. + * @return amountReceivedLD The amount received in local decimals on the remote. + * + * @dev WARNING: The default OFTAdapter implementation assumes LOSSLESS transfers, i.e., 1 token in, 1 token out. + * If the 'innerToken' applies something like a transfer fee, the default will NOT work. + * A pre/post balance check will need to be done to calculate the amountReceivedLD. + */ + function _debit( + address _from, + uint256 _amountLD, + uint256 _minAmountLD, + uint32 _dstEid + ) internal virtual override returns (uint256 amountSentLD, uint256 amountReceivedLD) { + (amountSentLD, amountReceivedLD) = _debitView(_amountLD, _minAmountLD, _dstEid); + // Burns tokens from the caller. + minterBurner.burn(_from, amountSentLD); + } + + /** + * @notice Mints tokens to the specified address upon receiving them. + * + * @param _to The address to credit the tokens to. + * @param _amountLD The amount of tokens to credit in local decimals. + * + * @return amountReceivedLD The amount of tokens actually received in local decimals. + * + * @dev WARNING: The default OFTAdapter implementation assumes LOSSLESS transfers, i.e., 1 token in, 1 token out. + * If the 'innerToken' applies something like a transfer fee, the default will NOT work. + * A pre/post balance check will need to be done to calculate the amountReceivedLD. + */ + function _credit( + address _to, + uint256 _amountLD, + uint32 /* _srcEid */ + ) internal virtual override returns (uint256 amountReceivedLD) { + if (_to == address(0x0)) _to = address(0xdead); // _mint(...) does not support address(0x0) + // Mints the tokens and transfers to the recipient. + minterBurner.mint(_to, _amountLD); + // In the case of NON-default OFTAdapter, the amountLD MIGHT not be equal to amountReceivedLD. + return _amountLD; + } +} diff --git a/packages/oft-evm/contracts/interfaces/IMintableBurnable.sol b/packages/oft-evm/contracts/interfaces/IMintableBurnable.sol new file mode 100644 index 000000000..43c5a9181 --- /dev/null +++ b/packages/oft-evm/contracts/interfaces/IMintableBurnable.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.22; + +/// @title Interface for mintable and burnable tokens +interface IMintableBurnable { + + /** + * @notice Burns tokens from a specified account + * @param _from Address from which tokens will be burned + * @param _amount Amount of tokens to be burned + * @return success Indicates whether the operation was successful + */ + function burn(address _from, uint256 _amount) external returns (bool success); + + /** + * @notice Mints tokens to a specified account + * @param _to Address to which tokens will be minted + * @param _amount Amount of tokens to be minted + * @return success Indicates whether the operation was successful + */ + function mint(address _to, uint256 _amount) external returns (bool success); +} \ No newline at end of file diff --git a/packages/oft-evm/test/OFT.t.sol b/packages/oft-evm/test/OFT.t.sol index 2f07ef6ef..86b8de4d8 100644 --- a/packages/oft-evm/test/OFT.t.sol +++ b/packages/oft-evm/test/OFT.t.sol @@ -8,6 +8,9 @@ import { MessagingFee, MessagingReceipt } from "../contracts/OFTCore.sol"; import { NativeOFTAdapterMock } from "./mocks/NativeOFTAdapterMock.sol"; import { OFTAdapterMock } from "./mocks/OFTAdapterMock.sol"; import { ERC20Mock } from "./mocks/ERC20Mock.sol"; +import { MintBurnERC20Mock } from "./mocks/MintBurnERC20Mock.sol"; +import { ElevatedMinterBurnerMock } from "./mocks/ElevatedMinterBurnerMock.sol"; +import { MintBurnOFTAdapterMock } from "./mocks/MintBurnOFTAdapterMock.sol"; import { OFTComposerMock } from "./mocks/OFTComposerMock.sol"; import { OFTInspectorMock, IOAppMsgInspector } from "./mocks/OFTInspectorMock.sol"; import { IOAppOptionsType3, EnforcedOptionParam } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol"; @@ -18,6 +21,8 @@ import { OFTComposeMsgCodec } from "../contracts/libs/OFTComposeMsgCodec.sol"; import { IOFT, SendParam, OFTReceipt } from "../contracts/interfaces/IOFT.sol"; import { OFT } from "../contracts/OFT.sol"; +import { MintBurnOFTAdapter } from "../contracts/MintBurnOFTAdapter.sol"; +import { IMintableBurnable } from "../contracts/interfaces/IMintableBurnable.sol"; import { NativeOFTAdapter } from "../contracts/NativeOFTAdapter.sol"; import { OFTAdapter } from "../contracts/OFTAdapter.sol"; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; @@ -25,6 +30,7 @@ import { IERC20 } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Met import { OFTMockCodec } from "./lib/OFTMockCodec.sol"; import { OFTAdapterMockCodec } from "./lib/OFTAdapterMockCodec.sol"; import { NativeOFTAdapterMockCodec } from "./lib/NativeOFTAdapterMockCodec.sol"; +import { MintBurnOFTAdapterMockCodec } from "./lib/MintBurnOFTAdapterMockCodec.sol"; import "forge-std/console.sol"; import { TestHelperOz5 } from "@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol"; @@ -34,11 +40,13 @@ contract OFTTest is TestHelperOz5 { using OFTMockCodec for OFT; using OFTAdapterMockCodec for OFTAdapter; using NativeOFTAdapterMockCodec for NativeOFTAdapter; + using MintBurnOFTAdapterMockCodec for MintBurnOFTAdapter; uint32 internal constant A_EID = 1; uint32 internal constant B_EID = 2; uint32 internal constant C_EID = 3; uint32 internal constant D_EID = 4; + uint32 internal constant E_EID = 5; string internal constant A_OFT_NAME = "aOFT"; string internal constant A_OFT_SYMBOL = "aOFT"; @@ -46,12 +54,18 @@ contract OFTTest is TestHelperOz5 { string internal constant B_OFT_SYMBOL = "bOFT"; string internal constant C_TOKEN_NAME = "cToken"; string internal constant C_TOKEN_SYMBOL = "cToken"; + string internal constant E_MINTABLE_TOKEN_NAME = "eMintableToken"; + string internal constant E_MINTABLE_TOKEN_SYMBOL = "eToken"; + OFT internal aOFT; OFT internal bOFT; - NativeOFTAdapter internal dNativeOFTAdapter; OFTAdapter internal cOFTAdapter; ERC20Mock internal cERC20Mock; + NativeOFTAdapter internal dNativeOFTAdapter; + MintBurnOFTAdapter internal eMintBurnOFTAdapter; + ElevatedMinterBurnerMock internal eMinterBurnerMock; + MintBurnERC20Mock internal eMintBurnERC20Mock; OFTInspectorMock internal oAppInspector; @@ -59,6 +73,8 @@ contract OFTTest is TestHelperOz5 { address public userB = makeAddr("userB"); address public userC = makeAddr("userC"); address public userD = makeAddr("userD"); + address public userE = makeAddr("userE"); + address public attacker = makeAddr("attacker"); uint256 public initialBalance = 100 ether; uint256 public initialNativeBalance = 1000 ether; @@ -66,7 +82,7 @@ contract OFTTest is TestHelperOz5 { _deal(); super.setUp(); - setUpEndpoints(4, LibraryType.UltraLightNode); + setUpEndpoints(5, LibraryType.UltraLightNode); aOFT = OFTMock( _deployOApp( @@ -97,18 +113,30 @@ contract OFTTest is TestHelperOz5 { ) ); + eMintBurnERC20Mock = new MintBurnERC20Mock(E_MINTABLE_TOKEN_NAME, E_MINTABLE_TOKEN_SYMBOL); + eMinterBurnerMock = new ElevatedMinterBurnerMock(IMintableBurnable(eMintBurnERC20Mock), address(this)); + eMintBurnOFTAdapter = MintBurnOFTAdapterMock( + _deployOApp( + type(MintBurnOFTAdapterMock).creationCode, + abi.encode(address(eMintBurnERC20Mock), address(eMinterBurnerMock), address(endpoints[E_EID]), address(this)) + ) + ); + eMinterBurnerMock.setOperator(address(eMintBurnOFTAdapter), true); + // config and wire the ofts - address[] memory ofts = new address[](4); + address[] memory ofts = new address[](5); ofts[0] = address(aOFT); ofts[1] = address(bOFT); ofts[2] = address(cOFTAdapter); ofts[3] = address(dNativeOFTAdapter); + ofts[4] = address(eMintBurnOFTAdapter); this.wireOApps(ofts); // mint tokens aOFT.asOFTMock().mint(userA, initialBalance); bOFT.asOFTMock().mint(userB, initialBalance); cERC20Mock.mint(userC, initialBalance); + eMintBurnERC20Mock.mint(userE, initialBalance); // deploy a universal inspector, can be used by each oft oAppInspector = new OFTInspectorMock(); @@ -119,6 +147,7 @@ contract OFTTest is TestHelperOz5 { vm.deal(userB, initialNativeBalance); vm.deal(userC, initialNativeBalance); vm.deal(userD, initialNativeBalance); + vm.deal(userE, initialNativeBalance); } function test_constructor() public { @@ -126,17 +155,21 @@ contract OFTTest is TestHelperOz5 { assertEq(bOFT.owner(), address(this)); assertEq(cOFTAdapter.owner(), address(this)); assertEq(dNativeOFTAdapter.owner(), address(this)); + assertEq(eMintBurnOFTAdapter.owner(), address(this)); assertEq(aOFT.balanceOf(userA), initialBalance); assertEq(bOFT.balanceOf(userB), initialBalance); assertEq(IERC20(cOFTAdapter.token()).balanceOf(userC), initialBalance); + assertEq(IERC20(eMintBurnOFTAdapter.token()).balanceOf(userE), initialBalance); assertEq(aOFT.token(), address(aOFT)); assertEq(bOFT.token(), address(bOFT)); assertEq(cOFTAdapter.token(), address(cERC20Mock)); assertEq(dNativeOFTAdapter.token(), address(0)); + assertEq(eMintBurnOFTAdapter.token(), address(eMintBurnERC20Mock)); assertEq(dNativeOFTAdapter.approvalRequired(), false); + assertEq(eMintBurnOFTAdapter.approvalRequired(), false); } function test_oftVersion() public { @@ -474,6 +507,85 @@ contract OFTTest is TestHelperOz5 { dNativeOFTAdapter.asNativeOFTAdapterMock().send{ value: extraMsgValue}(sendParam, fee, userD); } + function test_set_minter_burner_operator() public { + vm.prank(attacker); + vm.expectRevert(); + eMinterBurnerMock.setOperator(address(eMintBurnOFTAdapter), true); + } + + function test_minter_burner_operator() public { + vm.prank(attacker); + vm.expectRevert(); + eMinterBurnerMock.mint(attacker, initialBalance); + } + + function test_burn_operator() public { + vm.prank(attacker); + vm.expectRevert(); + eMinterBurnerMock.burn(attacker, initialBalance); + } + + function test_mint_burn_oft_adapter_debit() public virtual { + uint256 amountToSendLD = 1 ether; + uint256 minAmountToCreditLD = 1 ether; + uint32 dstEid = E_EID; + + vm.prank(userE); + vm.expectRevert( + abi.encodeWithSelector(IOFT.SlippageExceeded.selector, amountToSendLD, minAmountToCreditLD + 1) + ); + eMintBurnOFTAdapter.asMintBurnOFTAdapterMock().debit(amountToSendLD, minAmountToCreditLD + 1, dstEid); + + vm.prank(userE); + (uint256 amountDebitedLD, uint256 amountToCreditLD) = eMintBurnOFTAdapter.asMintBurnOFTAdapterMock().debit( + amountToSendLD, + minAmountToCreditLD, + dstEid + ); + + assertEq(amountDebitedLD, amountToSendLD); + assertEq(amountToCreditLD, amountToSendLD); + } + + function test_mint_burn_oft_adapter_credit() public { + uint256 amountToCreditLD = 1 ether; + uint32 srcEid = C_EID; + + vm.prank(userC); + cERC20Mock.transfer(address(cOFTAdapter), amountToCreditLD); + + uint256 amountReceived = eMintBurnOFTAdapter.asMintBurnOFTAdapterMock().credit(userE, amountToCreditLD, srcEid); + + assertEq(cERC20Mock.balanceOf(userC), initialBalance - amountToCreditLD); + assertEq(eMintBurnERC20Mock.balanceOf(address(userE)), initialBalance + amountReceived); + } + + function test_mint_burn_oft_adapter_send() public { + uint256 tokensToSend = 1 ether; + bytes memory options = OptionsBuilder.newOptions().addExecutorLzReceiveOption(200000, 0); + SendParam memory sendParam = SendParam( + B_EID, + addressToBytes32(userB), + tokensToSend, + tokensToSend, + options, + "", + "" + ); + MessagingFee memory fee = eMintBurnOFTAdapter.quoteSend(sendParam, false); + + assertEq(eMintBurnERC20Mock.balanceOf(userE), initialBalance); + assertEq(bOFT.balanceOf(userB), initialBalance); + + vm.startPrank(userE); + eMintBurnOFTAdapter.send{ value: fee.nativeFee }(sendParam, fee, payable(address(this))); + vm.stopPrank(); + verifyPackets(B_EID, addressToBytes32(address(bOFT))); + + assertEq(eMintBurnERC20Mock.balanceOf(userE), initialBalance - tokensToSend); + assertEq(bOFT.balanceOf(userB), initialBalance + tokensToSend); + } + function decodeOFTMsgCodec( bytes calldata message ) public pure returns (bool isComposed, bytes32 sendTo, uint64 amountSD, bytes memory composeMsg) { diff --git a/packages/oft-evm/test/lib/MintBurnOFTAdapterMockCodec.sol b/packages/oft-evm/test/lib/MintBurnOFTAdapterMockCodec.sol new file mode 100644 index 000000000..df946a1f6 --- /dev/null +++ b/packages/oft-evm/test/lib/MintBurnOFTAdapterMockCodec.sol @@ -0,0 +1,15 @@ +// SPDX-LICENSE-Identifier: UNLICENSED + +pragma solidity ^0.8.22; + +import { MintBurnOFTAdapterMock } from "../mocks/MintBurnOFTAdapterMock.sol"; +import { MintBurnOFTAdapter } from "../../contracts/MintBurnOFTAdapter.sol"; + +// @title MintBurnOFTAdapterMockCodec +// @notice Codec to convert MintBurnOFTAdapter to MintBurnOFTAdapterMock in a consistent, readable manner. +// @dev For testing purposes only. +library MintBurnOFTAdapterMockCodec { + function asMintBurnOFTAdapterMock(MintBurnOFTAdapter _oft) internal pure returns (MintBurnOFTAdapterMock) { + return MintBurnOFTAdapterMock(address(_oft)); + } +} diff --git a/packages/oft-evm/test/mocks/ElevatedMinterBurnerMock.sol b/packages/oft-evm/test/mocks/ElevatedMinterBurnerMock.sol new file mode 100644 index 000000000..a334a7c3e --- /dev/null +++ b/packages/oft-evm/test/mocks/ElevatedMinterBurnerMock.sol @@ -0,0 +1,66 @@ +pragma solidity ^0.8.20; + +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; + +import { IMintableBurnable } from "../../contracts/interfaces/IMintableBurnable.sol"; + +/// @title Operatable +/// @notice Enables granular access control by designating operators +contract Operatable is Ownable { + /// @notice Triggered when an operator is added or removed + event OperatorChanged(address indexed operator, bool status); + + /// @notice Error to indicate unauthorized access by non-operators + error NotAllowedOperator(); + + /// @dev Mapping of addresses to their operator status + mapping(address => bool) public operators; + + /// @notice Initializes the contract by setting the deployer as an operator + /// @param _owner Address that will own the contract + constructor(address _owner) Ownable(_owner) { + operators[msg.sender] = true; + } + + /// @notice Ensures function is called by an operator + modifier onlyOperators() { + if (!operators[msg.sender]) { + revert NotAllowedOperator(); + } + _; + } + + /** + * @notice Allows the owner to set or unset operator status of an address + * @param operator The address to be modified + * @param status Boolean indicating whether the address should be an operator + */ + function setOperator(address operator, bool status) external onlyOwner { + operators[operator] = status; + emit OperatorChanged(operator, status); + } +} + +/// @title ElevatedMinterBurnerMock +/// @notice Manages minting and burning of tokens through delegated control to operators +contract ElevatedMinterBurnerMock is IMintableBurnable, Operatable { + /// @notice Reference to the token with mint and burn capabilities + IMintableBurnable public immutable token; + + /** + * @notice Initializes the contract by linking a token and setting the owner + * @param token_ The mintable and burnable token interface address + * @param _owner The owner of this contract, who can set operators + */ + constructor(IMintableBurnable token_, address _owner) Operatable(_owner) { + token = token_; + } + + function burn(address from, uint256 amount) external override onlyOperators returns (bool) { + return token.burn(from, amount); + } + + function mint(address to, uint256 amount) external override onlyOperators returns (bool) { + return token.mint(to, amount); + } +} \ No newline at end of file diff --git a/packages/oft-evm/test/mocks/MintBurnERC20Mock.sol b/packages/oft-evm/test/mocks/MintBurnERC20Mock.sol new file mode 100644 index 000000000..981217cce --- /dev/null +++ b/packages/oft-evm/test/mocks/MintBurnERC20Mock.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +import { IMintableBurnable } from "../../contracts/interfaces/IMintableBurnable.sol"; + +// @dev WARNING: This is for testing purposes only +contract MintBurnERC20Mock is ERC20, IMintableBurnable { + constructor(string memory name, string memory symbol) ERC20(name, symbol) {} + + function burn(address _from, uint256 _amount) external returns (bool) { + _burn(_from, _amount); + return true; + } + + function mint(address _to, uint256 _amount) external returns (bool) { + _mint(_to, _amount); + return true; + } +} \ No newline at end of file diff --git a/packages/oft-evm/test/mocks/MintBurnOFTAdapterMock.sol b/packages/oft-evm/test/mocks/MintBurnOFTAdapterMock.sol new file mode 100644 index 000000000..759126107 --- /dev/null +++ b/packages/oft-evm/test/mocks/MintBurnOFTAdapterMock.sol @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.22; + +import { MintBurnOFTAdapter } from "../../contracts/MintBurnOFTAdapter.sol"; +import { IMintableBurnable } from "../../contracts/interfaces/IMintableBurnable.sol"; + +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; + +// @dev WARNING: This is for testing purposes only +contract MintBurnOFTAdapterMock is MintBurnOFTAdapter { + constructor( + address _token, + IMintableBurnable _minterBurner, + address _lzEndpoint, + address _delegate + ) MintBurnOFTAdapter(_token, _minterBurner, _lzEndpoint, _delegate) Ownable(_delegate) {} + + // @dev expose internal functions for testing purposes + function debit( + uint256 _amountToSendLD, + uint256 _minAmountToCreditLD, + uint32 _dstEid + ) public returns (uint256 amountDebitedLD, uint256 amountToCreditLD) { + return _debit(msg.sender, _amountToSendLD, _minAmountToCreditLD, _dstEid); + } + + function credit(address _to, uint256 _amountToCreditLD, uint32 _srcEid) public returns (uint256 amountReceivedLD) { + return _credit(_to, _amountToCreditLD, _srcEid); + } +} \ No newline at end of file From 60cc71cc144d21b86aeb24543b602367fb152c14 Mon Sep 17 00:00:00 2001 From: Matthew Krak Date: Tue, 10 Dec 2024 10:49:49 -0800 Subject: [PATCH 10/24] =?UTF-8?q?=F0=9F=A7=B9=20Fix=20license=20in=20oft-e?= =?UTF-8?q?vm=20for=20MintBurnOFTAdapter=20and=20periphery=20(#1125)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/brave-buckets-approve.md | 5 +++ .../oft-evm/contracts/MintBurnOFTAdapter.sol | 2 +- .../interfaces/IMintableBurnable.sol | 2 +- .../test/mocks/ElevatedMinterBurnerMock.sol | 1 + .../oft-evm/test/mocks/MintBurnERC20Mock.sol | 33 +++++++++++++++++-- 5 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 .changeset/brave-buckets-approve.md diff --git a/.changeset/brave-buckets-approve.md b/.changeset/brave-buckets-approve.md new file mode 100644 index 000000000..5b9cc69b5 --- /dev/null +++ b/.changeset/brave-buckets-approve.md @@ -0,0 +1,5 @@ +--- +"@layerzerolabs/oft-evm": minor +--- + +changed license for MintBurnOFTAdapter and periphery contracts to MIT from UNLICENSED diff --git a/packages/oft-evm/contracts/MintBurnOFTAdapter.sol b/packages/oft-evm/contracts/MintBurnOFTAdapter.sol index 067b15646..518444f9a 100644 --- a/packages/oft-evm/contracts/MintBurnOFTAdapter.sol +++ b/packages/oft-evm/contracts/MintBurnOFTAdapter.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: UNLICENSED +// SPDX-License-Identifier: MIT pragma solidity ^0.8.22; // External imports diff --git a/packages/oft-evm/contracts/interfaces/IMintableBurnable.sol b/packages/oft-evm/contracts/interfaces/IMintableBurnable.sol index 43c5a9181..245a39b74 100644 --- a/packages/oft-evm/contracts/interfaces/IMintableBurnable.sol +++ b/packages/oft-evm/contracts/interfaces/IMintableBurnable.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: UNLICENSED +// SPDX-License-Identifier: MIT pragma solidity ^0.8.22; /// @title Interface for mintable and burnable tokens diff --git a/packages/oft-evm/test/mocks/ElevatedMinterBurnerMock.sol b/packages/oft-evm/test/mocks/ElevatedMinterBurnerMock.sol index a334a7c3e..04225bc0c 100644 --- a/packages/oft-evm/test/mocks/ElevatedMinterBurnerMock.sol +++ b/packages/oft-evm/test/mocks/ElevatedMinterBurnerMock.sol @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.20; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; diff --git a/packages/oft-evm/test/mocks/MintBurnERC20Mock.sol b/packages/oft-evm/test/mocks/MintBurnERC20Mock.sol index 981217cce..4436b0a33 100644 --- a/packages/oft-evm/test/mocks/MintBurnERC20Mock.sol +++ b/packages/oft-evm/test/mocks/MintBurnERC20Mock.sol @@ -1,19 +1,46 @@ -// SPDX-License-Identifier: MIT +// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; -import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import { IMintableBurnable } from "../../contracts/interfaces/IMintableBurnable.sol"; -// @dev WARNING: This is for testing purposes only +/** + * @title MintBurnERC20Mock + * + * @dev WARNING: This contract is for testing purposes only. + * In a production scenario, the `mint` and `burn` methods + * should be guarded by appropriate access control mechanisms. + */ contract MintBurnERC20Mock is ERC20, IMintableBurnable { + /// @notice Constructor to initialize the ERC20 token with a name and symbol. constructor(string memory name, string memory symbol) ERC20(name, symbol) {} + /** + * @notice Burns a specific amount of tokens from a given address. + * + * @dev WARNING: In production, this function should have access control. + * + * @param _from The address from which tokens will be burned. + * @param _amount The amount of tokens to burn. + * + * @return A boolean indicating the success of the burn operation. + */ function burn(address _from, uint256 _amount) external returns (bool) { _burn(_from, _amount); return true; } + /** + * @notice Mints a specific amount of tokens to a given address. + * + * @dev WARNING: In production, this function should have access control. + * + * @param _to The address to which tokens will be minted. + * @param _amount The amount of tokens to mint. + * + * @return A boolean indicating the success of the mint operation. + */ function mint(address _to, uint256 _amount) external returns (bool) { _mint(_to, _amount); return true; From 3d619299884692b83a06fe1f4ffb7394c04079f4 Mon Sep 17 00:00:00 2001 From: Matthew Krak Date: Tue, 10 Dec 2024 19:37:54 -0800 Subject: [PATCH 11/24] =?UTF-8?q?=F0=9F=97=9E=EF=B8=8F=20Add=20mint=20and?= =?UTF-8?q?=20burn=20oft=20adapter=20example=20(#1120)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/mint-burn-oft-adapter/.env.example | 15 + examples/mint-burn-oft-adapter/.eslintignore | 10 + examples/mint-burn-oft-adapter/.eslintrc.js | 10 + examples/mint-burn-oft-adapter/.gitignore | 24 ++ examples/mint-burn-oft-adapter/.nvmrc | 1 + .../mint-burn-oft-adapter/.prettierignore | 10 + examples/mint-burn-oft-adapter/.prettierrc.js | 3 + examples/mint-burn-oft-adapter/README.md | 195 ++++++++++ .../contracts/MyMintBurnOFTAdapter.sol | 25 ++ .../mint-burn-oft-adapter/contracts/MyOFT.sol | 14 + .../contracts/mocks/MintBurnERC20Mock.sol | 48 +++ .../mocks/MyMintBurnOFTAdapterMock.sol | 16 + .../contracts/mocks/MyOFTMock.sol | 19 + .../deploy/MyMintBurnOFTAdapter.ts | 62 +++ .../mint-burn-oft-adapter/deploy/MyOFT.ts | 60 +++ examples/mint-burn-oft-adapter/foundry.toml | 31 ++ .../mint-burn-oft-adapter/hardhat.config.ts | 87 +++++ .../mint-burn-oft-adapter/layerzero.config.ts | 75 ++++ examples/mint-burn-oft-adapter/package.json | 75 ++++ .../mint-burn-oft-adapter/solhint.config.js | 1 + .../test/foundry/MyMintBurnOFTAdapter.t.sol | 180 +++++++++ .../test/hardhat/MyMintBurnOFTAdapter.test.ts | 117 ++++++ .../test/mocks/MintBurnERC20Mock.sol | 48 +++ .../test/mocks/MintBurnOFTAdapterMock.sol | 40 ++ .../test/mocks/OFTComposerMock.sol | 27 ++ .../test/mocks/OFTMock.sol | 59 +++ examples/mint-burn-oft-adapter/tsconfig.json | 13 + .../mint-burn-oft-adapter/type-extensions.ts | 23 ++ package.json | 6 +- packages/create-lz-oapp/src/config.ts | 12 + pnpm-lock.yaml | 356 ++++++++++++------ tests-user/tests/create-lz-oapp.bats | 33 ++ turbo.json | 1 + 33 files changed, 1577 insertions(+), 119 deletions(-) create mode 100644 examples/mint-burn-oft-adapter/.env.example create mode 100644 examples/mint-burn-oft-adapter/.eslintignore create mode 100644 examples/mint-burn-oft-adapter/.eslintrc.js create mode 100644 examples/mint-burn-oft-adapter/.gitignore create mode 100644 examples/mint-burn-oft-adapter/.nvmrc create mode 100644 examples/mint-burn-oft-adapter/.prettierignore create mode 100644 examples/mint-burn-oft-adapter/.prettierrc.js create mode 100644 examples/mint-burn-oft-adapter/README.md create mode 100644 examples/mint-burn-oft-adapter/contracts/MyMintBurnOFTAdapter.sol create mode 100644 examples/mint-burn-oft-adapter/contracts/MyOFT.sol create mode 100644 examples/mint-burn-oft-adapter/contracts/mocks/MintBurnERC20Mock.sol create mode 100644 examples/mint-burn-oft-adapter/contracts/mocks/MyMintBurnOFTAdapterMock.sol create mode 100644 examples/mint-burn-oft-adapter/contracts/mocks/MyOFTMock.sol create mode 100644 examples/mint-burn-oft-adapter/deploy/MyMintBurnOFTAdapter.ts create mode 100644 examples/mint-burn-oft-adapter/deploy/MyOFT.ts create mode 100644 examples/mint-burn-oft-adapter/foundry.toml create mode 100644 examples/mint-burn-oft-adapter/hardhat.config.ts create mode 100644 examples/mint-burn-oft-adapter/layerzero.config.ts create mode 100644 examples/mint-burn-oft-adapter/package.json create mode 100644 examples/mint-burn-oft-adapter/solhint.config.js create mode 100644 examples/mint-burn-oft-adapter/test/foundry/MyMintBurnOFTAdapter.t.sol create mode 100644 examples/mint-burn-oft-adapter/test/hardhat/MyMintBurnOFTAdapter.test.ts create mode 100644 examples/mint-burn-oft-adapter/test/mocks/MintBurnERC20Mock.sol create mode 100644 examples/mint-burn-oft-adapter/test/mocks/MintBurnOFTAdapterMock.sol create mode 100644 examples/mint-burn-oft-adapter/test/mocks/OFTComposerMock.sol create mode 100644 examples/mint-burn-oft-adapter/test/mocks/OFTMock.sol create mode 100644 examples/mint-burn-oft-adapter/tsconfig.json create mode 100644 examples/mint-burn-oft-adapter/type-extensions.ts diff --git a/examples/mint-burn-oft-adapter/.env.example b/examples/mint-burn-oft-adapter/.env.example new file mode 100644 index 000000000..197ba1d67 --- /dev/null +++ b/examples/mint-burn-oft-adapter/.env.example @@ -0,0 +1,15 @@ +# .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.- +# / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ +# `-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' +# +# Example environment configuration +# +# .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.- +# / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ +# `-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' + +# By default, the examples support both mnemonic-based and private key-based authentication +# +# You don't need to set both of these values, just pick the one that you prefer and set that one +MNEMONIC= +PRIVATE_KEY= \ No newline at end of file diff --git a/examples/mint-burn-oft-adapter/.eslintignore b/examples/mint-burn-oft-adapter/.eslintignore new file mode 100644 index 000000000..ee9f768fd --- /dev/null +++ b/examples/mint-burn-oft-adapter/.eslintignore @@ -0,0 +1,10 @@ +artifacts +cache +dist +node_modules +out +*.log +*.sol +*.yaml +*.lock +package-lock.json \ No newline at end of file diff --git a/examples/mint-burn-oft-adapter/.eslintrc.js b/examples/mint-burn-oft-adapter/.eslintrc.js new file mode 100644 index 000000000..f0ea891fd --- /dev/null +++ b/examples/mint-burn-oft-adapter/.eslintrc.js @@ -0,0 +1,10 @@ +require('@rushstack/eslint-patch/modern-module-resolution'); + +module.exports = { + extends: ['@layerzerolabs/eslint-config-next/recommended'], + rules: { + // @layerzerolabs/eslint-config-next defines rules for turborepo-based projects + // that are not relevant for this particular project + 'turbo/no-undeclared-env-vars': 'off', + }, +}; diff --git a/examples/mint-burn-oft-adapter/.gitignore b/examples/mint-burn-oft-adapter/.gitignore new file mode 100644 index 000000000..e2face954 --- /dev/null +++ b/examples/mint-burn-oft-adapter/.gitignore @@ -0,0 +1,24 @@ +node_modules +.env +coverage +coverage.json +typechain +typechain-types + +# Hardhat files +cache +artifacts + + +# LayerZero specific files +.layerzero + +# foundry test compilation files +out + +# pnpm +pnpm-error.log + +# Editor and OS files +.DS_Store +.idea diff --git a/examples/mint-burn-oft-adapter/.nvmrc b/examples/mint-burn-oft-adapter/.nvmrc new file mode 100644 index 000000000..b714151ef --- /dev/null +++ b/examples/mint-burn-oft-adapter/.nvmrc @@ -0,0 +1 @@ +v18.18.0 \ No newline at end of file diff --git a/examples/mint-burn-oft-adapter/.prettierignore b/examples/mint-burn-oft-adapter/.prettierignore new file mode 100644 index 000000000..6e8232f5a --- /dev/null +++ b/examples/mint-burn-oft-adapter/.prettierignore @@ -0,0 +1,10 @@ +artifacts/ +cache/ +dist/ +node_modules/ +out/ +*.log +*ignore +*.yaml +*.lock +package-lock.json \ No newline at end of file diff --git a/examples/mint-burn-oft-adapter/.prettierrc.js b/examples/mint-burn-oft-adapter/.prettierrc.js new file mode 100644 index 000000000..6f55b4019 --- /dev/null +++ b/examples/mint-burn-oft-adapter/.prettierrc.js @@ -0,0 +1,3 @@ +module.exports = { + ...require('@layerzerolabs/prettier-config-next'), +}; diff --git a/examples/mint-burn-oft-adapter/README.md b/examples/mint-burn-oft-adapter/README.md new file mode 100644 index 000000000..e9cde1ed6 --- /dev/null +++ b/examples/mint-burn-oft-adapter/README.md @@ -0,0 +1,195 @@ +

+ + LayerZero + +

+

MintBurnOFTAdapter Example

+ +

+ Quickstart | Configuration | Message Execution Options | Endpoint Addresses +

+ +

This repository contains an example implementation of the MintBurnOFTAdapter, a variant of the OFTAdapter.sol standard from LayerZero. The purpose of this contract is to enable the deployment of more than one OFTAdapter within the mesh network, by utilziing an already deployed ERC20 token's external mint and burn methods on each chain.

+ +

+ Homepage | Docs | Developers +

+ +--- + +- [Usage](#usage) + - [Developing Contracts](#developing-contracts) + - [Installing dependencies](#installing-dependencies) + - [Compiling your contracts](#compiling-your-contracts) + - [Running tests](#running-tests) + - [Deploying Contracts](#deploying-contracts) +- [What is an OFT Adapter?](#what-is-an-oft-adapter) +- [Key Features](#key-features) +- [Deployment Requirements](#deployment-requirements) +- [MintBurnOFTAdapter](#mintburnoftadapter) +- [Requirement](#requirement) +- [Contracts Structure](#contracts-structure) + - [`MinterBurner`](#minterburner) + - [`MintBurnOFTAdapter.sol`](#mintburnoftadaptersol) + - [Variables](#variables-1) + - [Functions](#functions-1) + +## Usage + +### OFTAdapter additional setup: + +- In your `hardhat.config.ts` file, add the following configuration to the network you want to deploy the OFTAdapter to: + ```typescript + // Replace `0x0` with the address of the ERC20 token you want to adapt to the OFT functionality. + oftAdapter: { + tokenAddress: '0x0', + } + ``` + +### Developing Contracts + +#### Installing dependencies + +We recommend using `pnpm` as a package manager (but you can of course use a package manager of your choice): + +```bash +pnpm install +``` + +#### Compiling your contracts + +This project supports both `hardhat` and `forge` compilation. By default, the `compile` command will execute both: + +```bash +pnpm compile +``` + +If you prefer one over the other, you can use the tooling-specific commands: + +```bash +pnpm compile:forge +pnpm compile:hardhat +``` + +Or adjust the `package.json` to for example remove `forge` build: + +```diff +- "compile": "$npm_execpath run compile:forge && $npm_execpath run compile:hardhat", +- "compile:forge": "forge build", +- "compile:hardhat": "hardhat compile", ++ "compile": "hardhat compile" +``` + +#### Running tests + +Similarly to the contract compilation, we support both `hardhat` and `forge` tests. By default, the `test` command will execute both: + +```bash +pnpm test +``` + +If you prefer one over the other, you can use the tooling-specific commands: + +```bash +pnpm test:forge +pnpm test:hardhat +``` + +Or adjust the `package.json` to for example remove `hardhat` tests: + +```diff +- "test": "$npm_execpath test:forge && $npm_execpath test:hardhat", +- "test:forge": "forge test", +- "test:hardhat": "$npm_execpath hardhat test" ++ "test": "forge test" +``` + +### Deploying Contracts + +Set up deployer wallet/account: + +- Rename `.env.example` -> `.env` +- Choose your preferred means of setting up your deployer wallet/account: + +``` +MNEMONIC="test test test test test test test test test test test junk" +or... +PRIVATE_KEY="0xabc...def" +``` + +- Fund this address with the corresponding chain's native tokens you want to deploy to. + +To deploy your contracts to your desired blockchains, run the following command in your project's folder: + +```bash +npx hardhat lz:deploy +``` + +More information about available CLI arguments can be found using the `--help` flag: + +```bash +npx hardhat lz:deploy --help +``` + +By following these steps, you can focus more on creating innovative omnichain solutions and less on the complexities of cross-chain communication. + +

+ +

+ Join our community on Discord | Follow us on Twitter +

+ +## What is an OFT Adapter? + +OFT Adapter allows an existing token to expand to any supported chain as a native token with a unified global supply, inheriting all the features of the OFT Standard. This works as an intermediary contract that handles sending and receiving tokens that have already been deployed. Read more [here](https://docs.layerzero.network/v2/developers/evm/oft/adapter). + +Ideally, when you want to convert an existing ERC20 token with its current fixed supply into an Omnichain token, you can use the OFTAdapter as a wrapper around that ERC20. + +There are several ways to go about it since the base code of OFTAdapter keeps contract logic implementation up to the developer. Eg., the Adapter could be implemented in such a way that the original ERC20 is locked inside the Adapter on chain A and the OFT is minted on chain B. + +## Key Features + +- **Mint and Burn Access**: Enables the MintBurnOFTAdapter to interact with ERC20 tokens that have minting and burning capabilities. This is crucial for maintaining unified token supply across different blockchain networks in a decentralized manner. + +- **Access Control Integration**: Ensures that only authorized entities (deployers or specific contracts) have the permissions to mint and burn tokens. This is managed through an access control or allowlist mechanism. + +- **Multiple Adapter Deployments**: Supports the deployment of multiple instances of the MintBurnOFTAdapter, each configured with different token contracts and LayerZero endpoints, thus enhancing flexibility in cross-chain operations. + +## Deployment Requirements + +1. **ERC20 Token Access**: The deployer must ensure that the ERC20 token contract allows the MintBurnOFTAdapter to access its mint and burn methods. This typically requires configuring the ERC20 token's access control mechanisms to include the adapter's address in an allowlist. + +2. **Adapter Deployment and Configuration**: + Deploy the MintBurnOFTAdapter with references to the ERC20 token, the LayerZero endpoint, and any relevant delegate addresses. + Add the address of the newly deployed MintBurnOFTAdapter to the ERC20 token's allowlist to enable minting and burning. + +## MintBurnOFTAdapter + +[`MyMintBurnOFTAdapter`](./contracts/MyMintBurnOFTAdapter.sol) is a variant of OFT Adapter that can use a token's external permissions to **burn** on chain A (source chain), as opposed to **lock**, and mint on chain B (destination chain). + +## Requirement + +The only requirement is that the base ERC20 must have an external or public `burn` and a `mint` function, and implement the `IMintableBurnable.sol` interface found in `./devtools/packages/oft-evm/interfaces/IMintableBurnable.sol`. + +## Contracts Structure + +### `MinterBurner` + +This is a periphery contract for minting or burning tokens and executing arbitrary calls on the underlying ERC20. + +### `MintBurnOFTAdapter.sol` + +#### Variables + +This is the actual OFT Adapter contract that maintains two constants: `innerToken` and `minterBurner` + +- `innerToken`: underlying ERC20 implementation +- `minterBurner`: reference to the `IMintableBurnable` implementation that has the implementation of `burn` and `mint` functions + +#### Functions + +- `_debit`: Calls `burn` on `minterBurner` effectively burning tokens from sender's balance from source chain. +- `_credit`: Calls `mint` on `minterBurner`, effectively minting tokens to sender's balance on destination chain. + +> [!IMPORTANT] +> The default `OFTAdapter` implementation assumes **lossless** transfers, ie. 1 token in = 1 token out. If the underlying ERC20 applies something like a transfer fee, the default will **not** work. A pre/post balance check will need to be added to calculate the `amountReceivedLD`. diff --git a/examples/mint-burn-oft-adapter/contracts/MyMintBurnOFTAdapter.sol b/examples/mint-burn-oft-adapter/contracts/MyMintBurnOFTAdapter.sol new file mode 100644 index 000000000..b03d501dd --- /dev/null +++ b/examples/mint-burn-oft-adapter/contracts/MyMintBurnOFTAdapter.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.22; + +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { MintBurnOFTAdapter } from "@layerzerolabs/oft-evm/contracts/MintBurnOFTAdapter.sol"; +import { IMintableBurnable } from "@layerzerolabs/oft-evm/contracts/interfaces/IMintableBurnable.sol"; + +/** + * @title MintBurnOFTAdapter Contract + * @dev MintBurnOFTAdapter is a contract that adapts an ERC-20 token with external mint and burn logic to the OFT functionality. + * + * @dev For existing ERC20 tokens with exposed mint and burn permissions, this can be used to convert the token to crosschain compatibility. + * @dev Unlike the vanilla OFT Adapter, multiple of these can exist for a given global mesh. + * @dev WARNING: The default OFTAdapter implementation assumes LOSSLESS transfers, ie. 1 token in, 1 token out. + * IF the 'innerToken' applies something like a transfer fee, the default will NOT work... + * a pre/post balance check will need to be done to calculate the amountSentLD/amountReceivedLD. + */ +contract MyMintBurnOFTAdapter is MintBurnOFTAdapter { + constructor( + address _token, + IMintableBurnable _minterBurner, + address _lzEndpoint, + address _delegate + ) MintBurnOFTAdapter(_token, _minterBurner, _lzEndpoint, _delegate) Ownable(_delegate) {} +} diff --git a/examples/mint-burn-oft-adapter/contracts/MyOFT.sol b/examples/mint-burn-oft-adapter/contracts/MyOFT.sol new file mode 100644 index 000000000..f8bc7b47f --- /dev/null +++ b/examples/mint-burn-oft-adapter/contracts/MyOFT.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.22; + +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { OFT } from "@layerzerolabs/oft-evm/contracts/OFT.sol"; + +contract MyOFT is OFT { + constructor( + string memory _name, + string memory _symbol, + address _lzEndpoint, + address _delegate + ) OFT(_name, _symbol, _lzEndpoint, _delegate) Ownable(_delegate) {} +} diff --git a/examples/mint-burn-oft-adapter/contracts/mocks/MintBurnERC20Mock.sol b/examples/mint-burn-oft-adapter/contracts/mocks/MintBurnERC20Mock.sol new file mode 100644 index 000000000..ba2fc5227 --- /dev/null +++ b/examples/mint-burn-oft-adapter/contracts/mocks/MintBurnERC20Mock.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +import { IMintableBurnable } from "@layerzerolabs/oft-evm/contracts/interfaces/IMintableBurnable.sol"; + +/** + * @title MintBurnERC20Mock + * + * @dev WARNING: This contract is for testing purposes only. + * In a production scenario, the `mint` and `burn` methods + * should be guarded by appropriate access control mechanisms. + */ +contract MintBurnERC20Mock is ERC20, IMintableBurnable { + /// @notice Constructor to initialize the ERC20 token with a name and symbol. + constructor(string memory name, string memory symbol) ERC20(name, symbol) {} + + /** + * @notice Burns a specific amount of tokens from a given address. + * + * @dev WARNING: In production, this function should have access control. + * + * @param _from The address from which tokens will be burned. + * @param _amount The amount of tokens to burn. + * + * @return A boolean indicating the success of the burn operation. + */ + function burn(address _from, uint256 _amount) external returns (bool) { + _burn(_from, _amount); + return true; + } + + /** + * @notice Mints a specific amount of tokens to a given address. + * + * @dev WARNING: In production, this function should have access control. + * + * @param _to The address to which tokens will be minted. + * @param _amount The amount of tokens to mint. + * + * @return A boolean indicating the success of the mint operation. + */ + function mint(address _to, uint256 _amount) external returns (bool) { + _mint(_to, _amount); + return true; + } +} diff --git a/examples/mint-burn-oft-adapter/contracts/mocks/MyMintBurnOFTAdapterMock.sol b/examples/mint-burn-oft-adapter/contracts/mocks/MyMintBurnOFTAdapterMock.sol new file mode 100644 index 000000000..888b7e78b --- /dev/null +++ b/examples/mint-burn-oft-adapter/contracts/mocks/MyMintBurnOFTAdapterMock.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.22; + +import { MyMintBurnOFTAdapter } from "../MyMintBurnOFTAdapter.sol"; + +import { IMintableBurnable } from "@layerzerolabs/oft-evm/contracts/interfaces/IMintableBurnable.sol"; + +// @dev WARNING: This is for testing purposes only +contract MyMintBurnOFTAdapterMock is MyMintBurnOFTAdapter { + constructor( + address _token, + IMintableBurnable _minterBurner, + address _lzEndpoint, + address _delegate + ) MyMintBurnOFTAdapter(_token, _minterBurner, _lzEndpoint, _delegate) {} +} diff --git a/examples/mint-burn-oft-adapter/contracts/mocks/MyOFTMock.sol b/examples/mint-burn-oft-adapter/contracts/mocks/MyOFTMock.sol new file mode 100644 index 000000000..71ee1d841 --- /dev/null +++ b/examples/mint-burn-oft-adapter/contracts/mocks/MyOFTMock.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.22; + +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { OFT } from "@layerzerolabs/oft-evm/contracts/OFT.sol"; + +// @dev WARNING: This is for testing purposes only +contract MyOFTMock is OFT { + constructor( + string memory _name, + string memory _symbol, + address _lzEndpoint, + address _delegate + ) OFT(_name, _symbol, _lzEndpoint, _delegate) Ownable(_delegate) {} + + function mint(address _to, uint256 _amount) public { + _mint(_to, _amount); + } +} diff --git a/examples/mint-burn-oft-adapter/deploy/MyMintBurnOFTAdapter.ts b/examples/mint-burn-oft-adapter/deploy/MyMintBurnOFTAdapter.ts new file mode 100644 index 000000000..6fec9ed5f --- /dev/null +++ b/examples/mint-burn-oft-adapter/deploy/MyMintBurnOFTAdapter.ts @@ -0,0 +1,62 @@ +import assert from 'assert' + +import { type DeployFunction } from 'hardhat-deploy/types' + +const contractName = 'MyMintBurnOFTAdapter' + +const deploy: DeployFunction = async (hre) => { + const { getNamedAccounts, deployments } = hre + + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + assert(deployer, 'Missing named deployer account') + + console.log(`Network: ${hre.network.name}`) + console.log(`Deployer: ${deployer}`) + + // This is an external deployment pulled in from @layerzerolabs/lz-evm-sdk-v2 + // + // @layerzerolabs/toolbox-hardhat takes care of plugging in the external deployments + // from @layerzerolabs packages based on the configuration in your hardhat config + // + // For this to work correctly, your network config must define an eid property + // set to `EndpointId` as defined in @layerzerolabs/lz-definitions + // + // For example: + // + // networks: { + // fuji: { + // ... + // eid: EndpointId.AVALANCHE_V2_TESTNET + // } + // } + const endpointV2Deployment = await hre.deployments.get('EndpointV2') + const minterBurnerAddress = '' + + // The token address must be defined in hardhat.config.ts + // If the token address is not defined, the deployment will log a warning and skip the deployment + if (hre.network.config.oftAdapter == null) { + console.warn(`oftAdapter not configured on network config, skipping OFTWrapper deployment`) + + return + } + + const { address } = await deploy(contractName, { + from: deployer, + args: [ + hre.network.config.oftAdapter.tokenAddress, // token address + minterBurnerAddress, // token address implementing IMintableBurnable + endpointV2Deployment.address, // LayerZero's EndpointV2 address + deployer, // owner + ], + log: true, + skipIfAlreadyDeployed: false, + }) + + console.log(`Deployed contract: ${contractName}, network: ${hre.network.name}, address: ${address}`) +} + +deploy.tags = [contractName] + +export default deploy diff --git a/examples/mint-burn-oft-adapter/deploy/MyOFT.ts b/examples/mint-burn-oft-adapter/deploy/MyOFT.ts new file mode 100644 index 000000000..5db617116 --- /dev/null +++ b/examples/mint-burn-oft-adapter/deploy/MyOFT.ts @@ -0,0 +1,60 @@ +import assert from 'assert' + +import { type DeployFunction } from 'hardhat-deploy/types' + +const contractName = 'MyOFT' + +const deploy: DeployFunction = async (hre) => { + const { getNamedAccounts, deployments } = hre + + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + assert(deployer, 'Missing named deployer account') + + console.log(`Network: ${hre.network.name}`) + console.log(`Deployer: ${deployer}`) + + // This is an external deployment pulled in from @layerzerolabs/lz-evm-sdk-v2 + // + // @layerzerolabs/toolbox-hardhat takes care of plugging in the external deployments + // from @layerzerolabs packages based on the configuration in your hardhat config + // + // For this to work correctly, your network config must define an eid property + // set to `EndpointId` as defined in @layerzerolabs/lz-definitions + // + // For example: + // + // networks: { + // fuji: { + // ... + // eid: EndpointId.AVALANCHE_V2_TESTNET + // } + // } + const endpointV2Deployment = await hre.deployments.get('EndpointV2') + + // If the oftAdapter configuration is defined on a network that is deploying an OFT, + // the deployment will log a warning and skip the deployment + if (hre.network.config.oftAdapter != null) { + console.warn(`oftAdapter configuration found on OFT deployment, skipping OFT deployment`) + return + } + + const { address } = await deploy(contractName, { + from: deployer, + args: [ + 'MyOFT', // name + 'MOFT', // symbol + endpointV2Deployment.address, // LayerZero's EndpointV2 address + deployer, // owner + ], + log: true, + skipIfAlreadyDeployed: false, + }) + + console.log(`Deployed contract: ${contractName}, network: ${hre.network.name}, address: ${address}`) +} + +deploy.tags = [contractName] + +export default deploy diff --git a/examples/mint-burn-oft-adapter/foundry.toml b/examples/mint-burn-oft-adapter/foundry.toml new file mode 100644 index 000000000..2b46113c9 --- /dev/null +++ b/examples/mint-burn-oft-adapter/foundry.toml @@ -0,0 +1,31 @@ +[profile.default] +solc-version = '0.8.22' +src = 'contracts' +out = 'out' +test = 'test/foundry' +cache_path = 'cache/foundry' +verbosity = 3 +libs = [ + # We provide a set of useful contract utilities + # in the lib directory of @layerzerolabs/toolbox-foundry: + # + # - forge-std + # - ds-test + # - solidity-bytes-utils + 'node_modules/@layerzerolabs/toolbox-foundry/lib', + 'node_modules', +] + +remappings = [ + # Due to a misconfiguration of solidity-bytes-utils, an outdated version + # of forge-std is being dragged in + # + # To remedy this, we'll remap the ds-test and forge-std imports to our own versions + 'ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test', + 'forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std', + '@layerzerolabs/=node_modules/@layerzerolabs/', + '@openzeppelin/=node_modules/@openzeppelin/', +] + +[fuzz] +runs = 1000 diff --git a/examples/mint-burn-oft-adapter/hardhat.config.ts b/examples/mint-burn-oft-adapter/hardhat.config.ts new file mode 100644 index 000000000..b1fbe86f8 --- /dev/null +++ b/examples/mint-burn-oft-adapter/hardhat.config.ts @@ -0,0 +1,87 @@ +// Get the environment configuration from .env file +// +// To make use of automatic environment setup: +// - Duplicate .env.example file and name it .env +// - Fill in the environment variables +import 'dotenv/config' + +import 'hardhat-deploy' +import 'hardhat-contract-sizer' +import '@nomiclabs/hardhat-ethers' +import '@layerzerolabs/toolbox-hardhat' +import { HardhatUserConfig, HttpNetworkAccountsUserConfig } from 'hardhat/types' + +import { EndpointId } from '@layerzerolabs/lz-definitions' + +import './type-extensions' + +// Set your preferred authentication method +// +// If you prefer using a mnemonic, set a MNEMONIC environment variable +// to a valid mnemonic +const MNEMONIC = process.env.MNEMONIC + +// If you prefer to be authenticated using a private key, set a PRIVATE_KEY environment variable +const PRIVATE_KEY = process.env.PRIVATE_KEY + +const accounts: HttpNetworkAccountsUserConfig | undefined = MNEMONIC + ? { mnemonic: MNEMONIC } + : PRIVATE_KEY + ? [PRIVATE_KEY] + : undefined + +if (accounts == null) { + console.warn( + 'Could not find MNEMONIC or PRIVATE_KEY environment variables. It will not be possible to execute transactions in your example.' + ) +} + +const config: HardhatUserConfig = { + paths: { + cache: 'cache/hardhat', + }, + solidity: { + compilers: [ + { + version: '0.8.22', + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + ], + }, + networks: { + 'sepolia-testnet': { + eid: EndpointId.SEPOLIA_V2_TESTNET, + url: process.env.RPC_URL_SEPOLIA || 'https://rpc.sepolia.org/', + accounts, + oftAdapter: { + tokenAddress: '0x0', // Set the token address for the OFT adapter + }, + }, + 'avalanche-testnet': { + eid: EndpointId.AVALANCHE_V2_TESTNET, + url: process.env.RPC_URL_FUJI || 'https://rpc.ankr.com/avalanche_fuji', + accounts, + }, + 'amoy-testnet': { + eid: EndpointId.AMOY_V2_TESTNET, + url: process.env.RPC_URL_AMOY || 'https://polygon-amoy-bor-rpc.publicnode.com', + accounts, + }, + hardhat: { + // Need this for testing because TestHelperOz5.sol is exceeding the compiled contract size limit + allowUnlimitedContractSize: true, + }, + }, + namedAccounts: { + deployer: { + default: 0, // wallet address of index[0], of the mnemonic in .env + }, + }, +} + +export default config diff --git a/examples/mint-burn-oft-adapter/layerzero.config.ts b/examples/mint-burn-oft-adapter/layerzero.config.ts new file mode 100644 index 000000000..96e2a6969 --- /dev/null +++ b/examples/mint-burn-oft-adapter/layerzero.config.ts @@ -0,0 +1,75 @@ +import { EndpointId } from '@layerzerolabs/lz-definitions' + +import type { OAppOmniGraphHardhat, OmniPointHardhat } from '@layerzerolabs/toolbox-hardhat' + +/** + * WARNING: ONLY 1 OFTAdapter should exist for a given global mesh. + * The token address for the adapter should be defined in hardhat.config. This will be used in deployment. + * + * for example: + * + * sepolia: { + * eid: EndpointId.SEPOLIA_V2_TESTNET, + * url: process.env.RPC_URL_SEPOLIA || 'https://rpc.sepolia.org/', + * accounts, + * oft-adapter: { + * tokenAddress: '0x0', // Set the token address for the OFT adapter + * }, + * }, + */ +const sepoliaContract: OmniPointHardhat = { + eid: EndpointId.SEPOLIA_V2_TESTNET, + contractName: 'MyMintBurnOFTAdapter', +} + +const fujiContract: OmniPointHardhat = { + eid: EndpointId.AVALANCHE_V2_TESTNET, + contractName: 'MyOFT', +} + +const amoyContract: OmniPointHardhat = { + eid: EndpointId.AMOY_V2_TESTNET, + contractName: 'MyOFT', +} + +const config: OAppOmniGraphHardhat = { + contracts: [ + { + contract: fujiContract, + }, + { + contract: sepoliaContract, + }, + { + contract: amoyContract, + }, + ], + connections: [ + { + from: fujiContract, + to: sepoliaContract, + }, + { + from: fujiContract, + to: amoyContract, + }, + { + from: sepoliaContract, + to: fujiContract, + }, + { + from: sepoliaContract, + to: amoyContract, + }, + { + from: amoyContract, + to: sepoliaContract, + }, + { + from: amoyContract, + to: fujiContract, + }, + ], +} + +export default config diff --git a/examples/mint-burn-oft-adapter/package.json b/examples/mint-burn-oft-adapter/package.json new file mode 100644 index 000000000..c0e207272 --- /dev/null +++ b/examples/mint-burn-oft-adapter/package.json @@ -0,0 +1,75 @@ +{ + "name": "@layerzerolabs/mint-burn-oft-adapter-example", + "version": "0.0.1", + "private": true, + "license": "MIT", + "scripts": { + "clean": "rm -rf artifacts cache out", + "compile": "concurrently -c auto --names forge,hardhat '$npm_execpath run compile:forge' '$npm_execpath run compile:hardhat'", + "compile:forge": "forge build", + "compile:hardhat": "hardhat compile", + "lint": "$npm_execpath run lint:js && $npm_execpath run lint:sol", + "lint:fix": "eslint --fix '**/*.{js,ts,json}' && prettier --write . && solhint 'contracts/**/*.sol' --fix --noPrompt", + "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:forge": "forge test", + "test:hardhat": "hardhat test" + }, + "resolutions": { + "ethers": "^5.7.2", + "hardhat-deploy": "^0.12.1" + }, + "devDependencies": { + "@babel/core": "^7.23.9", + "@layerzerolabs/eslint-config-next": "~2.3.39", + "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", + "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", + "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", + "@layerzerolabs/lz-v2-utilities": "^3.0.12", + "@layerzerolabs/oapp-evm": "^0.3.0", + "@layerzerolabs/oft-evm": "^3.0.0", + "@layerzerolabs/prettier-config-next": "^2.3.39", + "@layerzerolabs/solhint-config": "^3.0.12", + "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/toolbox-foundry": "~0.1.9", + "@layerzerolabs/toolbox-hardhat": "~0.6.1", + "@nomicfoundation/hardhat-ethers": "^3.0.5", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "@openzeppelin/contracts": "^5.0.2", + "@openzeppelin/contracts-upgradeable": "^5.0.2", + "@rushstack/eslint-patch": "^1.7.0", + "@types/chai": "^4.3.11", + "@types/mocha": "^10.0.6", + "@types/node": "~18.18.14", + "chai": "^4.4.1", + "concurrently": "~9.1.0", + "dotenv": "^16.4.1", + "eslint": "^8.55.0", + "eslint-plugin-jest-extended": "~2.0.0", + "ethers": "^5.7.2", + "hardhat": "^2.22.10", + "hardhat-contract-sizer": "^2.10.0", + "hardhat-deploy": "^0.12.1", + "mocha": "^10.2.0", + "prettier": "^3.2.5", + "solhint": "^4.1.1", + "solidity-bytes-utils": "^0.8.2", + "ts-node": "^10.9.2", + "typescript": "^5.4.4" + }, + "engines": { + "node": ">=18.16.0" + }, + "pnpm": { + "overrides": { + "ethers": "^5.7.2", + "hardhat-deploy": "^0.12.1" + } + }, + "overrides": { + "ethers": "^5.7.2", + "hardhat-deploy": "^0.12.1" + } +} diff --git a/examples/mint-burn-oft-adapter/solhint.config.js b/examples/mint-burn-oft-adapter/solhint.config.js new file mode 100644 index 000000000..52efe629c --- /dev/null +++ b/examples/mint-burn-oft-adapter/solhint.config.js @@ -0,0 +1 @@ +module.exports = require('@layerzerolabs/solhint-config'); diff --git a/examples/mint-burn-oft-adapter/test/foundry/MyMintBurnOFTAdapter.t.sol b/examples/mint-burn-oft-adapter/test/foundry/MyMintBurnOFTAdapter.t.sol new file mode 100644 index 000000000..a00532ef1 --- /dev/null +++ b/examples/mint-burn-oft-adapter/test/foundry/MyMintBurnOFTAdapter.t.sol @@ -0,0 +1,180 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.20; + +// Mock imports +import { OFTMock } from "../mocks/OFTMock.sol"; +import { MintBurnOFTAdapterMock } from "../mocks/MintBurnOFTAdapterMock.sol"; +import { MintBurnERC20Mock } from "../mocks/MintBurnERC20Mock.sol"; +import { OFTComposerMock } from "../mocks/OFTComposerMock.sol"; + +// OApp imports +import { IOAppOptionsType3, EnforcedOptionParam } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol"; +import { OptionsBuilder } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol"; + +// OFT imports +import { IMintableBurnable } from "@layerzerolabs/oft-evm/contracts/interfaces/IMintableBurnable.sol"; +import { IOFT, SendParam, OFTReceipt } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol"; +import { MessagingFee, MessagingReceipt } from "@layerzerolabs/oft-evm/contracts/OFTCore.sol"; +import { OFTMsgCodec } from "@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol"; +import { OFTComposeMsgCodec } from "@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol"; + +// OZ imports +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; + +// Forge imports +import "forge-std/console.sol"; + +// DevTools imports +import { TestHelperOz5 } from "@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol"; + +contract MyMintBurnOFTAdapterTest is TestHelperOz5 { + using OptionsBuilder for bytes; + + uint32 private aEid = 1; + uint32 private bEid = 2; + + MintBurnERC20Mock private aMintBurnToken; + MintBurnOFTAdapterMock private aMintBurnOFTAdapter; + OFTMock private bOFT; + + address private userA = address(0x1); + address private userB = address(0x2); + uint256 private initialBalance = 100 ether; + + function setUp() public virtual override { + vm.deal(userA, 1000 ether); + vm.deal(userB, 1000 ether); + + super.setUp(); + setUpEndpoints(2, LibraryType.UltraLightNode); + + aMintBurnToken = MintBurnERC20Mock( + _deployOApp(type(MintBurnERC20Mock).creationCode, abi.encode("Token", "TOKEN")) + ); + + aMintBurnOFTAdapter = MintBurnOFTAdapterMock( + _deployOApp( + type(MintBurnOFTAdapterMock).creationCode, + abi.encode( + address(aMintBurnToken), + IMintableBurnable(aMintBurnToken), + address(endpoints[aEid]), + address(this) + ) + ) + ); + + bOFT = OFTMock( + _deployOApp( + type(OFTMock).creationCode, + abi.encode("Token", "TOKEN", address(endpoints[bEid]), address(this)) + ) + ); + + // config and wire the ofts + address[] memory ofts = new address[](2); + ofts[0] = address(aMintBurnOFTAdapter); + ofts[1] = address(bOFT); + this.wireOApps(ofts); + + // mint tokens + aMintBurnToken.mint(userA, initialBalance); + } + + function test_constructor() public { + assertEq(aMintBurnOFTAdapter.owner(), address(this)); + assertEq(bOFT.owner(), address(this)); + + assertEq(aMintBurnToken.balanceOf(userA), initialBalance); + assertEq(aMintBurnToken.balanceOf(address(aMintBurnOFTAdapter)), 0); + assertEq(bOFT.balanceOf(userB), 0); + + assertEq(aMintBurnOFTAdapter.token(), address(aMintBurnToken)); + assertEq(bOFT.token(), address(bOFT)); + } + + function test_send_mint_burn_oft_adapter() public { + uint256 tokensToSend = 1 ether; + bytes memory options = OptionsBuilder.newOptions().addExecutorLzReceiveOption(200000, 0); + SendParam memory sendParam = SendParam( + bEid, + addressToBytes32(userB), + tokensToSend, + tokensToSend, + options, + "", + "" + ); + MessagingFee memory fee = aMintBurnOFTAdapter.quoteSend(sendParam, false); + + assertEq(aMintBurnToken.balanceOf(userA), initialBalance); + assertEq(aMintBurnToken.balanceOf(address(aMintBurnOFTAdapter)), 0); + assertEq(bOFT.balanceOf(userB), 0); + + vm.prank(userA); + aMintBurnOFTAdapter.send{ value: fee.nativeFee }(sendParam, fee, payable(address(this))); + verifyPackets(bEid, addressToBytes32(address(bOFT))); + + assertEq(aMintBurnToken.balanceOf(userA), initialBalance - tokensToSend); + assertEq(aMintBurnToken.balanceOf(address(aMintBurnOFTAdapter)), 0); + assertEq(bOFT.balanceOf(userB), tokensToSend); + } + + function test_send_oft_adapter_compose_msg() public { + uint256 tokensToSend = 1 ether; + + OFTComposerMock composer = new OFTComposerMock(); + + bytes memory options = OptionsBuilder + .newOptions() + .addExecutorLzReceiveOption(200000, 0) + .addExecutorLzComposeOption(0, 500000, 0); + bytes memory composeMsg = hex"1234"; + SendParam memory sendParam = SendParam( + bEid, + addressToBytes32(address(composer)), + tokensToSend, + tokensToSend, + options, + composeMsg, + "" + ); + MessagingFee memory fee = aMintBurnOFTAdapter.quoteSend(sendParam, false); + + assertEq(aMintBurnToken.balanceOf(userA), initialBalance); + assertEq(aMintBurnToken.balanceOf(address(aMintBurnOFTAdapter)), 0); + assertEq(bOFT.balanceOf(userB), 0); + + vm.prank(userA); + (MessagingReceipt memory msgReceipt, OFTReceipt memory oftReceipt) = aMintBurnOFTAdapter.send{ + value: fee.nativeFee + }(sendParam, fee, payable(address(this))); + verifyPackets(bEid, addressToBytes32(address(bOFT))); + + // lzCompose params + uint32 dstEid_ = bEid; + address from_ = address(bOFT); + bytes memory options_ = options; + bytes32 guid_ = msgReceipt.guid; + address to_ = address(composer); + bytes memory composerMsg_ = OFTComposeMsgCodec.encode( + msgReceipt.nonce, + aEid, + oftReceipt.amountReceivedLD, + abi.encodePacked(addressToBytes32(userA), composeMsg) + ); + this.lzCompose(dstEid_, from_, options_, guid_, to_, composerMsg_); + + assertEq(aMintBurnToken.balanceOf(userA), initialBalance - tokensToSend); + assertEq(aMintBurnToken.balanceOf(address(aMintBurnOFTAdapter)), 0); + assertEq(bOFT.balanceOf(address(composer)), tokensToSend); + + assertEq(composer.from(), from_); + assertEq(composer.guid(), guid_); + assertEq(composer.message(), composerMsg_); + assertEq(composer.executor(), address(this)); + assertEq(composer.extraData(), composerMsg_); // default to setting the extraData to the message as well to test + } + + // TODO import the rest of oft tests? +} diff --git a/examples/mint-burn-oft-adapter/test/hardhat/MyMintBurnOFTAdapter.test.ts b/examples/mint-burn-oft-adapter/test/hardhat/MyMintBurnOFTAdapter.test.ts new file mode 100644 index 000000000..798cbdc20 --- /dev/null +++ b/examples/mint-burn-oft-adapter/test/hardhat/MyMintBurnOFTAdapter.test.ts @@ -0,0 +1,117 @@ +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' +import { expect } from 'chai' +import { Contract, ContractFactory } from 'ethers' +import { deployments, ethers } from 'hardhat' + +import { Options } from '@layerzerolabs/lz-v2-utilities' + +describe('MyMintBurnOFTAdapter Test', function () { + // Constant representing a mock Endpoint ID for testing purposes + const eidA = 1 + const eidB = 2 + // Declaration of variables to be used in the test suite + let MyMintBurnOFTAdapter: ContractFactory + let MyOFT: ContractFactory + let MintBurnERC20Mock: ContractFactory + let EndpointV2Mock: ContractFactory + let ownerA: SignerWithAddress + let ownerB: SignerWithAddress + let endpointOwner: SignerWithAddress + let token: Contract + let myMintBurnOFTAdapterA: Contract + let myOFTB: Contract + let mockEndpointV2A: Contract + let mockEndpointV2B: Contract + + // Before hook for setup that runs once before all tests in the block + before(async function () { + // Contract factory for our tested contract + // + // We are using a derived contract that exposes a mint() function for testing purposes + MyMintBurnOFTAdapter = await ethers.getContractFactory('MyMintBurnOFTAdapterMock') + + MyOFT = await ethers.getContractFactory('MyOFTMock') + + MintBurnERC20Mock = await ethers.getContractFactory('MintBurnERC20Mock') + + // Fetching the first three signers (accounts) from Hardhat's local Ethereum network + const signers = await ethers.getSigners() + + ;[ownerA, ownerB, endpointOwner] = signers + + // The EndpointV2Mock contract comes from @layerzerolabs/test-devtools-evm-hardhat package + // and its artifacts are connected as external artifacts to this project + // + // Unfortunately, hardhat itself does not yet provide a way of connecting external artifacts, + // so we rely on hardhat-deploy to create a ContractFactory for EndpointV2Mock + // + // See https://github.com/NomicFoundation/hardhat/issues/1040 + const EndpointV2MockArtifact = await deployments.getArtifact('EndpointV2Mock') + EndpointV2Mock = new ContractFactory(EndpointV2MockArtifact.abi, EndpointV2MockArtifact.bytecode, endpointOwner) + }) + + // beforeEach hook for setup that runs before each test in the block + beforeEach(async function () { + // Deploying a mock LZEndpoint with the given Endpoint ID + mockEndpointV2A = await EndpointV2Mock.deploy(eidA) + mockEndpointV2B = await EndpointV2Mock.deploy(eidB) + + token = await MintBurnERC20Mock.deploy('Token', 'TOKEN') + + // Deploying two instances of MyOFT contract with different identifiers and linking them to the mock LZEndpoint + myMintBurnOFTAdapterA = await MyMintBurnOFTAdapter.deploy( + token.address, + token.address, + mockEndpointV2A.address, + ownerA.address + ) + myOFTB = await MyOFT.deploy('bOFT', 'bOFT', mockEndpointV2B.address, ownerB.address) + + // Setting destination endpoints in the LZEndpoint mock for each MyOFT instance + await mockEndpointV2A.setDestLzEndpoint(myOFTB.address, mockEndpointV2B.address) + await mockEndpointV2B.setDestLzEndpoint(myMintBurnOFTAdapterA.address, mockEndpointV2A.address) + + // Setting each MyOFT instance as a peer of the other in the mock LZEndpoint + await myMintBurnOFTAdapterA.connect(ownerA).setPeer(eidB, ethers.utils.zeroPad(myOFTB.address, 32)) + await myOFTB.connect(ownerB).setPeer(eidA, ethers.utils.zeroPad(myMintBurnOFTAdapterA.address, 32)) + }) + + // A test case to verify token transfer functionality + it('should send a token from A address to B address via OFTAdapter/OFT', async function () { + // Minting an initial amount of tokens to ownerA's address in the myOFTA contract + const initialAmount = ethers.utils.parseEther('100') + await token.mint(ownerA.address, initialAmount) + + // Defining the amount of tokens to send and constructing the parameters for the send operation + const tokensToSend = ethers.utils.parseEther('1') + + // Defining extra message execution options for the send operation + const options = Options.newOptions().addExecutorLzReceiveOption(200000, 0).toHex().toString() + + const sendParam = [ + eidB, + ethers.utils.zeroPad(ownerB.address, 32), + tokensToSend, + tokensToSend, + options, + '0x', + '0x', + ] + + // Fetching the native fee for the token send operation + const [nativeFee] = await myMintBurnOFTAdapterA.quoteSend(sendParam, false) + + // Executing the send operation from myOFTA contract + await myMintBurnOFTAdapterA.send(sendParam, [nativeFee, 0], ownerA.address, { value: nativeFee }) + + // Fetching the final token balances of ownerA and ownerB + const finalBalanceA = await token.balanceOf(ownerA.address) + const finalBalanceAdapter = await token.balanceOf(myMintBurnOFTAdapterA.address) + const finalBalanceB = await myOFTB.balanceOf(ownerB.address) + + // Asserting that the final balances are as expected after the send operation + expect(finalBalanceA).eql(initialAmount.sub(tokensToSend)) + expect(finalBalanceAdapter).eql(ethers.utils.parseEther('0')) + expect(finalBalanceB).eql(tokensToSend) + }) +}) diff --git a/examples/mint-burn-oft-adapter/test/mocks/MintBurnERC20Mock.sol b/examples/mint-burn-oft-adapter/test/mocks/MintBurnERC20Mock.sol new file mode 100644 index 000000000..ba2fc5227 --- /dev/null +++ b/examples/mint-burn-oft-adapter/test/mocks/MintBurnERC20Mock.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +import { IMintableBurnable } from "@layerzerolabs/oft-evm/contracts/interfaces/IMintableBurnable.sol"; + +/** + * @title MintBurnERC20Mock + * + * @dev WARNING: This contract is for testing purposes only. + * In a production scenario, the `mint` and `burn` methods + * should be guarded by appropriate access control mechanisms. + */ +contract MintBurnERC20Mock is ERC20, IMintableBurnable { + /// @notice Constructor to initialize the ERC20 token with a name and symbol. + constructor(string memory name, string memory symbol) ERC20(name, symbol) {} + + /** + * @notice Burns a specific amount of tokens from a given address. + * + * @dev WARNING: In production, this function should have access control. + * + * @param _from The address from which tokens will be burned. + * @param _amount The amount of tokens to burn. + * + * @return A boolean indicating the success of the burn operation. + */ + function burn(address _from, uint256 _amount) external returns (bool) { + _burn(_from, _amount); + return true; + } + + /** + * @notice Mints a specific amount of tokens to a given address. + * + * @dev WARNING: In production, this function should have access control. + * + * @param _to The address to which tokens will be minted. + * @param _amount The amount of tokens to mint. + * + * @return A boolean indicating the success of the mint operation. + */ + function mint(address _to, uint256 _amount) external returns (bool) { + _mint(_to, _amount); + return true; + } +} diff --git a/examples/mint-burn-oft-adapter/test/mocks/MintBurnOFTAdapterMock.sol b/examples/mint-burn-oft-adapter/test/mocks/MintBurnOFTAdapterMock.sol new file mode 100644 index 000000000..216aff336 --- /dev/null +++ b/examples/mint-burn-oft-adapter/test/mocks/MintBurnOFTAdapterMock.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { MintBurnOFTAdapter } from "@layerzerolabs/oft-evm/contracts/MintBurnOFTAdapter.sol"; +import { IMintableBurnable } from "@layerzerolabs/oft-evm/contracts/interfaces/IMintableBurnable.sol"; + +contract MintBurnOFTAdapterMock is MintBurnOFTAdapter { + constructor( + address _token, + IMintableBurnable _minterBurner, + address _lzEndpoint, + address _delegate + ) MintBurnOFTAdapter(_token, _minterBurner, _lzEndpoint, _delegate) Ownable(_delegate) {} + + // @dev expose internal functions for testing purposes + function debit( + uint256 _amountToSendLD, + uint256 _minAmountToCreditLD, + uint32 _dstEid + ) public returns (uint256 amountDebitedLD, uint256 amountToCreditLD) { + return _debit(msg.sender, _amountToSendLD, _minAmountToCreditLD, _dstEid); + } + + function debitView( + uint256 _amountToSendLD, + uint256 _minAmountToCreditLD, + uint32 _dstEid + ) public view returns (uint256 amountDebitedLD, uint256 amountToCreditLD) { + return _debitView(_amountToSendLD, _minAmountToCreditLD, _dstEid); + } + + function credit(address _to, uint256 _amountToCreditLD, uint32 _srcEid) public returns (uint256 amountReceivedLD) { + return _credit(_to, _amountToCreditLD, _srcEid); + } + + function removeDust(uint256 _amountLD) public view returns (uint256 amountLD) { + return _removeDust(_amountLD); + } +} diff --git a/examples/mint-burn-oft-adapter/test/mocks/OFTComposerMock.sol b/examples/mint-burn-oft-adapter/test/mocks/OFTComposerMock.sol new file mode 100644 index 000000000..fdd5c2426 --- /dev/null +++ b/examples/mint-burn-oft-adapter/test/mocks/OFTComposerMock.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import { IOAppComposer } from "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol"; + +contract OFTComposerMock is IOAppComposer { + // default empty values for testing a lzCompose received message + address public from; + bytes32 public guid; + bytes public message; + address public executor; + bytes public extraData; + + function lzCompose( + address _from, + bytes32 _guid, + bytes calldata _message, + address _executor, + bytes calldata /*_extraData*/ + ) external payable { + from = _from; + guid = _guid; + message = _message; + executor = _executor; + extraData = _message; + } +} diff --git a/examples/mint-burn-oft-adapter/test/mocks/OFTMock.sol b/examples/mint-burn-oft-adapter/test/mocks/OFTMock.sol new file mode 100644 index 000000000..cef8770f5 --- /dev/null +++ b/examples/mint-burn-oft-adapter/test/mocks/OFTMock.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { OFT } from "@layerzerolabs/oft-evm/contracts/OFT.sol"; +import { SendParam } from "@layerzerolabs/oft-evm/contracts/OFTCore.sol"; + +contract OFTMock is OFT { + constructor( + string memory _name, + string memory _symbol, + address _lzEndpoint, + address _delegate + ) Ownable(_delegate) OFT(_name, _symbol, _lzEndpoint, _delegate) {} + + function mint(address _to, uint256 _amount) public { + _mint(_to, _amount); + } + + // @dev expose internal functions for testing purposes + function debit( + uint256 _amountToSendLD, + uint256 _minAmountToCreditLD, + uint32 _dstEid + ) public returns (uint256 amountDebitedLD, uint256 amountToCreditLD) { + return _debit(msg.sender, _amountToSendLD, _minAmountToCreditLD, _dstEid); + } + + function debitView( + uint256 _amountToSendLD, + uint256 _minAmountToCreditLD, + uint32 _dstEid + ) public view returns (uint256 amountDebitedLD, uint256 amountToCreditLD) { + return _debitView(_amountToSendLD, _minAmountToCreditLD, _dstEid); + } + + function removeDust(uint256 _amountLD) public view returns (uint256 amountLD) { + return _removeDust(_amountLD); + } + + function toLD(uint64 _amountSD) public view returns (uint256 amountLD) { + return _toLD(_amountSD); + } + + function toSD(uint256 _amountLD) public view returns (uint64 amountSD) { + return _toSD(_amountLD); + } + + function credit(address _to, uint256 _amountToCreditLD, uint32 _srcEid) public returns (uint256 amountReceivedLD) { + return _credit(_to, _amountToCreditLD, _srcEid); + } + + function buildMsgAndOptions( + SendParam calldata _sendParam, + uint256 _amountToCreditLD + ) public view returns (bytes memory message, bytes memory options) { + return _buildMsgAndOptions(_sendParam, _amountToCreditLD); + } +} diff --git a/examples/mint-burn-oft-adapter/tsconfig.json b/examples/mint-burn-oft-adapter/tsconfig.json new file mode 100644 index 000000000..027ad0f3f --- /dev/null +++ b/examples/mint-burn-oft-adapter/tsconfig.json @@ -0,0 +1,13 @@ +{ + "exclude": ["node_modules"], + "include": ["deploy", "tasks", "test", "hardhat.config.ts"], + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "resolveJsonModule": true + } +} diff --git a/examples/mint-burn-oft-adapter/type-extensions.ts b/examples/mint-burn-oft-adapter/type-extensions.ts new file mode 100644 index 000000000..ffc2b722e --- /dev/null +++ b/examples/mint-burn-oft-adapter/type-extensions.ts @@ -0,0 +1,23 @@ +import 'hardhat/types/config' + +interface OftAdapterConfig { + tokenAddress: string +} + +declare module 'hardhat/types/config' { + interface HardhatNetworkUserConfig { + oftAdapter?: never + } + + interface HardhatNetworkConfig { + oftAdapter?: never + } + + interface HttpNetworkUserConfig { + oftAdapter?: OftAdapterConfig + } + + interface HttpNetworkConfig { + oftAdapter?: OftAdapterConfig + } +} diff --git a/package.json b/package.json index c18dc5710..54bf2c186 100644 --- a/package.json +++ b/package.json @@ -40,9 +40,9 @@ "@changesets/cli": "^2.27.1", "@layerzerolabs/prettier-config-next": "^2.3.39", "@types/node": "~18.18.14", - "@typescript-eslint/eslint-plugin": "^7.5.0", - "@typescript-eslint/parser": "^7.5.0", - "eslint": "^8.55.0", + "@typescript-eslint/eslint-plugin": "^7.7.1", + "@typescript-eslint/parser": "^7.7.1", + "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", "eslint-config-standard": "^17.1.0", "eslint-plugin-import": "^2.29.1", diff --git a/packages/create-lz-oapp/src/config.ts b/packages/create-lz-oapp/src/config.ts index 981f4c9a1..a0676eee4 100644 --- a/packages/create-lz-oapp/src/config.ts +++ b/packages/create-lz-oapp/src/config.ts @@ -74,6 +74,18 @@ export const getExamples = (): Example[] => { }, ] : []), + // Mint Burn OFT Adapter example is feature flagged for the time being + ...(process.env.LZ_ENABLE_MINTBURN_EXAMPLE + ? [ + { + id: 'mint-burn-oft-adapter', + label: 'MintBurnOFTAdapter', + repository, + directory: 'examples/mint-burn-oft-adapter', + ref, + }, + ] + : []), // OApp Read examples are feature flagged for the time being ...(process.env.LZ_ENABLE_READ_EXAMPLE ? [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a0eb4151e..b5a4edb7f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,41 +24,41 @@ importers: specifier: ~18.18.14 version: 18.18.14 '@typescript-eslint/eslint-plugin': - specifier: ^7.5.0 - version: 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)(typescript@5.5.3) + specifier: ^7.7.1 + version: 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.1)(typescript@5.5.3) '@typescript-eslint/parser': - specifier: ^7.5.0 - version: 7.7.1(eslint@8.57.0)(typescript@5.5.3) + specifier: ^7.7.1 + version: 7.7.1(eslint@8.57.1)(typescript@5.5.3) eslint: - specifier: ^8.55.0 - version: 8.57.0 + specifier: ^8.57.1 + version: 8.57.1 eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.0) + version: 9.1.0(eslint@8.57.1) eslint-config-standard: specifier: ^17.1.0 - version: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.57.0) + version: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.57.1) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) eslint-plugin-jest: specifier: ^27.6.3 - version: 27.6.3(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.0)(typescript@5.5.3) + version: 27.6.3(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.1)(typescript@5.5.3) eslint-plugin-n: specifier: ^16.6.2 - version: 16.6.2(eslint@8.57.0) + version: 16.6.2(eslint@8.57.1) eslint-plugin-node: specifier: ^11.1.0 - version: 11.1.0(eslint@8.57.0) + version: 11.1.0(eslint@8.57.1) eslint-plugin-prettier: specifier: ^5.1.3 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) + version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.1)(prettier@3.2.5) eslint-plugin-promise: specifier: ^6.1.1 - version: 6.1.1(eslint@8.57.0) + version: 6.1.1(eslint@8.57.1) eslint-plugin-turbo: specifier: ^1.12.3 - version: 1.12.3(eslint@8.57.0) + version: 1.12.3(eslint@8.57.1) husky: specifier: ^8.0.3 version: 8.0.3 @@ -75,6 +75,120 @@ importers: specifier: 1.11.0 version: 1.11.0 + examples/mint-burn-oft-adapter: + devDependencies: + '@babel/core': + specifier: ^7.23.9 + version: 7.23.9 + '@layerzerolabs/eslint-config-next': + specifier: ~2.3.39 + version: 2.3.44(typescript@5.5.3) + '@layerzerolabs/lz-definitions': + specifier: ^3.0.21 + version: 3.0.21 + '@layerzerolabs/lz-evm-messagelib-v2': + specifier: ^3.0.12 + version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.15)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) + '@layerzerolabs/lz-evm-protocol-v2': + specifier: ^3.0.12 + version: 3.0.12(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) + '@layerzerolabs/lz-evm-v1-0.7': + specifier: ^3.0.12 + version: 3.0.15(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4) + '@layerzerolabs/lz-v2-utilities': + specifier: ^3.0.12 + version: 3.0.12 + '@layerzerolabs/oapp-evm': + specifier: ^0.3.0 + version: link:../../packages/oapp-evm + '@layerzerolabs/oft-evm': + specifier: ^3.0.0 + version: link:../../packages/oft-evm + '@layerzerolabs/prettier-config-next': + specifier: ^2.3.39 + version: 2.3.44 + '@layerzerolabs/solhint-config': + specifier: ^3.0.12 + version: 3.0.12(typescript@5.5.3) + '@layerzerolabs/test-devtools-evm-foundry': + specifier: ~5.1.0 + version: link:../../packages/test-devtools-evm-foundry + '@layerzerolabs/toolbox-foundry': + specifier: ~0.1.9 + version: link:../../packages/toolbox-foundry + '@layerzerolabs/toolbox-hardhat': + specifier: ~0.6.1 + version: link:../../packages/toolbox-hardhat + '@nomicfoundation/hardhat-ethers': + specifier: ^3.0.5 + version: 3.0.5(ethers@5.7.2)(hardhat@2.22.12) + '@nomiclabs/hardhat-ethers': + specifier: ^2.2.3 + version: 2.2.3(ethers@5.7.2)(hardhat@2.22.12) + '@openzeppelin/contracts': + specifier: ^5.0.2 + version: 5.1.0 + '@openzeppelin/contracts-upgradeable': + specifier: ^5.0.2 + version: 5.1.0(@openzeppelin/contracts@5.1.0) + '@rushstack/eslint-patch': + specifier: ^1.7.0 + version: 1.7.0 + '@types/chai': + specifier: ^4.3.11 + version: 4.3.20 + '@types/mocha': + specifier: ^10.0.6 + version: 10.0.6 + '@types/node': + specifier: ~18.18.14 + version: 18.18.14 + chai: + specifier: ^4.4.1 + version: 4.5.0 + concurrently: + specifier: ~9.1.0 + version: 9.1.0 + dotenv: + specifier: ^16.4.1 + version: 16.4.5 + eslint: + specifier: ^8.55.0 + version: 8.57.1 + eslint-plugin-jest-extended: + specifier: ~2.0.0 + version: 2.0.0(eslint@8.57.1)(typescript@5.5.3) + ethers: + specifier: ^5.7.2 + version: 5.7.2 + hardhat: + specifier: ^2.22.10 + version: 2.22.12(ts-node@10.9.2)(typescript@5.5.3) + hardhat-contract-sizer: + specifier: ^2.10.0 + version: 2.10.0(hardhat@2.22.12) + hardhat-deploy: + specifier: ^0.12.1 + version: 0.12.4 + mocha: + specifier: ^10.2.0 + version: 10.2.0 + prettier: + specifier: ^3.2.5 + version: 3.2.5 + solhint: + specifier: ^4.1.1 + version: 4.1.1(typescript@5.5.3) + solidity-bytes-utils: + specifier: ^0.8.2 + version: 0.8.2 + 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 + examples/native-oft-adapter: devDependencies: '@babel/core': @@ -4164,7 +4278,7 @@ packages: '@babel/traverse': 7.23.9 '@babel/types': 7.23.9 convert-source-map: 2.0.0 - debug: 4.3.5 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -5224,6 +5338,16 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@eslint-community/eslint-utils@4.4.1(eslint@8.57.0): + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + dev: true + /@eslint-community/eslint-utils@4.4.1(eslint@8.57.1): resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6175,16 +6299,16 @@ packages: /@layerzerolabs/eslint-config-next@2.3.44(typescript@5.5.3): resolution: {integrity: sha512-WlBSy47LGPILdrNgzPiRtQf/hAY62IN37ncUsQwcr8T7cyX1HZREx2qljuXpvduLDAKn5otsm0XIqHuCRUHEFg==} dependencies: - '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.5.3) - eslint: 8.57.0 - eslint-config-prettier: 9.1.0(eslint@8.57.0) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.1)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-autofix: 2.2.0(eslint@8.57.0) - eslint-plugin-compat: 4.2.0(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-prettier: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) - eslint-plugin-unused-imports: 3.2.0(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.0) + '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.1)(typescript@5.5.3) + '@typescript-eslint/parser': 7.7.1(eslint@8.57.1)(typescript@5.5.3) + eslint: 8.57.1 + eslint-config-prettier: 9.1.0(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.1)(eslint-plugin-import@2.29.1)(eslint@8.57.1) + eslint-plugin-autofix: 2.2.0(eslint@8.57.1) + eslint-plugin-compat: 4.2.0(eslint@8.57.1) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) + eslint-plugin-prettier: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.1)(prettier@3.2.5) + eslint-plugin-unused-imports: 3.2.0(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.1) prettier: 3.2.5 transitivePeerDependencies: - '@types/eslint' @@ -7455,7 +7579,7 @@ packages: ethers: ^5.7.2 hardhat: ^2.0.0 dependencies: - debug: 4.3.5 + debug: 4.3.7 ethers: 5.7.2 hardhat: 2.22.12(ts-node@10.9.2)(typescript@5.5.3) lodash.isequal: 4.5.0 @@ -9093,7 +9217,7 @@ packages: /@types/yoga-layout@1.9.2: resolution: {integrity: sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==} - /@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)(typescript@5.5.3): + /@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.1)(typescript@5.5.3): resolution: {integrity: sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -9104,16 +9228,16 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.5.3) + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 7.7.1(eslint@8.57.1)(typescript@5.5.3) '@typescript-eslint/scope-manager': 7.7.1 - '@typescript-eslint/type-utils': 7.7.1(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/type-utils': 7.7.1(eslint@8.57.1)(typescript@5.5.3) + '@typescript-eslint/utils': 7.7.1(eslint@8.57.1)(typescript@5.5.3) '@typescript-eslint/visitor-keys': 7.7.1 - debug: 4.3.5 - eslint: 8.57.0 + debug: 4.3.7 + eslint: 8.57.1 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 natural-compare: 1.4.0 semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.5.3) @@ -9122,7 +9246,7 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.5.3): + /@typescript-eslint/parser@7.7.1(eslint@8.57.1)(typescript@5.5.3): resolution: {integrity: sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -9136,8 +9260,8 @@ packages: '@typescript-eslint/types': 7.7.1 '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.5.3) '@typescript-eslint/visitor-keys': 7.7.1 - debug: 4.3.5 - eslint: 8.57.0 + debug: 4.3.7 + eslint: 8.57.1 typescript: 5.5.3 transitivePeerDependencies: - supports-color @@ -9159,7 +9283,7 @@ packages: '@typescript-eslint/visitor-keys': 7.7.1 dev: true - /@typescript-eslint/type-utils@7.7.1(eslint@8.57.0)(typescript@5.5.3): + /@typescript-eslint/type-utils@7.7.1(eslint@8.57.1)(typescript@5.5.3): resolution: {integrity: sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -9170,9 +9294,9 @@ packages: optional: true dependencies: '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.5.3) - '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/utils': 7.7.1(eslint@8.57.1)(typescript@5.5.3) debug: 4.3.7 - eslint: 8.57.0 + eslint: 8.57.1 ts-api-utils: 1.3.0(typescript@5.5.3) typescript: 5.5.3 transitivePeerDependencies: @@ -9238,15 +9362,15 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.0) '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 + '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.3) eslint: 8.57.0 eslint-scope: 5.1.1 - semver: 7.5.4 + semver: 7.6.2 transitivePeerDependencies: - supports-color - typescript @@ -9258,33 +9382,33 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 + '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.3) eslint: 8.57.1 eslint-scope: 5.1.1 - semver: 7.5.4 + semver: 7.6.2 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/utils@7.7.1(eslint@8.57.0)(typescript@5.5.3): + /@typescript-eslint/utils@7.7.1(eslint@8.57.1)(typescript@5.5.3): resolution: {integrity: sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 7.7.1 '@typescript-eslint/types': 7.7.1 '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.5.3) - eslint: 8.57.0 + eslint: 8.57.1 semver: 7.6.2 transitivePeerDependencies: - supports-color @@ -9771,7 +9895,7 @@ packages: /axios@0.21.4(debug@4.3.4): resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} dependencies: - follow-redirects: 1.15.6(debug@4.3.4) + follow-redirects: 1.15.9(debug@4.3.4) transitivePeerDependencies: - debug dev: true @@ -9779,7 +9903,7 @@ packages: /axios@0.21.4(debug@4.3.5): resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} dependencies: - follow-redirects: 1.15.6(debug@4.3.5) + follow-redirects: 1.15.9(debug@4.3.5) transitivePeerDependencies: - debug dev: true @@ -9787,7 +9911,7 @@ packages: /axios@0.25.0: resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==} dependencies: - follow-redirects: 1.15.6(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.3.5) transitivePeerDependencies: - debug dev: true @@ -11622,25 +11746,25 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - /eslint-compat-utils@0.1.2(eslint@8.57.0): + /eslint-compat-utils@0.1.2(eslint@8.57.1): resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} engines: {node: '>=12'} peerDependencies: eslint: '>=6.0.0' dependencies: - eslint: 8.57.0 + eslint: 8.57.1 dev: true - /eslint-config-prettier@9.1.0(eslint@8.57.0): + /eslint-config-prettier@9.1.0(eslint@8.57.1): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.57.0 + eslint: 8.57.1 dev: true - /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.57.0): + /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.57.1): resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} engines: {node: '>=12.0.0'} peerDependencies: @@ -11649,10 +11773,10 @@ packages: eslint-plugin-n: '^15.0.0 || ^16.0.0 ' eslint-plugin-promise: ^6.0.0 dependencies: - eslint: 8.57.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-n: 16.6.2(eslint@8.57.0) - eslint-plugin-promise: 6.1.1(eslint@8.57.0) + eslint: 8.57.1 + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) + eslint-plugin-n: 16.6.2(eslint@8.57.1) + eslint-plugin-promise: 6.1.1(eslint@8.57.1) dev: true /eslint-import-resolver-node@0.3.9: @@ -11665,18 +11789,18 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.1)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.1)(eslint-plugin-import@2.29.1)(eslint@8.57.1): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' eslint-plugin-import: '*' dependencies: - debug: 4.3.5 + debug: 4.3.7 enhanced-resolve: 5.16.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint: 8.57.1 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.7.3 is-core-module: 2.13.1 @@ -11688,7 +11812,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -11709,16 +11833,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/parser': 7.7.1(eslint@8.57.1)(typescript@5.5.3) debug: 3.2.7 - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.1)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.1)(eslint-plugin-import@2.29.1)(eslint@8.57.1) transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1): resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: @@ -11739,28 +11863,28 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/parser': 7.7.1(eslint@8.57.1)(typescript@5.5.3) debug: 3.2.7 - eslint: 8.57.0 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.1)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint: 8.57.1 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.1)(eslint-plugin-import@2.29.1)(eslint@8.57.1) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-autofix@2.2.0(eslint@8.57.0): + /eslint-plugin-autofix@2.2.0(eslint@8.57.1): resolution: {integrity: sha512-lu8+0r+utyTroROqXIL+a8sUpICi6za22hIzlpb0+x0tQGRnOjhOKU7v8mC/NS/faDoVsw6xW3vUpc+Mcz5NWA==} engines: {node: '>=18'} peerDependencies: eslint: '>=8' dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-rule-composer: 0.3.0 espree: 9.6.1 esutils: 2.0.3 string-similarity: 4.0.4 dev: true - /eslint-plugin-compat@4.2.0(eslint@8.57.0): + /eslint-plugin-compat@4.2.0(eslint@8.57.1): resolution: {integrity: sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==} engines: {node: '>=14.x'} peerDependencies: @@ -11770,36 +11894,36 @@ packages: ast-metadata-inferer: 0.8.0 browserslist: 4.22.2 caniuse-lite: 1.0.30001579 - eslint: 8.57.0 + eslint: 8.57.1 find-up: 5.0.0 lodash.memoize: 4.1.2 semver: 7.6.2 dev: true - /eslint-plugin-es-x@7.5.0(eslint@8.57.0): + /eslint-plugin-es-x@7.5.0(eslint@8.57.1): resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@eslint-community/regexpp': 4.10.0 - eslint: 8.57.0 - eslint-compat-utils: 0.1.2(eslint@8.57.0) + eslint: 8.57.1 + eslint-compat-utils: 0.1.2(eslint@8.57.1) dev: true - /eslint-plugin-es@3.0.1(eslint@8.57.0): + /eslint-plugin-es@3.0.1(eslint@8.57.1): resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=4.19.1' dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-utils: 2.1.0 regexpp: 3.2.0 dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -11809,16 +11933,16 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/parser': 7.7.1(eslint@8.57.1)(typescript@5.5.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -11860,7 +11984,7 @@ packages: - typescript dev: true - /eslint-plugin-jest@27.6.3(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.0)(typescript@5.5.3): + /eslint-plugin-jest@27.6.3(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.1)(typescript@5.5.3): resolution: {integrity: sha512-+YsJFVH6R+tOiO3gCJon5oqn4KWc+mDq2leudk8mrp8RFubLOo9CVyi3cib4L7XMpxExmkmBZQTPDYVBzgpgOA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -11873,24 +11997,24 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.3) - eslint: 8.57.0 + '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.1)(typescript@5.5.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.3) + eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-n@16.6.2(eslint@8.57.0): + /eslint-plugin-n@16.6.2(eslint@8.57.1): resolution: {integrity: sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==} engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) builtins: 5.0.1 - eslint: 8.57.0 - eslint-plugin-es-x: 7.5.0(eslint@8.57.0) + eslint: 8.57.1 + eslint-plugin-es-x: 7.5.0(eslint@8.57.1) get-tsconfig: 4.7.2 globals: 13.24.0 ignore: 5.3.0 @@ -11901,14 +12025,14 @@ packages: semver: 7.5.4 dev: true - /eslint-plugin-node@11.1.0(eslint@8.57.0): + /eslint-plugin-node@11.1.0(eslint@8.57.1): resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=5.16.0' dependencies: - eslint: 8.57.0 - eslint-plugin-es: 3.0.1(eslint@8.57.0) + eslint: 8.57.1 + eslint-plugin-es: 3.0.1(eslint@8.57.1) eslint-utils: 2.1.0 ignore: 5.3.0 minimatch: 3.1.2 @@ -11916,7 +12040,7 @@ packages: semver: 6.3.1 dev: true - /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): + /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.1)(prettier@3.2.5): resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -11930,20 +12054,20 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.57.0 - eslint-config-prettier: 9.1.0(eslint@8.57.0) + eslint: 8.57.1 + eslint-config-prettier: 9.1.0(eslint@8.57.1) prettier: 3.2.5 prettier-linter-helpers: 1.0.0 synckit: 0.8.8 dev: true - /eslint-plugin-promise@6.1.1(eslint@8.57.0): + /eslint-plugin-promise@6.1.1(eslint@8.57.1): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.57.0 + eslint: 8.57.1 dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.57.1): @@ -11980,16 +12104,16 @@ packages: string.prototype.matchall: 4.0.10 dev: true - /eslint-plugin-turbo@1.12.3(eslint@8.57.0): + /eslint-plugin-turbo@1.12.3(eslint@8.57.1): resolution: {integrity: sha512-7hEyxa+oP898EFNoxVenHlH8jtBwV1hbbIkdQWgqDcB0EmVNGVEZkYRo5Hm6BuMAjR433B+NISBJdj0bQo4/Lg==} peerDependencies: eslint: '>6.6.0' dependencies: dotenv: 16.0.3 - eslint: 8.57.0 + eslint: 8.57.1 dev: true - /eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.0): + /eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.1): resolution: {integrity: sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -11999,8 +12123,8 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)(typescript@5.5.3) - eslint: 8.57.0 + '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.1)(typescript@5.5.3) + eslint: 8.57.1 eslint-rule-composer: 0.3.0 dev: true @@ -12697,7 +12821,7 @@ packages: /fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - /follow-redirects@1.15.6(debug@4.3.4): + /follow-redirects@1.15.6(debug@4.3.5): resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} peerDependencies: @@ -12706,11 +12830,10 @@ packages: debug: optional: true dependencies: - debug: 4.3.4(supports-color@8.1.1) - dev: true + debug: 4.3.5 - /follow-redirects@1.15.6(debug@4.3.5): - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + /follow-redirects@1.15.9(debug@4.3.4): + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -12718,7 +12841,8 @@ packages: debug: optional: true dependencies: - debug: 4.3.5 + debug: 4.3.4(supports-color@8.1.1) + dev: true /follow-redirects@1.15.9(debug@4.3.5): resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} diff --git a/tests-user/tests/create-lz-oapp.bats b/tests-user/tests/create-lz-oapp.bats index a5ade9c7e..4f9329310 100644 --- a/tests-user/tests/create-lz-oapp.bats +++ b/tests-user/tests/create-lz-oapp.bats @@ -169,6 +169,17 @@ teardown() { pnpm lint:fix } +@test "should work with pnpm & mint-burn-oft-adapter example in CI mode" { + local DESTINATION="$PROJECTS_DIRECTORY/pnpm-mint-burn-oft-adapter" + + LZ_ENABLE_MINTBURN_EXAMPLE=1 npx --yes create-lz-oapp --ci --example mint-burn-oft-adapter --destination $DESTINATION --package-manager pnpm + cd "$DESTINATION" + pnpm compile + pnpm test + pnpm lint + pnpm lint:fix +} + @test "should work with pnpm & oft solana example in CI mode" { local DESTINATION="$PROJECTS_DIRECTORY/pnpm-oft-solana" @@ -242,6 +253,17 @@ teardown() { yarn lint:fix } +@test "should work with yarn & mint-burn-oft-adapter example in CI mode" { + local DESTINATION="$PROJECTS_DIRECTORY/yarn-mint-burn-oft-adapter" + + YARN_CACHE_FOLDER="/tmp/.yarn-cache-mint-burn-oft-adapter-evm" LZ_ENABLE_MINTBURN_EXAMPLE=1 npx --yes create-lz-oapp --ci --example mint-burn-oft-adapter --destination $DESTINATION --package-manager yarn + cd "$DESTINATION" + yarn compile + yarn test + yarn lint + yarn lint:fix +} + @test "should work with yarn & oft solana example in CI mode" { local DESTINATION="$PROJECTS_DIRECTORY/yarn-oft-solana" @@ -315,6 +337,17 @@ teardown() { npm run lint:fix } +@test "should work with npm & mint-burn-oft-adapter example in CI mode" { + local DESTINATION="$PROJECTS_DIRECTORY/npm-mint-burn-oft-adapter" + + LZ_ENABLE_MINTBURN_EXAMPLE=1 npx --yes create-lz-oapp --ci --example mint-burn-oft-adapter --destination $DESTINATION --package-manager npm + cd "$DESTINATION" + npm run compile + npm run test + npm run lint + npm run lint:fix +} + @test "should work with npm & oft solana example in CI mode" { local DESTINATION="$PROJECTS_DIRECTORY/npm-oft-solana" diff --git a/turbo.json b/turbo.json index ba5d6233c..95af4caa5 100644 --- a/turbo.json +++ b/turbo.json @@ -51,6 +51,7 @@ "LZ_ENABLE_READ_EXAMPLE", "LZ_ENABLE_ZKSOLC_EXAMPLE", "LZ_ENABLE_NATIVE_EXAMPLE", + "LZ_ENABLE_MINTBURN_EXAMPLE", "LZ_ENABLE_UPGRADEABLE_EXAMPLE", "LAYERZERO_EXAMPLES_REPOSITORY_URL", From 0cd68308cc28ba4c14716720666e9d233e50d7cf Mon Sep 17 00:00:00 2001 From: Simon Samuel <56292632+ximon-x@users.noreply.github.com> Date: Wed, 11 Dec 2024 19:49:58 +0100 Subject: [PATCH 12/24] feat: update readme (#1123) --- README.md | 7 +++++-- assets/logo-dark.svg | 35 +++++++++++++++++++++++++++++++++++ assets/logo-light.svg | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 assets/logo-dark.svg create mode 100644 assets/logo-light.svg diff --git a/README.md b/README.md index 0edd64665..df84ba5c0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@

- - LayerZero + + LayerZero + + + LayerZero

diff --git a/assets/logo-dark.svg b/assets/logo-dark.svg new file mode 100644 index 000000000..295bfb5ef --- /dev/null +++ b/assets/logo-dark.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + diff --git a/assets/logo-light.svg b/assets/logo-light.svg new file mode 100644 index 000000000..d488cdb57 --- /dev/null +++ b/assets/logo-light.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + From e90a1d3b018a0430a3f66b398a7a14a9e6113ccb Mon Sep 17 00:00:00 2001 From: Ryan Goulding Date: Wed, 11 Dec 2024 13:51:02 -0500 Subject: [PATCH 13/24] =?UTF-8?q?=F0=9F=A7=B9=20improve=20quote=20oft=20de?= =?UTF-8?q?fault=20impl=20(#1119)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ryan Goulding --- .changeset/serious-laws-tie.md | 5 +++++ packages/oft-evm/artifacts/IOFT.sol/IOFT.json | 8 +++---- packages/oft-evm/artifacts/OFT.sol/OFT.json | 14 ++++++------ .../artifacts/OFTAdapter.sol/OFTAdapter.json | 14 ++++++------ .../artifacts/OFTCore.sol/OFTCore.json | 14 ++++++------ packages/oft-evm/contracts/OFTCore.sol | 4 +++- packages/oft-evm/test/OFT.t.sol | 22 ++++++++++++++++++- 7 files changed, 54 insertions(+), 27 deletions(-) create mode 100644 .changeset/serious-laws-tie.md diff --git a/.changeset/serious-laws-tie.md b/.changeset/serious-laws-tie.md new file mode 100644 index 000000000..9f395d4df --- /dev/null +++ b/.changeset/serious-laws-tie.md @@ -0,0 +1,5 @@ +--- +"@layerzerolabs/oft-evm": patch +--- + +Improve quoteOFT default implementation to use totalSupply() diff --git a/packages/oft-evm/artifacts/IOFT.sol/IOFT.json b/packages/oft-evm/artifacts/IOFT.sol/IOFT.json index b721e1313..7ee540c0a 100644 --- a/packages/oft-evm/artifacts/IOFT.sol/IOFT.json +++ b/packages/oft-evm/artifacts/IOFT.sol/IOFT.json @@ -359,7 +359,7 @@ "sharedDecimals()": "857749b0", "token()": "fc0c546a" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the OftChain (OFT) token.Does not inherit ERC20 to accommodate usage by OFTAdapter as well.This specific interface ID is '0x02e49c2c'.\",\"kind\":\"dev\",\"methods\":{\"approvalRequired()\":{\"details\":\"Allows things like wallet implementers to determine integration requirements, without understanding the underlying token implementation.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"_0\":\"limit The OFT limit information.\",\"_2\":\"receipt The OFT receipt information.\",\"oftFeeDetails\":\"The details of OFT fees.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"_0\":\"fee The calculated LayerZero messaging fee from the send() operation.\"}},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The fee information supplied by the caller. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds from fees etc. on the src.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"_0\":\"receipt The LayerZero messaging receipt from the send() operation.\",\"_1\":\"oftReceipt The OFT receipt information.\"}},\"sharedDecimals()\":{\"returns\":{\"_0\":\"sharedDecimals The shared decimals of the OFT.\"}},\"token()\":{\"returns\":{\"_0\":\"token The address of the ERC20 token implementation.\"}}},\"title\":\"IOFT\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"notice\":\"Executes the send() operation.\"},\"sharedDecimals()\":{\"notice\":\"Retrieves the shared decimals of the OFT.\"},\"token()\":{\"notice\":\"Retrieves the address of the token associated with the OFT.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IOFT.sol\":\"IOFT\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":20000},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/\"]},\"sources\":{\"contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0x278e7bdeb2e8aa3f528373d8a3b3fedfe2e1bec050bcaf95065a136645cf56bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://43d1789ca4f5cd81986bb52682a94caf188dc8910ecd84cf98bc59221847bd12\",\"dweb:/ipfs/QmSmvKyCukcqxCUvdvNQNyshp4nYt2xxiFaB7Uji4YSrBv\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}", + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the OftChain (OFT) token.Does not inherit ERC20 to accommodate usage by OFTAdapter as well.This specific interface ID is '0x02e49c2c'.\",\"kind\":\"dev\",\"methods\":{\"approvalRequired()\":{\"details\":\"Allows things like wallet implementers to determine integration requirements, without understanding the underlying token implementation.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"_0\":\"limit The OFT limit information.\",\"_2\":\"receipt The OFT receipt information.\",\"oftFeeDetails\":\"The details of OFT fees.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"_0\":\"fee The calculated LayerZero messaging fee from the send() operation.\"}},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The fee information supplied by the caller. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds from fees etc. on the src.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"_0\":\"receipt The LayerZero messaging receipt from the send() operation.\",\"_1\":\"oftReceipt The OFT receipt information.\"}},\"sharedDecimals()\":{\"returns\":{\"_0\":\"sharedDecimals The shared decimals of the OFT.\"}},\"token()\":{\"returns\":{\"_0\":\"token The address of the ERC20 token implementation.\"}}},\"title\":\"IOFT\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"notice\":\"Executes the send() operation.\"},\"sharedDecimals()\":{\"notice\":\"Retrieves the shared decimals of the OFT.\"},\"token()\":{\"notice\":\"Retrieves the address of the token associated with the OFT.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IOFT.sol\":\"IOFT\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":20000},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/\"]},\"sources\":{\"contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4\",\"dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}", "metadata": { "compiler": { "version": "0.8.22+commit.4fc1097e" }, "language": "Solidity", @@ -860,10 +860,10 @@ }, "sources": { "contracts/interfaces/IOFT.sol": { - "keccak256": "0x278e7bdeb2e8aa3f528373d8a3b3fedfe2e1bec050bcaf95065a136645cf56bb", + "keccak256": "0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8", "urls": [ - "bzz-raw://43d1789ca4f5cd81986bb52682a94caf188dc8910ecd84cf98bc59221847bd12", - "dweb:/ipfs/QmSmvKyCukcqxCUvdvNQNyshp4nYt2xxiFaB7Uji4YSrBv" + "bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4", + "dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs" ], "license": "MIT" }, diff --git a/packages/oft-evm/artifacts/OFT.sol/OFT.json b/packages/oft-evm/artifacts/OFT.sol/OFT.json index 69f2e0e2e..fb7b20814 100644 --- a/packages/oft-evm/artifacts/OFT.sol/OFT.json +++ b/packages/oft-evm/artifacts/OFT.sol/OFT.json @@ -1064,7 +1064,7 @@ "transferFrom(address,address,uint256)": "23b872dd", "transferOwnership(address)": "f2fde38b" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inspector\",\"type\":\"address\"}],\"name\":\"MsgInspectorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEND_AND_CALL\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimalConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgInspector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"oftLimit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"msgFee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"msgReceipt\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_msgInspector\",\"type\":\"address\"}],\"name\":\"setMsgInspector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"OFT is an ERC-20 token that extends the functionality of the OFTCore contract.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approvalRequired()\":{\"details\":\"In the case of OFT where the contract IS the token, approval is NOT required.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"constructor\":{\"details\":\"Constructor for the OFT contract.\",\"params\":{\"_delegate\":\"The delegate capable of making OApp configurations inside of the endpoint.\",\"_lzEndpoint\":\"The LayerZero endpoint address.\",\"_name\":\"The name of the OFT.\",\"_symbol\":\"The symbol of the OFT.\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"isPeer(uint32,bytes32)\":{\"details\":\"Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\",\"params\":{\"_eid\":\"The endpoint ID to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"oftFeeDetails\":\"The details of OFT fees.\",\"oftLimit\":\"The OFT limit information.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"msgFee\":\"The calculated LayerZero messaging fee from the send() operation.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"msgReceipt\":\"The receipt for the send operation.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"setMsgInspector(address)\":{\"details\":\"Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.\",\"params\":{\"_msgInspector\":\"The address of the message inspector.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"sharedDecimals()\":{\"details\":\"Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\",\"returns\":{\"_0\":\"The shared decimals of the OFT.\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"token()\":{\"details\":\"Retrieves the address of the underlying ERC20 implementation.In the case of OFT, address(this) and erc20 are the same contract.\",\"returns\":{\"_0\":\"The address of the OFT token.\"}},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OFT Contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/OFT.sol\":\"OFT\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":20000},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/\"]},\"sources\":{\"contracts/OFT.sol\":{\"keccak256\":\"0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7\",\"dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns\"]},\"contracts/OFTCore.sol\":{\"keccak256\":\"0x0a435802ad13dcaf74668923ec2716358b94bc2be1a63c85a931638defd7decc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc93e94b14b38ccd62dfa6664ccfc2e303d13d20b4799b415054c4b35f7cd03d\",\"dweb:/ipfs/QmZyCwjhuEHNGdFRYMAE6LjD81Puhstoj49HNrwtRPYPbc\"]},\"contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0x278e7bdeb2e8aa3f528373d8a3b3fedfe2e1bec050bcaf95065a136645cf56bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://43d1789ca4f5cd81986bb52682a94caf188dc8910ecd84cf98bc59221847bd12\",\"dweb:/ipfs/QmSmvKyCukcqxCUvdvNQNyshp4nYt2xxiFaB7Uji4YSrBv\"]},\"contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229\",\"dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}", + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inspector\",\"type\":\"address\"}],\"name\":\"MsgInspectorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEND_AND_CALL\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimalConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgInspector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"oftLimit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"msgFee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"msgReceipt\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_msgInspector\",\"type\":\"address\"}],\"name\":\"setMsgInspector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"OFT is an ERC-20 token that extends the functionality of the OFTCore contract.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approvalRequired()\":{\"details\":\"In the case of OFT where the contract IS the token, approval is NOT required.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"constructor\":{\"details\":\"Constructor for the OFT contract.\",\"params\":{\"_delegate\":\"The delegate capable of making OApp configurations inside of the endpoint.\",\"_lzEndpoint\":\"The LayerZero endpoint address.\",\"_name\":\"The name of the OFT.\",\"_symbol\":\"The symbol of the OFT.\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"isPeer(uint32,bytes32)\":{\"details\":\"Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\",\"params\":{\"_eid\":\"The endpoint ID to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"oftFeeDetails\":\"The details of OFT fees.\",\"oftLimit\":\"The OFT limit information.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"msgFee\":\"The calculated LayerZero messaging fee from the send() operation.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"msgReceipt\":\"The receipt for the send operation.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"setMsgInspector(address)\":{\"details\":\"Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.\",\"params\":{\"_msgInspector\":\"The address of the message inspector.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"sharedDecimals()\":{\"details\":\"Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\",\"returns\":{\"_0\":\"The shared decimals of the OFT.\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"token()\":{\"details\":\"Retrieves the address of the underlying ERC20 implementation.In the case of OFT, address(this) and erc20 are the same contract.\",\"returns\":{\"_0\":\"The address of the OFT token.\"}},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OFT Contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/OFT.sol\":\"OFT\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":20000},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/\"]},\"sources\":{\"contracts/OFT.sol\":{\"keccak256\":\"0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7\",\"dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns\"]},\"contracts/OFTCore.sol\":{\"keccak256\":\"0x4c5a5412cf671bb70d84c9e783312eddf864ef56566f7bf86401c5661015e228\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0cac6c48bbc05456b0fccd0782b1a8c2560b0420d425dcba109526af8188893e\",\"dweb:/ipfs/QmRoCZX37UNgBeVKXTsfBvR7DgibZGL1tfrPqfvyGafHor\"]},\"contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4\",\"dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs\"]},\"contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229\",\"dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}", "metadata": { "compiler": { "version": "0.8.22+commit.4fc1097e" }, "language": "Solidity", @@ -2508,18 +2508,18 @@ "license": "MIT" }, "contracts/OFTCore.sol": { - "keccak256": "0x0a435802ad13dcaf74668923ec2716358b94bc2be1a63c85a931638defd7decc", + "keccak256": "0x4c5a5412cf671bb70d84c9e783312eddf864ef56566f7bf86401c5661015e228", "urls": [ - "bzz-raw://cc93e94b14b38ccd62dfa6664ccfc2e303d13d20b4799b415054c4b35f7cd03d", - "dweb:/ipfs/QmZyCwjhuEHNGdFRYMAE6LjD81Puhstoj49HNrwtRPYPbc" + "bzz-raw://0cac6c48bbc05456b0fccd0782b1a8c2560b0420d425dcba109526af8188893e", + "dweb:/ipfs/QmRoCZX37UNgBeVKXTsfBvR7DgibZGL1tfrPqfvyGafHor" ], "license": "MIT" }, "contracts/interfaces/IOFT.sol": { - "keccak256": "0x278e7bdeb2e8aa3f528373d8a3b3fedfe2e1bec050bcaf95065a136645cf56bb", + "keccak256": "0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8", "urls": [ - "bzz-raw://43d1789ca4f5cd81986bb52682a94caf188dc8910ecd84cf98bc59221847bd12", - "dweb:/ipfs/QmSmvKyCukcqxCUvdvNQNyshp4nYt2xxiFaB7Uji4YSrBv" + "bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4", + "dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs" ], "license": "MIT" }, diff --git a/packages/oft-evm/artifacts/OFTAdapter.sol/OFTAdapter.json b/packages/oft-evm/artifacts/OFTAdapter.sol/OFTAdapter.json index d4e0cdf9e..cf5eb5461 100644 --- a/packages/oft-evm/artifacts/OFTAdapter.sol/OFTAdapter.json +++ b/packages/oft-evm/artifacts/OFTAdapter.sol/OFTAdapter.json @@ -881,7 +881,7 @@ "token()": "fc0c546a", "transferOwnership(address)": "f2fde38b" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inspector\",\"type\":\"address\"}],\"name\":\"MsgInspectorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEND_AND_CALL\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimalConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgInspector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"oftLimit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"msgFee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"msgReceipt\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_msgInspector\",\"type\":\"address\"}],\"name\":\"setMsgInspector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"OFTAdapter is a contract that adapts an ERC-20 token to the OFT functionality.For existing ERC20 tokens, this can be used to convert the token to crosschain compatibility.WARNING: ONLY 1 of these should exist for a given global mesh, unless you make a NON-default implementation of OFT and needs to be done very carefully.WARNING: The default OFTAdapter implementation assumes LOSSLESS transfers, ie. 1 token in, 1 token out. IF the 'innerToken' applies something like a transfer fee, the default will NOT work... a pre/post balance check will need to be done to calculate the amountSentLD/amountReceivedLD.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"events\":{\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}}},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"approvalRequired()\":{\"details\":\"In the case of default OFTAdapter, approval is required.In non-default OFTAdapter contracts with something like mint and burn privileges, it would NOT need approval.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"constructor\":{\"details\":\"Constructor for the OFTAdapter contract.\",\"params\":{\"_delegate\":\"The delegate capable of making OApp configurations inside of the endpoint.\",\"_lzEndpoint\":\"The LayerZero endpoint address.\",\"_token\":\"The address of the ERC-20 token to be adapted.\"}},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"isPeer(uint32,bytes32)\":{\"details\":\"Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\",\"params\":{\"_eid\":\"The endpoint ID to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"oftFeeDetails\":\"The details of OFT fees.\",\"oftLimit\":\"The OFT limit information.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"msgFee\":\"The calculated LayerZero messaging fee from the send() operation.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"msgReceipt\":\"The receipt for the send operation.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"setMsgInspector(address)\":{\"details\":\"Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.\",\"params\":{\"_msgInspector\":\"The address of the message inspector.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"sharedDecimals()\":{\"details\":\"Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\",\"returns\":{\"_0\":\"The shared decimals of the OFT.\"}},\"token()\":{\"details\":\"Retrieves the address of the underlying ERC20 implementation.In the case of OFTAdapter, address(this) and erc20 are NOT the same contract.\",\"returns\":{\"_0\":\"The address of the adapted ERC-20 token.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OFTAdapter Contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/OFTAdapter.sol\":\"OFTAdapter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":20000},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/\"]},\"sources\":{\"contracts/OFTAdapter.sol\":{\"keccak256\":\"0xd65041c093c19792b66369a04b4aea5c988c32e2cf4ab952a442315426407fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1cc68778a40a45397f1ffcdba25920523a75d321da8852f7688f50885bbd08\",\"dweb:/ipfs/QmRUL7Q6dNxbc1Mz1hXgUz7eyCZDpt9eJD8BK1EMaJ9Yoz\"]},\"contracts/OFTCore.sol\":{\"keccak256\":\"0x0a435802ad13dcaf74668923ec2716358b94bc2be1a63c85a931638defd7decc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc93e94b14b38ccd62dfa6664ccfc2e303d13d20b4799b415054c4b35f7cd03d\",\"dweb:/ipfs/QmZyCwjhuEHNGdFRYMAE6LjD81Puhstoj49HNrwtRPYPbc\"]},\"contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0x278e7bdeb2e8aa3f528373d8a3b3fedfe2e1bec050bcaf95065a136645cf56bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://43d1789ca4f5cd81986bb52682a94caf188dc8910ecd84cf98bc59221847bd12\",\"dweb:/ipfs/QmSmvKyCukcqxCUvdvNQNyshp4nYt2xxiFaB7Uji4YSrBv\"]},\"contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}", + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inspector\",\"type\":\"address\"}],\"name\":\"MsgInspectorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEND_AND_CALL\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimalConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgInspector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"oftLimit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"msgFee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"msgReceipt\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_msgInspector\",\"type\":\"address\"}],\"name\":\"setMsgInspector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"OFTAdapter is a contract that adapts an ERC-20 token to the OFT functionality.For existing ERC20 tokens, this can be used to convert the token to crosschain compatibility.WARNING: ONLY 1 of these should exist for a given global mesh, unless you make a NON-default implementation of OFT and needs to be done very carefully.WARNING: The default OFTAdapter implementation assumes LOSSLESS transfers, ie. 1 token in, 1 token out. IF the 'innerToken' applies something like a transfer fee, the default will NOT work... a pre/post balance check will need to be done to calculate the amountSentLD/amountReceivedLD.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"events\":{\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}}},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"approvalRequired()\":{\"details\":\"In the case of default OFTAdapter, approval is required.In non-default OFTAdapter contracts with something like mint and burn privileges, it would NOT need approval.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"constructor\":{\"details\":\"Constructor for the OFTAdapter contract.\",\"params\":{\"_delegate\":\"The delegate capable of making OApp configurations inside of the endpoint.\",\"_lzEndpoint\":\"The LayerZero endpoint address.\",\"_token\":\"The address of the ERC-20 token to be adapted.\"}},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"isPeer(uint32,bytes32)\":{\"details\":\"Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\",\"params\":{\"_eid\":\"The endpoint ID to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"oftFeeDetails\":\"The details of OFT fees.\",\"oftLimit\":\"The OFT limit information.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"msgFee\":\"The calculated LayerZero messaging fee from the send() operation.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"msgReceipt\":\"The receipt for the send operation.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"setMsgInspector(address)\":{\"details\":\"Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.\",\"params\":{\"_msgInspector\":\"The address of the message inspector.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"sharedDecimals()\":{\"details\":\"Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\",\"returns\":{\"_0\":\"The shared decimals of the OFT.\"}},\"token()\":{\"details\":\"Retrieves the address of the underlying ERC20 implementation.In the case of OFTAdapter, address(this) and erc20 are NOT the same contract.\",\"returns\":{\"_0\":\"The address of the adapted ERC-20 token.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OFTAdapter Contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/OFTAdapter.sol\":\"OFTAdapter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":20000},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/\"]},\"sources\":{\"contracts/OFTAdapter.sol\":{\"keccak256\":\"0xd65041c093c19792b66369a04b4aea5c988c32e2cf4ab952a442315426407fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1cc68778a40a45397f1ffcdba25920523a75d321da8852f7688f50885bbd08\",\"dweb:/ipfs/QmRUL7Q6dNxbc1Mz1hXgUz7eyCZDpt9eJD8BK1EMaJ9Yoz\"]},\"contracts/OFTCore.sol\":{\"keccak256\":\"0x4c5a5412cf671bb70d84c9e783312eddf864ef56566f7bf86401c5661015e228\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0cac6c48bbc05456b0fccd0782b1a8c2560b0420d425dcba109526af8188893e\",\"dweb:/ipfs/QmRoCZX37UNgBeVKXTsfBvR7DgibZGL1tfrPqfvyGafHor\"]},\"contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4\",\"dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs\"]},\"contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}", "metadata": { "compiler": { "version": "0.8.22+commit.4fc1097e" }, "language": "Solidity", @@ -2115,18 +2115,18 @@ "license": "MIT" }, "contracts/OFTCore.sol": { - "keccak256": "0x0a435802ad13dcaf74668923ec2716358b94bc2be1a63c85a931638defd7decc", + "keccak256": "0x4c5a5412cf671bb70d84c9e783312eddf864ef56566f7bf86401c5661015e228", "urls": [ - "bzz-raw://cc93e94b14b38ccd62dfa6664ccfc2e303d13d20b4799b415054c4b35f7cd03d", - "dweb:/ipfs/QmZyCwjhuEHNGdFRYMAE6LjD81Puhstoj49HNrwtRPYPbc" + "bzz-raw://0cac6c48bbc05456b0fccd0782b1a8c2560b0420d425dcba109526af8188893e", + "dweb:/ipfs/QmRoCZX37UNgBeVKXTsfBvR7DgibZGL1tfrPqfvyGafHor" ], "license": "MIT" }, "contracts/interfaces/IOFT.sol": { - "keccak256": "0x278e7bdeb2e8aa3f528373d8a3b3fedfe2e1bec050bcaf95065a136645cf56bb", + "keccak256": "0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8", "urls": [ - "bzz-raw://43d1789ca4f5cd81986bb52682a94caf188dc8910ecd84cf98bc59221847bd12", - "dweb:/ipfs/QmSmvKyCukcqxCUvdvNQNyshp4nYt2xxiFaB7Uji4YSrBv" + "bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4", + "dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs" ], "license": "MIT" }, diff --git a/packages/oft-evm/artifacts/OFTCore.sol/OFTCore.json b/packages/oft-evm/artifacts/OFTCore.sol/OFTCore.json index 311cfaa20..452b892a9 100644 --- a/packages/oft-evm/artifacts/OFTCore.sol/OFTCore.json +++ b/packages/oft-evm/artifacts/OFTCore.sol/OFTCore.json @@ -881,7 +881,7 @@ "token()": "fc0c546a", "transferOwnership(address)": "f2fde38b" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inspector\",\"type\":\"address\"}],\"name\":\"MsgInspectorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEND_AND_CALL\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimalConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgInspector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"oftLimit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"msgFee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"msgReceipt\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_msgInspector\",\"type\":\"address\"}],\"name\":\"setMsgInspector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract for the OftChain (OFT) token.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"events\":{\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}}},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"approvalRequired()\":{\"details\":\"Allows things like wallet implementers to determine integration requirements, without understanding the underlying token implementation.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"_delegate\":\"The delegate capable of making OApp configurations inside of the endpoint.\",\"_endpoint\":\"The address of the LayerZero endpoint.\",\"_localDecimals\":\"The decimals of the token on the local chain (this chain).\"}},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"isPeer(uint32,bytes32)\":{\"details\":\"Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\",\"params\":{\"_eid\":\"The endpoint ID to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"oftFeeDetails\":\"The details of OFT fees.\",\"oftLimit\":\"The OFT limit information.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"msgFee\":\"The calculated LayerZero messaging fee from the send() operation.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"msgReceipt\":\"The receipt for the send operation.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"setMsgInspector(address)\":{\"details\":\"Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.\",\"params\":{\"_msgInspector\":\"The address of the message inspector.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"sharedDecimals()\":{\"details\":\"Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\",\"returns\":{\"_0\":\"The shared decimals of the OFT.\"}},\"token()\":{\"returns\":{\"_0\":\"token The address of the ERC20 token implementation.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OFTCore\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"},\"token()\":{\"notice\":\"Retrieves the address of the token associated with the OFT.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/OFTCore.sol\":\"OFTCore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":20000},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/\"]},\"sources\":{\"contracts/OFTCore.sol\":{\"keccak256\":\"0x0a435802ad13dcaf74668923ec2716358b94bc2be1a63c85a931638defd7decc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc93e94b14b38ccd62dfa6664ccfc2e303d13d20b4799b415054c4b35f7cd03d\",\"dweb:/ipfs/QmZyCwjhuEHNGdFRYMAE6LjD81Puhstoj49HNrwtRPYPbc\"]},\"contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0x278e7bdeb2e8aa3f528373d8a3b3fedfe2e1bec050bcaf95065a136645cf56bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://43d1789ca4f5cd81986bb52682a94caf188dc8910ecd84cf98bc59221847bd12\",\"dweb:/ipfs/QmSmvKyCukcqxCUvdvNQNyshp4nYt2xxiFaB7Uji4YSrBv\"]},\"contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}", + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inspector\",\"type\":\"address\"}],\"name\":\"MsgInspectorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEND_AND_CALL\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimalConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgInspector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"oftLimit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"msgFee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"msgReceipt\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_msgInspector\",\"type\":\"address\"}],\"name\":\"setMsgInspector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract for the OftChain (OFT) token.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"events\":{\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}}},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"approvalRequired()\":{\"details\":\"Allows things like wallet implementers to determine integration requirements, without understanding the underlying token implementation.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"_delegate\":\"The delegate capable of making OApp configurations inside of the endpoint.\",\"_endpoint\":\"The address of the LayerZero endpoint.\",\"_localDecimals\":\"The decimals of the token on the local chain (this chain).\"}},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"isPeer(uint32,bytes32)\":{\"details\":\"Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\",\"params\":{\"_eid\":\"The endpoint ID to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"oftFeeDetails\":\"The details of OFT fees.\",\"oftLimit\":\"The OFT limit information.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"msgFee\":\"The calculated LayerZero messaging fee from the send() operation.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"msgReceipt\":\"The receipt for the send operation.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"setMsgInspector(address)\":{\"details\":\"Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.\",\"params\":{\"_msgInspector\":\"The address of the message inspector.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"sharedDecimals()\":{\"details\":\"Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\",\"returns\":{\"_0\":\"The shared decimals of the OFT.\"}},\"token()\":{\"returns\":{\"_0\":\"token The address of the ERC20 token implementation.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OFTCore\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"},\"token()\":{\"notice\":\"Retrieves the address of the token associated with the OFT.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/OFTCore.sol\":\"OFTCore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":20000},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/\"]},\"sources\":{\"contracts/OFTCore.sol\":{\"keccak256\":\"0x4c5a5412cf671bb70d84c9e783312eddf864ef56566f7bf86401c5661015e228\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0cac6c48bbc05456b0fccd0782b1a8c2560b0420d425dcba109526af8188893e\",\"dweb:/ipfs/QmRoCZX37UNgBeVKXTsfBvR7DgibZGL1tfrPqfvyGafHor\"]},\"contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4\",\"dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs\"]},\"contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}", "metadata": { "compiler": { "version": "0.8.22+commit.4fc1097e" }, "language": "Solidity", @@ -2111,18 +2111,18 @@ }, "sources": { "contracts/OFTCore.sol": { - "keccak256": "0x0a435802ad13dcaf74668923ec2716358b94bc2be1a63c85a931638defd7decc", + "keccak256": "0x4c5a5412cf671bb70d84c9e783312eddf864ef56566f7bf86401c5661015e228", "urls": [ - "bzz-raw://cc93e94b14b38ccd62dfa6664ccfc2e303d13d20b4799b415054c4b35f7cd03d", - "dweb:/ipfs/QmZyCwjhuEHNGdFRYMAE6LjD81Puhstoj49HNrwtRPYPbc" + "bzz-raw://0cac6c48bbc05456b0fccd0782b1a8c2560b0420d425dcba109526af8188893e", + "dweb:/ipfs/QmRoCZX37UNgBeVKXTsfBvR7DgibZGL1tfrPqfvyGafHor" ], "license": "MIT" }, "contracts/interfaces/IOFT.sol": { - "keccak256": "0x278e7bdeb2e8aa3f528373d8a3b3fedfe2e1bec050bcaf95065a136645cf56bb", + "keccak256": "0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8", "urls": [ - "bzz-raw://43d1789ca4f5cd81986bb52682a94caf188dc8910ecd84cf98bc59221847bd12", - "dweb:/ipfs/QmSmvKyCukcqxCUvdvNQNyshp4nYt2xxiFaB7Uji4YSrBv" + "bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4", + "dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs" ], "license": "MIT" }, diff --git a/packages/oft-evm/contracts/OFTCore.sol b/packages/oft-evm/contracts/OFTCore.sol index 111a73468..597407b56 100644 --- a/packages/oft-evm/contracts/OFTCore.sol +++ b/packages/oft-evm/contracts/OFTCore.sol @@ -2,6 +2,8 @@ pragma solidity ^0.8.20; +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + import { OApp, Origin } from "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol"; import { OAppOptionsType3 } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol"; import { IOAppMsgInspector } from "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol"; @@ -112,7 +114,7 @@ abstract contract OFTCore is IOFT, OApp, OAppPreCrimeSimulator, OAppOptionsType3 returns (OFTLimit memory oftLimit, OFTFeeDetail[] memory oftFeeDetails, OFTReceipt memory oftReceipt) { uint256 minAmountLD = 0; // Unused in the default implementation. - uint256 maxAmountLD = type(uint64).max; // Unused in the default implementation. + uint256 maxAmountLD = IERC20(this.token()).totalSupply(); // Unused in the default implementation. oftLimit = OFTLimit(minAmountLD, maxAmountLD); // Unused in the default implementation; reserved for future complex fee details. diff --git a/packages/oft-evm/test/OFT.t.sol b/packages/oft-evm/test/OFT.t.sol index 86b8de4d8..d5ec905c9 100644 --- a/packages/oft-evm/test/OFT.t.sol +++ b/packages/oft-evm/test/OFT.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.20; import { OptionsBuilder } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol"; import { OFTMock } from "./mocks/OFTMock.sol"; -import { MessagingFee, MessagingReceipt } from "../contracts/OFTCore.sol"; +import { MessagingFee, MessagingReceipt, OFTFeeDetail, OFTLimit, OFTReceipt } from "../contracts/OFTCore.sol"; import { NativeOFTAdapterMock } from "./mocks/NativeOFTAdapterMock.sol"; import { OFTAdapterMock } from "./mocks/OFTAdapterMock.sol"; import { ERC20Mock } from "./mocks/ERC20Mock.sol"; @@ -776,4 +776,24 @@ contract OFTTest is TestHelperOz5 { vm.expectRevert(abi.encodeWithSelector(IOAppMsgInspector.InspectionFailed.selector, message, extraOptions)); (message, ) = aOFT.asOFTMock().buildMsgAndOptions(sendParam, amountToCreditLD); } + + function test_quoteOFT(uint256 _amountToSendLD) public { + bytes32 to = addressToBytes32(userA); + uint256 minAmountToCreditLD = aOFT.asOFTMock().removeDust(_amountToSendLD); + SendParam memory sendParam = SendParam( + B_EID, + to, + _amountToSendLD, + minAmountToCreditLD, + "", + "", + "" + ); + (OFTLimit memory oftLimit, OFTFeeDetail[] memory oftFeeDetails, OFTReceipt memory oftReceipt) = aOFT.quoteOFT(sendParam); + assertEq(0, oftLimit.minAmountLD); + assertEq(IERC20(aOFT.token()).totalSupply(), oftLimit.maxAmountLD); + assertEq(0, oftFeeDetails.length); + assertEq(minAmountToCreditLD, oftReceipt.amountSentLD); + assertEq(minAmountToCreditLD, oftReceipt.amountReceivedLD); + } } From 1c8681e3abbf8e02856cb401f958343aad824cca Mon Sep 17 00:00:00 2001 From: Nazreen Date: Thu, 12 Dec 2024 03:06:33 +0800 Subject: [PATCH 14/24] feat(examples/oft-solana): have base58 script as hardhat task instead (#1127) --- examples/oft-solana/README.md | 24 ++------------- examples/oft-solana/hardhat.config.ts | 2 +- examples/oft-solana/tasks/index.ts | 1 + examples/oft-solana/tasks/solana/base58.ts | 36 ++++++++++++++++++++++ 4 files changed, 40 insertions(+), 23 deletions(-) create mode 100644 examples/oft-solana/tasks/solana/base58.ts diff --git a/examples/oft-solana/README.md b/examples/oft-solana/README.md index 3e767ca57..89ae03ff3 100644 --- a/examples/oft-solana/README.md +++ b/examples/oft-solana/README.md @@ -79,29 +79,9 @@ We recommend that you request 5 devnet SOL, which should be sufficient for this cp .env.example .env ``` -In the `.env` just created, set `SOLANA_PRIVATE_KEY` to your private key value in base58 format. Since the locally stored keypair is in an integer array format, we'd need to encode it into base58 first. You can create a temporary script called `getBase58Pk.js` in your project root with the following contents: +In the `.env` just created, set `SOLANA_PRIVATE_KEY` to your private key value in base58 format. Since the locally stored keypair is in an integer array format, we'd need to encode it into base58 first. -
- View `getBase58Pk.js` script - -```js -import fs from "fs"; -import { Keypair } from "@solana/web3.js"; -import bs58 from "bs58"; - -const keypairFilePath = ``; // you can view this by running `solana config get` - -const data = fs.readFileSync(keypairFilePath, "utf8"); -const keypairJson = JSON.parse(data); -const keypair = Keypair.fromSecretKey(Uint8Array.from(keypairJson)); -const base58EncodedPrivateKey = bs58.encode(keypair.secretKey); - -console.log(base58EncodedPrivateKey); -``` - -Then, run `node getBase58Pk.js` - -
+You can run the `npx hardhat lz:solana:base-58` to output your private key in base58 format. Optionally, pass in a value for the `--keypair-file` flag if you want to use the keypair other than the default at `~/.config/solana.id.json` Also set the `RPC_URL_SOLANA_TESTNET` value. Note that while the naming used here is `TESTNET`, it refers to the [Solana Devnet](https://docs.layerzero.network/v2/developers/evm/technical-reference/deployed-contracts#solana-testnet). We use `TESTNET` to keep it consistent with the existing EVM testnets. diff --git a/examples/oft-solana/hardhat.config.ts b/examples/oft-solana/hardhat.config.ts index 4653a746f..e298b44c3 100644 --- a/examples/oft-solana/hardhat.config.ts +++ b/examples/oft-solana/hardhat.config.ts @@ -61,7 +61,7 @@ const config: HardhatUserConfig = { networks: { 'sepolia-testnet': { eid: EndpointId.SEPOLIA_V2_TESTNET, - url: process.env.RPC_URL_SEPOLIA || 'https://rpc.sepolia.org/', + url: process.env.RPC_URL_SEPOLIA || 'https://gateway.tenderly.co/public/sepolia', accounts, }, hardhat: { diff --git a/examples/oft-solana/tasks/index.ts b/examples/oft-solana/tasks/index.ts index 30d3f0c4a..9008859b3 100644 --- a/examples/oft-solana/tasks/index.ts +++ b/examples/oft-solana/tasks/index.ts @@ -6,5 +6,6 @@ import './solana/createOFTAdapter' import './solana/sendOFT' import './solana/setAuthority' import './solana/getPrioFees' +import './solana/base58' import './solana/setInboundRateLimit' import './solana/setOutboundRateLimit' diff --git a/examples/oft-solana/tasks/solana/base58.ts b/examples/oft-solana/tasks/solana/base58.ts new file mode 100644 index 000000000..9e4191c02 --- /dev/null +++ b/examples/oft-solana/tasks/solana/base58.ts @@ -0,0 +1,36 @@ +import assert from 'assert' +import fs from 'fs' +import path from 'path' + +import { Keypair } from '@solana/web3.js' +import bs58 from 'bs58' +import { task } from 'hardhat/config' + +import { types as devtoolsTypes } from '@layerzerolabs/devtools-evm-hardhat' + +interface Base58FeesTaskArgs { + /** + * The path to the keypair file to be used. + */ + keypairFile: string +} + +assert(process.env.HOME != undefined, 'process.env.HOME needs to be defined') + +const defaultKeypairFile = path.resolve(process.env.HOME, '.config/solana/id.json') + +task('lz:solana:base-58', 'Outputs the base58 string for a keypair') + .addParam( + 'keypairFile', + 'The path to the keypair file to be used. Defaults to ~/.config/solana/id.json', + defaultKeypairFile, + devtoolsTypes.string + ) + .setAction(async ({ keypairFile }: Base58FeesTaskArgs) => { + assert(fs.existsSync(keypairFile), `Keypair file not found: ${keypairFile}`) + const data = fs.readFileSync(keypairFile, 'utf8') + const keypairJson = JSON.parse(data) + const keypair = Keypair.fromSecretKey(Uint8Array.from(keypairJson)) + const base58EncodedPrivateKey = bs58.encode(keypair.secretKey) + console.log(base58EncodedPrivateKey) + }) From d255778fad72c3662c90589065388ded6e3c8d3d Mon Sep 17 00:00:00 2001 From: Daniel Kmak <159833747+DanL0@users.noreply.github.com> Date: Thu, 12 Dec 2024 16:58:50 +0100 Subject: [PATCH 15/24] add simple config generator based on metadata endpoint (#1115) --- .changeset/sixty-radios-rest.md | 6 + packages/metadata-tools/.eslintignore | 2 + packages/metadata-tools/.eslintrc.json | 3 + packages/metadata-tools/.gitignore | 1 + packages/metadata-tools/.prettierignore | 2 + packages/metadata-tools/README.md | 38 ++ packages/metadata-tools/jest.config.js | 12 + packages/metadata-tools/package.json | 56 +++ .../metadata-tools/src/config-metadata.ts | 208 +++++++++++ packages/metadata-tools/src/index.ts | 2 + packages/metadata-tools/src/types.ts | 91 +++++ .../config-metadata.test.ts.snap | 90 +++++ .../test/config-metadata.test.ts | 108 ++++++ packages/metadata-tools/test/data/fuji.json | 346 ++++++++++++++++++ .../test/data/solana-mainnet.json | 117 ++++++ .../test/data/solana-testnet.json | 74 ++++ packages/metadata-tools/tsconfig.json | 13 + packages/metadata-tools/tsup.config.ts | 17 + packages/toolbox-hardhat/types/index.d.ts | 1 + pnpm-lock.yaml | 87 ++--- turbo.json | 1 + 21 files changed, 1227 insertions(+), 48 deletions(-) create mode 100644 .changeset/sixty-radios-rest.md create mode 100644 packages/metadata-tools/.eslintignore create mode 100644 packages/metadata-tools/.eslintrc.json create mode 100644 packages/metadata-tools/.gitignore create mode 100644 packages/metadata-tools/.prettierignore create mode 100644 packages/metadata-tools/README.md create mode 100644 packages/metadata-tools/jest.config.js create mode 100644 packages/metadata-tools/package.json create mode 100644 packages/metadata-tools/src/config-metadata.ts create mode 100644 packages/metadata-tools/src/index.ts create mode 100644 packages/metadata-tools/src/types.ts create mode 100644 packages/metadata-tools/test/__snapshots__/config-metadata.test.ts.snap create mode 100644 packages/metadata-tools/test/config-metadata.test.ts create mode 100644 packages/metadata-tools/test/data/fuji.json create mode 100644 packages/metadata-tools/test/data/solana-mainnet.json create mode 100644 packages/metadata-tools/test/data/solana-testnet.json create mode 100644 packages/metadata-tools/tsconfig.json create mode 100644 packages/metadata-tools/tsup.config.ts diff --git a/.changeset/sixty-radios-rest.md b/.changeset/sixty-radios-rest.md new file mode 100644 index 000000000..c59c76273 --- /dev/null +++ b/.changeset/sixty-radios-rest.md @@ -0,0 +1,6 @@ +--- +"@layerzerolabs/toolbox-hardhat": patch +"@layerzerolabs/metadata-tools": patch +--- + +add metadata-tools package diff --git a/packages/metadata-tools/.eslintignore b/packages/metadata-tools/.eslintignore new file mode 100644 index 000000000..db4c6d9b6 --- /dev/null +++ b/packages/metadata-tools/.eslintignore @@ -0,0 +1,2 @@ +dist +node_modules \ No newline at end of file diff --git a/packages/metadata-tools/.eslintrc.json b/packages/metadata-tools/.eslintrc.json new file mode 100644 index 000000000..be97c53fb --- /dev/null +++ b/packages/metadata-tools/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "../../.eslintrc.json" +} diff --git a/packages/metadata-tools/.gitignore b/packages/metadata-tools/.gitignore new file mode 100644 index 000000000..06cf65390 --- /dev/null +++ b/packages/metadata-tools/.gitignore @@ -0,0 +1 @@ +cache diff --git a/packages/metadata-tools/.prettierignore b/packages/metadata-tools/.prettierignore new file mode 100644 index 000000000..763301fc0 --- /dev/null +++ b/packages/metadata-tools/.prettierignore @@ -0,0 +1,2 @@ +dist/ +node_modules/ \ No newline at end of file diff --git a/packages/metadata-tools/README.md b/packages/metadata-tools/README.md new file mode 100644 index 000000000..396005d25 --- /dev/null +++ b/packages/metadata-tools/README.md @@ -0,0 +1,38 @@ +

+ + LayerZero + +

+ +

@layerzerolabs/metadata-tools

+ + +

+ + NPM Version + + Downloads + + NPM License +

+ +## Installation + +```bash +yarn add @layerzerolabs/metadata-tools + +pnpm add @layerzerolabs/metadata-tools + +npm install @layerzerolabs/metadata-tools +``` + +## Usage + +```typescript +import { generateConnectionsConfig } from "@layerzerolabs/metadata-tools"; + +// [srcContract, dstContract, [requiredDVNs, [optionalDVNs, threshold]], [srcToDstConfirmations, dstToSrcConfirmations]], [enforcedOptionsSrcToDst, enforcedOptionsDstToSrc] +const connections = await generateConnectionsConfig([ + [avalancheContract, polygonContract, [['LayerZero'], []], [1, 1], [EVM_ENFORCED_OPTIONS, EVM_ENFORCED_OPTIONS]], +]); +``` diff --git a/packages/metadata-tools/jest.config.js b/packages/metadata-tools/jest.config.js new file mode 100644 index 000000000..ff88d2a0a --- /dev/null +++ b/packages/metadata-tools/jest.config.js @@ -0,0 +1,12 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ +module.exports = { + cache: false, + reporters: [['github-actions', { silent: false }], 'default'], + testEnvironment: 'node', + moduleNameMapper: { + '^@/(.*)$': '/src/$1', + }, + transform: { + '^.+\\.(t|j)sx?$': '@swc/jest', + }, +}; diff --git a/packages/metadata-tools/package.json b/packages/metadata-tools/package.json new file mode 100644 index 000000000..92460528f --- /dev/null +++ b/packages/metadata-tools/package.json @@ -0,0 +1,56 @@ +{ + "name": "@layerzerolabs/metadata-tools", + "version": "0.0.1", + "description": "LayerZero metadata API tools", + "repository": { + "type": "git", + "url": "git+https://github.com/LayerZero-Labs/devtools.git", + "directory": "packages/metadata-tools" + }, + "license": "MIT", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "require": "./dist/index.js", + "import": "./dist/index.mjs" + }, + "./*": { + "types": "./dist/*.d.ts", + "require": "./dist/*.js", + "import": "./dist/*.mjs" + } + }, + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "prebuild": "$npm_execpath tsc --noEmit", + "build": "$npm_execpath tsup", + "clean": "rm -rf dist", + "dev": "$npm_execpath tsup --watch", + "lint": "$npm_execpath eslint '**/*.{js,ts,json}'", + "lint:fix": "eslint --fix '**/*.{js,ts,json}'", + "test": "jest" + }, + "devDependencies": { + "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", + "@layerzerolabs/ua-devtools": "~3.0.1", + "@swc/core": "^1.4.0", + "@swc/jest": "^0.2.36", + "@types/jest": "^29.5.12", + "jest": "^29.7.0", + "tslib": "~2.6.2", + "tsup": "~8.0.1", + "typescript": "^5.4.4" + }, + "peerDependencies": { + "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", + "@layerzerolabs/ua-devtools": "~3.0.1" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/metadata-tools/src/config-metadata.ts b/packages/metadata-tools/src/config-metadata.ts new file mode 100644 index 000000000..b8f089194 --- /dev/null +++ b/packages/metadata-tools/src/config-metadata.ts @@ -0,0 +1,208 @@ +import type { OmniEdgeHardhat } from '@layerzerolabs/devtools-evm-hardhat' +import type { OAppEdgeConfig } from '@layerzerolabs/ua-devtools' +import { IMetadata } from './types' +import { TwoWayConfig } from './types' + +const METADATA_URL = process.env.LZ_METADATA_URL || 'https://metadata.layerzero-api.com/v1/metadata' + +function getEndpointIdDeployment(eid: number, metadata: IMetadata) { + const srcEidString = eid.toString() + for (const objectKey in metadata) { + const entry = metadata[objectKey] + + if (typeof entry?.deployments !== 'undefined') { + for (const deployment of entry.deployments) { + if (srcEidString === deployment.eid) { + return deployment + } + } + } + } + + throw new Error(`Can't find endpoint with eid: "${eid}",`) +} + +export function DVNsToAddresses(dvns: string[], chainKey: string, metadata: IMetadata) { + if (dvns.length === 0) { + return [] + } + + const dvnAddresses: string[] = [] + const seenDVNs = new Set() + + if (!metadata[chainKey]?.dvns) { + throw new Error(`Can't find DVNs for chainKey: "${chainKey}".`) + } + + const metadataDVNs = Object.entries(metadata[chainKey].dvns) + + for (const dvn of dvns) { + if (seenDVNs.has(dvn)) { + throw new Error(`Duplicate DVN name found: "${dvn}".`) + } + seenDVNs.add(dvn) + + let i = 0 + for (const [dvnAddress, dvnDetails] of metadataDVNs) { + if (dvnDetails.canonicalName === dvn && !dvnDetails.lzReadCompatible) { + if (dvnDetails.deprecated) { + console.log(`Warning: DVN "${dvn}" is deprecated.`) + } + + dvnAddresses.push(dvnAddress) + break + } + + if (i === metadataDVNs.length - 1) { + throw new Error( + `Can't find DVN: "${dvn}" on chainKey: "${chainKey}". Double check you're using valid DVN canonical name (not an address).` + ) + } + + i++ + } + } + + if (dvns.length !== dvnAddresses.length) { + throw new Error(`Can't find all DVNs: "${dvns.join(', ')}".`) + } + + return dvnAddresses.sort() +} + +export async function translatePathwayToConfig( + pathway: TwoWayConfig, + metadata: IMetadata +): Promise[]> { + const configs: OmniEdgeHardhat[] = [] + + const sourceContract = pathway[0] + const destinationContract = pathway[1] + const [requiredDVNs, optionalDVNConfig] = pathway[2] + const [sourceToDestinationConfirmations, destinationToSourceConfirmations] = pathway[3] + const [enforcedOptionsSrcToDst, enforcedOptionsDstToSrc] = pathway[4] + + const optionalDVNs = optionalDVNConfig[0] + const optionalDVNThreshold = optionalDVNConfig[1] || 0 + + if (optionalDVNThreshold > (optionalDVNs?.length || 0)) { + throw new Error(`Optional DVN threshold is greater than the number of optional DVNs.`) + } + + const sourceLZDeployment = getEndpointIdDeployment(sourceContract.eid, metadata) + const destinationLZDeployment = getEndpointIdDeployment(destinationContract.eid, metadata) + + const sourceRequiredDVNs = DVNsToAddresses(requiredDVNs, sourceLZDeployment.chainKey, metadata) + const destinationRequiredDVNs = DVNsToAddresses(requiredDVNs, destinationLZDeployment.chainKey, metadata) + + let sourceOptionalDVNs: string[] = [] + let destinationOptionalDVNs: string[] = [] + + if (optionalDVNs) { + sourceOptionalDVNs = DVNsToAddresses(optionalDVNs, sourceLZDeployment.chainKey, metadata) + destinationOptionalDVNs = DVNsToAddresses(optionalDVNs, destinationLZDeployment.chainKey, metadata) + } + + if (!sourceLZDeployment.sendUln302 || !sourceLZDeployment.receiveUln302 || !sourceLZDeployment.executor) { + throw new Error( + `Can't find sendUln302, receiveUln302 or executor for source endpoint with eid: "${sourceContract.eid}".` + ) + } + + if ( + !destinationLZDeployment.sendUln302 || + !destinationLZDeployment.receiveUln302 || + !destinationLZDeployment.executor + ) { + throw new Error( + `Can't find sendUln302, receiveUln302 or executor for destination endpoint with eid: "${destinationContract.eid}".` + ) + } + + const sourceToDestinationConfig: OmniEdgeHardhat = { + from: sourceContract, + to: destinationContract, + config: { + sendLibrary: sourceLZDeployment.sendUln302.address, + receiveLibraryConfig: { + receiveLibrary: sourceLZDeployment.receiveUln302.address, + gracePeriod: BigInt(0), + }, + sendConfig: { + executorConfig: { + maxMessageSize: 10000, + executor: sourceLZDeployment.executor.address, + }, + ulnConfig: { + confirmations: BigInt(sourceToDestinationConfirmations), + requiredDVNs: sourceRequiredDVNs, + optionalDVNs: sourceOptionalDVNs, + optionalDVNThreshold, + }, + }, + enforcedOptions: enforcedOptionsSrcToDst, + }, + } + + const destinationToSourceConfig: OmniEdgeHardhat = { + from: destinationContract, + to: sourceContract, + config: { + sendLibrary: destinationLZDeployment.sendUln302.address, + receiveLibraryConfig: { + receiveLibrary: destinationLZDeployment.receiveUln302.address, + gracePeriod: BigInt(0), + }, + receiveConfig: { + ulnConfig: { + confirmations: BigInt(sourceToDestinationConfirmations), + requiredDVNs: destinationRequiredDVNs, + optionalDVNs: destinationOptionalDVNs, + optionalDVNThreshold, + }, + }, + }, + } + + if (destinationToSourceConfirmations) { + sourceToDestinationConfig.config.receiveConfig = { + ulnConfig: { + confirmations: BigInt(destinationToSourceConfirmations), + requiredDVNs: sourceRequiredDVNs, + optionalDVNs: sourceOptionalDVNs, + optionalDVNThreshold, + }, + } + + destinationToSourceConfig.config.enforcedOptions = enforcedOptionsDstToSrc + + destinationToSourceConfig.config.sendConfig = { + executorConfig: { + maxMessageSize: 10000, + executor: destinationLZDeployment.executor.address, + }, + ulnConfig: { + confirmations: BigInt(destinationToSourceConfirmations), + requiredDVNs: destinationRequiredDVNs, + optionalDVNs: destinationOptionalDVNs, + optionalDVNThreshold, + }, + } + } + + configs.push(sourceToDestinationConfig) + configs.push(destinationToSourceConfig) + + return configs +} + +export async function generateConnectionsConfig(pathways: TwoWayConfig[]) { + const metadata = (await fetch(METADATA_URL).then((res) => res.json())) as IMetadata + const connections: OmniEdgeHardhat[] = [] + + for (const pathway of pathways) { + connections.push(...(await translatePathwayToConfig(pathway, metadata))) + } + + return connections +} diff --git a/packages/metadata-tools/src/index.ts b/packages/metadata-tools/src/index.ts new file mode 100644 index 000000000..a0a0d111c --- /dev/null +++ b/packages/metadata-tools/src/index.ts @@ -0,0 +1,2 @@ +export * from './config-metadata' +export * from './types' diff --git a/packages/metadata-tools/src/types.ts b/packages/metadata-tools/src/types.ts new file mode 100644 index 000000000..2ccca4e14 --- /dev/null +++ b/packages/metadata-tools/src/types.ts @@ -0,0 +1,91 @@ +import type { OmniPointHardhat } from '@layerzerolabs/devtools-evm-hardhat' +import type { OAppEnforcedOption } from '@layerzerolabs/ua-devtools' + +// [srcContract, dstContract, [requiredDVNs, [optionalDVNs, threshold]], [srcToDstConfirmations, dstToSrcConfirmations]], [enforcedOptionsSrcToDst, enforcedOptionsDstToSrc] +export type TwoWayConfig = [ + OmniPointHardhat, // srcContract + OmniPointHardhat, // dstContract + [string[], [string[], number] | []], // [requiredDVNs, [optionalDVNs, threshold]] + [number, number | undefined], // [srcToDstConfirmations, dstToSrcConfirmations] + [OAppEnforcedOption[] | undefined, OAppEnforcedOption[] | undefined], // [enforcedOptionsSrcToDst, enforcedOptionsDstToSrc] +] + +export interface IMetadata { + [key: string]: { + created: string + updated: string + tableName: string + environment: string + blockExplorers?: { url: string }[] + deployments?: { + eid: string + chainKey: string + stage: string + version: number + endpoint?: { address: string } + relayerV2?: { address: string } + ultraLightNodeV2?: { address: string } + nonceContract?: { address: string } + executor?: { address: string } + deadDVN?: { address: string } + endpointV2?: { address: string } + sendUln302?: { address: string } + lzExecutor?: { address: string } + sendUln301?: { address: string } + receiveUln301?: { address: string } + receiveUln302?: { address: string } + }[] + chainDetails?: { + chainType: string + chainKey: string + nativeChainId?: number + chainLayer: string + chainStack?: string + nativeCurrency: { + name?: string + symbol: string + cgId?: string + cmcId: number + decimals: number + } + cgNetworkId?: string + shortName?: string + mainnetChainName?: string + name?: string + } + dvns?: { + [address: string]: { + version: number + canonicalName: string + id: string + deprecated?: boolean + lzReadCompatible?: boolean + } + } + rpcs?: { url: string; weight?: number }[] + addressToOApp?: { + [address: string]: { + id: string + canonicalName: string + type?: string + } + } + chainName: string + tokens?: { + [address: string]: { + symbol: string + cgId?: string + cmcId?: number + type: string + decimals: number + peggedTo?: { + symbol: string + chainName: string + address: string + programaticallyPegged?: boolean + } + } + } + chainKey: string + } +} diff --git a/packages/metadata-tools/test/__snapshots__/config-metadata.test.ts.snap b/packages/metadata-tools/test/__snapshots__/config-metadata.test.ts.snap new file mode 100644 index 000000000..63a37c699 --- /dev/null +++ b/packages/metadata-tools/test/__snapshots__/config-metadata.test.ts.snap @@ -0,0 +1,90 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`config-metadata translatePathwayToConfig should be able to translate a pathway to a config 1`] = ` +[ + { + "config": { + "enforcedOptions": undefined, + "receiveConfig": { + "ulnConfig": { + "confirmations": 1n, + "optionalDVNThreshold": 0, + "optionalDVNs": [], + "requiredDVNs": [ + "0x9f0e79aeb198750f963b6f30b99d87c6ee5a0467", + ], + }, + }, + "receiveLibraryConfig": { + "gracePeriod": 0n, + "receiveLibrary": "0x819F0FAF2cb1Fba15b9cB24c9A2BDaDb0f895daf", + }, + "sendConfig": { + "executorConfig": { + "executor": "0xa7BFA9D51032F82D649A501B6a1f922FC2f7d4e3", + "maxMessageSize": 10000, + }, + "ulnConfig": { + "confirmations": 1n, + "optionalDVNThreshold": 0, + "optionalDVNs": [], + "requiredDVNs": [ + "0x9f0e79aeb198750f963b6f30b99d87c6ee5a0467", + ], + }, + }, + "sendLibrary": "0x69BF5f48d2072DfeBc670A1D19dff91D0F4E8170", + }, + "from": { + "contractName": "MyOFT", + "eid": 40106, + }, + "to": { + "address": "HBTWw2VKNLuDBjg9e5dArxo5axJRX8csCEBcCo3CFdAy", + "eid": 40168, + }, + }, + { + "config": { + "enforcedOptions": undefined, + "receiveConfig": { + "ulnConfig": { + "confirmations": 1n, + "optionalDVNThreshold": 0, + "optionalDVNs": [], + "requiredDVNs": [ + "4VDjp6XQaxoZf5RGwiPU9NR1EXSZn2TP4ATMmiSzLfhb", + ], + }, + }, + "receiveLibraryConfig": { + "gracePeriod": 0n, + "receiveLibrary": "7a4WjyR8VZ7yZz5XJAKm39BUGn5iT9CKcv2pmG9tdXVH", + }, + "sendConfig": { + "executorConfig": { + "executor": "AwrbHeCyniXaQhiJZkLhgWdUCteeWSGaSN1sTfLiY7xK", + "maxMessageSize": 10000, + }, + "ulnConfig": { + "confirmations": 1n, + "optionalDVNThreshold": 0, + "optionalDVNs": [], + "requiredDVNs": [ + "4VDjp6XQaxoZf5RGwiPU9NR1EXSZn2TP4ATMmiSzLfhb", + ], + }, + }, + "sendLibrary": "7a4WjyR8VZ7yZz5XJAKm39BUGn5iT9CKcv2pmG9tdXVH", + }, + "from": { + "address": "HBTWw2VKNLuDBjg9e5dArxo5axJRX8csCEBcCo3CFdAy", + "eid": 40168, + }, + "to": { + "contractName": "MyOFT", + "eid": 40106, + }, + }, +] +`; diff --git a/packages/metadata-tools/test/config-metadata.test.ts b/packages/metadata-tools/test/config-metadata.test.ts new file mode 100644 index 000000000..67a4b8042 --- /dev/null +++ b/packages/metadata-tools/test/config-metadata.test.ts @@ -0,0 +1,108 @@ +import { DVNsToAddresses, translatePathwayToConfig } from '@/config-metadata' +import { IMetadata } from '@/types' + +import fujiMetadata from './data/fuji.json' +import solanaMainnetMetadata from './data/solana-mainnet.json' +import solanaTestnetMetadata from './data/solana-testnet.json' + +describe('config-metadata', () => { + const metadata: IMetadata = { + fuji: fujiMetadata, + solana: solanaMainnetMetadata, + 'solana-testnet': solanaTestnetMetadata, + } + + describe('translatePathwayToConfig', () => { + it('should be able to translate a pathway to a config', async () => { + const avalancheContract = { + eid: 40106, + contractName: 'MyOFT', + } + + const solanaContract = { + eid: 40168, + address: 'HBTWw2VKNLuDBjg9e5dArxo5axJRX8csCEBcCo3CFdAy', + } + + const translatedConfig = await translatePathwayToConfig( + [avalancheContract, solanaContract, [['LayerZero Labs'], []], [1, 1], [undefined, undefined]], + metadata + ) + + expect(translatedConfig).toMatchSnapshot() + }) + }) + + describe('DVNsToAddresses', () => { + it('returns an empty array if no DVNs are provided', () => { + expect(DVNsToAddresses([], 'fuji', metadata)).toStrictEqual([]) + }) + + it('should correctly parse DVN addresses', () => { + expect(DVNsToAddresses(['LayerZero Labs'], 'fuji', metadata)).toStrictEqual([ + '0x9f0e79aeb198750f963b6f30b99d87c6ee5a0467', + ]) + }) + + it('sorts the EVM addresses', () => { + expect( + DVNsToAddresses(['LayerZero Labs', 'Nethermind', 'Google', 'Gitcoin'], 'fuji', metadata) + ).toStrictEqual([ + '0x071fbf35b35d48afc3edf84f0397980c25531560', + '0x7883f83ea40a56137a63baf93bfee5b9b8c1c447', + '0x9f0e79aeb198750f963b6f30b99d87c6ee5a0467', + '0xa4652582077afc447ea7c9e984d656ee4963fe95', + ]) + }) + + it('sorts the Solana addresses', () => { + expect( + DVNsToAddresses(['LayerZero Labs', 'Nethermind', 'Paxos', 'Horizen', 'Google'], 'solana', metadata) + ).toStrictEqual([ + '4HxXbLv37XrivKukEbofybpHr7C8HUGJzd4B5T9USpGh', + '4VDjp6XQaxoZf5RGwiPU9NR1EXSZn2TP4ATMmiSzLfhb', + 'F7gu9kLcpn4bSTZn183mhn2RXUuMy7zckdxJZdUjuALw', + 'GPjyWr8vCotGuFubDpTxDxy9Vj1ZeEN4F2dwRmFiaGab', + 'HR9NQKK1ynW9NzgdM37dU5CBtqRHTukmbMKS7qkwSkHX', + ]) + }) + + it('should not support hex string addresses', () => { + expect(() => + DVNsToAddresses(['0xa4652582077afc447ea7c9e984d656ee4963fe95', 'LayerZero Labs'], 'fuji', metadata) + ).toThrow( + `Can't find DVN: "0xa4652582077afc447ea7c9e984d656ee4963fe95" on chainKey: "fuji". Double check you're using valid DVN canonical name (not an address).` + ) + }) + + it('should not support Solana addresses', () => { + expect(() => DVNsToAddresses(['4VDjp6XQaxoZf5RGwiPU9NR1EXSZn2TP4ATMmiSzLfhb'], 'solana', metadata)).toThrow( + `Can't find DVN: "4VDjp6XQaxoZf5RGwiPU9NR1EXSZn2TP4ATMmiSzLfhb" on chainKey: "solana". Double check you're using valid DVN canonical name (not an address).` + ) + }) + + it('should throw error for invalid chain key', () => { + expect(() => DVNsToAddresses(['LayerZero Labs'], 'invalid_chain', metadata)).toThrow( + `Can't find DVNs for chainKey: "invalid_chain".` + ) + }) + + it('should throw error for non-existent DVN name', () => { + expect(() => DVNsToAddresses(['Non Existent DVN'], 'fuji', metadata)).toThrow( + `Can't find DVN: "Non Existent DVN" on chainKey: "fuji". Double check you're using valid DVN canonical name (not an address).` + ) + }) + + it('should be case sensitive for DVN names', () => { + expect(() => DVNsToAddresses(['layerzero labs'], 'fuji', metadata)).toThrow( + `Can't find DVN: "layerzero labs" on chainKey: "fuji". Double check you're using valid DVN canonical name (not an address).` + ) + }) + + it('should handle duplicate DVN names', () => { + expect(() => DVNsToAddresses(['LayerZero Labs', 'LayerZero Labs'], 'fuji', metadata)).toThrow( + `Duplicate DVN name found: "LayerZero Labs".` + ) + }) + }) +}) diff --git a/packages/metadata-tools/test/data/fuji.json b/packages/metadata-tools/test/data/fuji.json new file mode 100644 index 000000000..089cb6eeb --- /dev/null +++ b/packages/metadata-tools/test/data/fuji.json @@ -0,0 +1,346 @@ +{ + "created": "2024-12-12T03:31:20.000Z", + "updated": "2024-12-12T03:31:20.000Z", + "tableName": "layerzero-chain_metadata", + "environment": "testnet", + "blockExplorers": [ + { + "url": "https://cchain.explorer.avax-test.network" + } + ], + "deployments": [ + { + "ultraLightNode": { + "address": "0x0848B8AD17D4003dDe1f1B7eF1FdBA4B629Da97e" + }, + "eid": "10106", + "relayer": { + "address": "0xd035e64324bc470ee872062D508DA9c2772f14b5" + }, + "endpoint": { + "address": "0x93f54D755A063cE7bB9e6Ac47Eccc8e33411d706" + }, + "chainKey": "fuji", + "stage": "testnet", + "relayerV2": { + "address": "0xA30444B26C171B27c6B3698544490Affa2e12119" + }, + "ultraLightNodeV2": { + "address": "0xfDDAFFa49e71dA3ef0419a303a6888F94bB5Ba18" + }, + "version": 1, + "nonceContract": { + "address": "0xB401d261F971E550FAeE4Bb0D28f92a30E812105" + } + }, + { + "eid": "40106", + "chainKey": "fuji", + "stage": "testnet", + "executor": { + "address": "0xa7BFA9D51032F82D649A501B6a1f922FC2f7d4e3" + }, + "endpointV2": { + "address": "0x6EDCE65403992e310A62460808c4b910D972f10f" + }, + "sendUln302": { + "address": "0x69BF5f48d2072DfeBc670A1D19dff91D0F4E8170" + }, + "lzExecutor": { + "address": "0x1356D9201036A216836925803512649d6BB2395e" + }, + "sendUln301": { + "address": "0x184e24e31657Cf853602589fe5304b144a826c85" + }, + "receiveUln301": { + "address": "0x91df17bF1Ced54c6169e1E24722C0a88a447cBAf" + }, + "version": 2, + "receiveUln302": { + "address": "0x819F0FAF2cb1Fba15b9cB24c9A2BDaDb0f895daf" + } + } + ], + "chainDetails": { + "chainKey": "fuji", + "nativeChainId": 43113, + "chainLayer": "L1", + "nativeCurrency": { + "name": "Avalanche Token", + "symbol": "AVAX", + "cgId": "avalanche-2", + "cmcId": 5805, + "decimals": 18 + }, + "name": "Fuji", + "chainType": "evm", + "shortName": "Avalanche" + }, + "dvns": { + "0xca5ab7adcd3ea879f1a1c4eee81eaccd250173e4": { + "version": 2, + "canonicalName": "Switchboard", + "id": "switchboard" + }, + "0x8ca279897cde74350bd880737fd60c047d6d3d64": { + "version": 2, + "canonicalName": "Bitgo", + "id": "bitgo" + }, + "0x9f0e79aeb198750f963b6f30b99d87c6ee5a0467": { + "version": 2, + "canonicalName": "LayerZero Labs", + "id": "layerzero-labs" + }, + "0x92cfdb3789693c2ae7225fcc2c263de94d630be4": { + "version": 1, + "canonicalName": "TSS", + "id": "tss" + }, + "0xe0f3389bf8a8aa1576b420d888cd462483fdc2a0": { + "version": 2, + "canonicalName": "Delegate", + "id": "delegate" + }, + "0xfde647565009b33b1df02689d5873bffff15d907": { + "version": 2, + "canonicalName": "Stablelab", + "id": "stablelab" + }, + "0xdbec329a5e6d7fb0113eb0a098750d2afd61e9ae": { + "version": 2, + "canonicalName": "P2P", + "id": "p2p" + }, + "0xefdd92121acb3acd6e2f09dd810752d8da3dfdaf": { + "version": 2, + "canonicalName": "Republic", + "id": "republic-crypto" + }, + "0x071fbf35b35d48afc3edf84f0397980c25531560": { + "version": 2, + "canonicalName": "Gitcoin", + "id": "gitcoin" + }, + "0xa4652582077afc447ea7c9e984d656ee4963fe95": { + "version": 2, + "canonicalName": "Google", + "id": "google-cloud" + }, + "0x7883f83ea40a56137a63baf93bfee5b9b8c1c447": { + "version": 2, + "canonicalName": "Nethermind", + "id": "nethermind" + }, + "0x0d88ab4c8e8f89d8d758cbd5a6373f86f7bd737b": { + "version": 2, + "canonicalName": "BWare", + "id": "bware-labs" + } + }, + "rpcs": [ + { + "url": "https://api.avax-test.network/ext/bc/C/rpc" + }, + { + "url": "https://rpc.ankr.com/avalanche_fuji" + } + ], + "addressToOApp": { + "0x5164db46a18c8680393b6df36c0bcc724078a4d9": { + "id": "shibx", + "canonicalName": "SHIBX" + }, + "0x88fee109bc31132ca518165e4383f927cb140eca": { + "id": "dexalot", + "canonicalName": "Dexalot" + }, + "0xe9e30a0ad0d8af5cf2606ea720052e28d6fcbaaf": { + "id": "holograph", + "canonicalName": "Holograph" + }, + "0xa4125191e017cdf143255371a9e056f83a839b42": { + "id": "beam-bridge", + "canonicalName": "Beam Bridge" + }, + "0xc2b5190c4e766212eb0a7065acb623a4c003a4bc": { + "id": "swapsicle", + "canonicalName": "Swapsicle" + }, + "0xc360540950f50376e20ec3c06a5d93adf2728daf": { + "id": "beam-bridge", + "canonicalName": "Beam Bridge" + }, + "0xfa12ffef9d6f0b3f18c60b3d219b9e5136b81926": { + "id": "tradable", + "canonicalName": "Tradable" + }, + "0x9038f55ca0e2af8c4413bfe2855b912116ee0be7": { + "id": "synthr", + "canonicalName": "SYNTHR" + }, + "0xa67a22d0227a92fb40ed5b4d6aa8ed01e09e4b94": { + "id": "tapiocadao", + "canonicalName": "TapiocaDAO" + }, + "0xd315ead5c0fc0fb87fdb8b1bb48323fb2ad7adaf": { + "id": "tapiocadao", + "canonicalName": "TapiocaDAO" + }, + "0x6f484eacd997d9880205af22f6a4881ea0e1ccd7": { + "id": "holograph", + "canonicalName": "Holograph" + }, + "0x034697223c82c3abec358d0ccd68f5713fc21011": { + "id": "gh0stly-gh0sts", + "canonicalName": "Gh0stly Gh0sts" + }, + "0x225436ba1b4096afb14c374b8d1c6fd666e2fb41": { + "id": "synthr", + "canonicalName": "SYNTHR" + }, + "0x7e562c90c2ad0295e837b2b4a4b42301e19faa33": { + "id": "tapiocadao", + "canonicalName": "TapiocaDAO" + }, + "0x777c19834a1a2ff6353a1e9cfb7c799ed7943a11": { + "id": "holograph", + "canonicalName": "Holograph" + }, + "0xbdb2d676b35ee4ed0862614572e9f375b06c4a9a": { + "id": "orderly-network", + "canonicalName": "Orderly Network" + }, + "0x6175a322e284e6a5ff5f8bcdbe82d30b047e22d4": { + "id": "canto", + "canonicalName": "Canto" + }, + "0x803305930c1bbae396d03f496a7bf53ad7fd4303": { + "id": "holograph", + "canonicalName": "Holograph" + }, + "0xc9de4ee312b90d42e53377a0ca7ffc5c8bf2b490": { + "id": "tapiocadao", + "canonicalName": "TapiocaDAO" + }, + "0x9722c903eb9847bb88cd1e2391105171627ffc61": { + "id": "tapiocadao", + "canonicalName": "TapiocaDAO" + }, + "0x991a8980d07cc48e531727095b7145b662449f9f": { + "id": "hourglass", + "canonicalName": "Hourglass" + }, + "0xa4c2ad773b62e42b577d96865af4608fc77b58f3": { + "id": "hourglass", + "canonicalName": "Hourglass" + }, + "0xeadf4c87fa5ebdc5e925c09e989316199d42f108": { + "id": "volta-club", + "canonicalName": "Volta Club" + }, + "0xb86dd73015590dc0bee11740aec3492727e44953": { + "id": "tapiocadao", + "canonicalName": "TapiocaDAO" + }, + "0x66cdc567924d04e94abaa4d8bbbb33ef73d7713a": { + "id": "beam-bridge", + "canonicalName": "Beam Bridge" + }, + "0xc173624557f5c9b9c682eb82a04e1407d3794da6": { + "id": "lendvest", + "canonicalName": "Lendvest" + }, + "0xa30444b26c171b27c6b3698544490affa2e12119": { + "id": "toinou-oft", + "canonicalName": "TOINOU OFT" + }, + "0xf7a7fbf4edd64c9d0d8ff1149c1229cd38b2a261": { + "id": "tide-exchange", + "canonicalName": "Tide Exchange" + }, + "0xcfa841d8bb654c4c23bf60a39428f170a7035f29": { + "id": "ethenanova-space", + "canonicalName": "Ethenanova Space" + }, + "0x0b0f01f9214680cf1a67efabdd31d8281dc29551": { + "id": "tapiocadao", + "canonicalName": "TapiocaDAO" + }, + "0xc9264255e1ae0cc80ceadd0056c63dc1caed28ad": { + "id": "holograph", + "canonicalName": "Holograph" + }, + "0xdae4fa5e4a831931a94ef865ceb08f3d8640c6a0": { + "id": "beam-bridge", + "canonicalName": "Beam Bridge" + }, + "0xeef44c57d2fe281f5e10592ae2db7f45a463ea3d": { + "id": "betswirl", + "canonicalName": "BetSwirl" + }, + "0x1e9bc397180eb625b28f3464eade1c928df2a33b": { + "id": "tapiocadao", + "canonicalName": "TapiocaDAO" + }, + "0x0936a04505ea9c6ede026c81ec4e3d527388b706": { + "id": "tapiocadao", + "canonicalName": "TapiocaDAO" + }, + "0xb92de63eb7d8a652bf80385906812f92d49c5139": { + "id": "synthr", + "canonicalName": "SYNTHR" + }, + "0xe42bd199bfe8beb3fb0cdcce72bbcd512b2ba35d": { + "id": "beam-bridge", + "canonicalName": "Beam Bridge" + }, + "0x29fbc4e4092db862218c62a888a00f9521619230": { + "id": "stargate", + "canonicalName": "Stargate" + }, + "0x18fac63ab1576141a9163b4d9cf3867123a6cead": { + "id": "hourglass", + "canonicalName": "Hourglass" + }, + "0xf1e06e45913ec0dc5856232e022e0f003c7b2b3f": { + "id": "tutorial", + "canonicalName": "LayerZero Tutorial" + }, + "0x24e77cd450cb18eb71762273412d1a59d6df425b": { + "id": "term-finance", + "canonicalName": "Term Finance" + }, + "0x42443226e8f55f27c5bd4e33a0138f9fd21b0de8": { + "id": "layersync", + "canonicalName": "LayerSync" + }, + "0xc27a0e3e938ea734c379635b0107a8fe7d520f33": { + "id": "synthr", + "canonicalName": "SYNTHR" + }, + "0x40174bf6df1a49d8faa84dd1c6440ab59371116e": { + "id": "swapsicle", + "canonicalName": "Swapsicle" + }, + "0x0b78fd46cfae0ab2d3463ae7a384b81ff6e1bb43": { + "id": "tradable", + "canonicalName": "Tradable" + }, + "0x4a339b39fe35913f8e809949eeff6bc96796820d": { + "id": "layer3", + "canonicalName": "Layer3" + }, + "0x5788ecaa5e93485bb657828580d18790794729e7": { + "id": "hourglass", + "canonicalName": "Hourglass" + }, + "0xbec70f2e023c823442cf2d21b95ea21ff7575267": { + "id": "cashmere", + "canonicalName": "CashmereLabs" + } + }, + "chainName": "avalanche", + "tokens": {}, + "chainKey": "fuji" +} diff --git a/packages/metadata-tools/test/data/solana-mainnet.json b/packages/metadata-tools/test/data/solana-mainnet.json new file mode 100644 index 000000000..36745da49 --- /dev/null +++ b/packages/metadata-tools/test/data/solana-mainnet.json @@ -0,0 +1,117 @@ +{ + "created": "2024-12-12T03:31:22.000Z", + "updated": "2024-12-12T03:31:22.000Z", + "tableName": "layerzero-chain_metadata", + "environment": "mainnet", + "blockExplorers": [ + { + "url": "https://explorer.solana.com" + } + ], + "deployments": [ + { + "eid": "30168", + "chainKey": "solana", + "stage": "mainnet", + "pricefeed": { + "address": "8ahPGPjEbpgGaZx2NV1iG5Shj7TDwvsjkEDcGWjt94TP" + }, + "executor": { + "address": "AwrbHeCyniXaQhiJZkLhgWdUCteeWSGaSN1sTfLiY7xK" + }, + "endpointV2": { + "address": "76y77prsiCMvXMjuoZ5VRrhG5qYBrUMYTE5WgHqgjEn6" + }, + "sendUln302": { + "address": "7a4WjyR8VZ7yZz5XJAKm39BUGn5iT9CKcv2pmG9tdXVH" + }, + "blocked_messagelib": { + "address": "2XrYqmhBMPJgDsb4SVbjV1PnJBprurd5bzRCkHwiFCJB" + }, + "version": 2, + "receiveUln302": { + "address": "7a4WjyR8VZ7yZz5XJAKm39BUGn5iT9CKcv2pmG9tdXVH" + }, + "dvn": { + "address": "HtEYV4xB4wvsj5fgTkcfuChYpvGYzgzwvNhgDZQNh7wW" + } + } + ], + "chainDetails": { + "chainType": "solana", + "chainKey": "solana", + "chainLayer": "L1", + "nativeCurrency": { + "symbol": "SOL", + "cgId": "solana", + "cmcId": 5426, + "decimals": 9 + }, + "cgNetworkId": "solana" + }, + "dvns": { + "4VDjp6XQaxoZf5RGwiPU9NR1EXSZn2TP4ATMmiSzLfhb": { + "version": 2, + "canonicalName": "LayerZero Labs", + "id": "layerzero-labs" + }, + "GPjyWr8vCotGuFubDpTxDxy9Vj1ZeEN4F2dwRmFiaGab": { + "version": 2, + "canonicalName": "Nethermind", + "id": "nethermind" + }, + "4HxXbLv37XrivKukEbofybpHr7C8HUGJzd4B5T9USpGh": { + "version": 2, + "canonicalName": "Paxos", + "id": "paxos" + }, + "HR9NQKK1ynW9NzgdM37dU5CBtqRHTukmbMKS7qkwSkHX": { + "version": 2, + "canonicalName": "Horizen", + "id": "horizen-labs" + }, + "F7gu9kLcpn4bSTZn183mhn2RXUuMy7zckdxJZdUjuALw": { + "version": 2, + "canonicalName": "Google", + "id": "google-cloud" + } + }, + "rpcs": [ + { + "url": "https://api.mainnet-beta.solana.com" + } + ], + "addressToOApp": { + "auvw19qwit2bxzqcspgzlsbq2ziqosvrytnxe8uzsegh": { + "id": "paypal", + "canonicalName": "PayPal" + }, + "4x3oqtx4mhjtkgbexdzbttslz9cuwo5wan2uchauthts": { + "id": "ethena", + "canonicalName": "Ethena" + }, + "2uib9iipugq6rqyapftnydtpdfkaod2hmwpl9s1fs2ew": { + "id": "ox-fun", + "canonicalName": "OX.Fun" + }, + "anq6ibnkc2xayc2goqhnzrsodh2kfqtejj7s3j8je7js": { + "id": "dogwifhat", + "canonicalName": "DogWifHat ($WIF)" + }, + "9su66tvuugjjabajvnmfumz3zzhfrzdrsccxqqd1myaq": { + "id": "metalcore", + "canonicalName": "MetalCore" + }, + "d27yp9ir2uagd8bkbbwrhek6moosqu353njm3svmevxw": { + "id": "ethena", + "canonicalName": "Ethena" + }, + "d2hziynfqns9ygnrodtk7zajkjxc68139niz1mmd8aae": { + "id": "ethena", + "canonicalName": "Ethena" + } + }, + "chainName": "solana", + "tokens": {}, + "chainKey": "solana" +} diff --git a/packages/metadata-tools/test/data/solana-testnet.json b/packages/metadata-tools/test/data/solana-testnet.json new file mode 100644 index 000000000..321fe1619 --- /dev/null +++ b/packages/metadata-tools/test/data/solana-testnet.json @@ -0,0 +1,74 @@ +{ + "created": "2024-12-12T03:31:22.000Z", + "updated": "2024-12-12T03:31:22.000Z", + "tableName": "layerzero-chain_metadata", + "environment": "testnet", + "blockExplorers": [ + { + "url": "https://explorer.solana.com" + } + ], + "deployments": [ + { + "eid": "40168", + "chainKey": "solana-testnet", + "stage": "testnet", + "pricefeed": { + "address": "8ahPGPjEbpgGaZx2NV1iG5Shj7TDwvsjkEDcGWjt94TP" + }, + "executor": { + "address": "AwrbHeCyniXaQhiJZkLhgWdUCteeWSGaSN1sTfLiY7xK" + }, + "endpointV2": { + "address": "76y77prsiCMvXMjuoZ5VRrhG5qYBrUMYTE5WgHqgjEn6" + }, + "sendUln302": { + "address": "7a4WjyR8VZ7yZz5XJAKm39BUGn5iT9CKcv2pmG9tdXVH" + }, + "blocked_messagelib": { + "address": "2XrYqmhBMPJgDsb4SVbjV1PnJBprurd5bzRCkHwiFCJB" + }, + "version": 2, + "receiveUln302": { + "address": "7a4WjyR8VZ7yZz5XJAKm39BUGn5iT9CKcv2pmG9tdXVH" + }, + "dvn": { + "address": "HtEYV4xB4wvsj5fgTkcfuChYpvGYzgzwvNhgDZQNh7wW" + } + } + ], + "chainDetails": { + "chainKey": "solana-testnet", + "nativeChainId": 2, + "chainLayer": "L1", + "nativeCurrency": { + "name": "SOL", + "symbol": "SOL", + "cgId": "solana", + "cmcId": 5426, + "decimals": 9 + }, + "name": "Solana", + "chainType": "solana", + "shortName": "Solana testnet" + }, + "dvns": { + "4VDjp6XQaxoZf5RGwiPU9NR1EXSZn2TP4ATMmiSzLfhb": { + "version": 2, + "canonicalName": "LayerZero Labs", + "id": "layerzero-labs" + }, + "4HxXbLv37XrivKukEbofybpHr7C8HUGJzd4B5T9USpGh": { + "version": 2, + "canonicalName": "Paxos", + "id": "paxos" + } + }, + "rpcs": [ + { + "url": "https://api.devnet.solana.com" + } + ], + "chainName": "solana", + "chainKey": "solana-testnet" +} diff --git a/packages/metadata-tools/tsconfig.json b/packages/metadata-tools/tsconfig.json new file mode 100644 index 000000000..76ada60be --- /dev/null +++ b/packages/metadata-tools/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.json", + "exclude": ["dist", "node_modules"], + "include": ["src", "test", "*.config.ts"], + "compilerOptions": { + "module": "commonjs", + "types": ["node", "jest"], + "paths": { + "@/*": ["./src/*"] + } + }, + "files": [] +} diff --git a/packages/metadata-tools/tsup.config.ts b/packages/metadata-tools/tsup.config.ts new file mode 100644 index 000000000..ff3c6da84 --- /dev/null +++ b/packages/metadata-tools/tsup.config.ts @@ -0,0 +1,17 @@ +import { defineConfig } from 'tsup' + +export default defineConfig([ + { + entry: ['src/index.ts', 'src/type-extensions.ts', 'src/tasks/index.ts'], + outDir: './dist', + clean: true, + dts: true, + sourcemap: true, + splitting: false, + treeshake: true, + format: ['esm', 'cjs'], + loader: { + '.conf': 'text', + }, + }, +]) diff --git a/packages/toolbox-hardhat/types/index.d.ts b/packages/toolbox-hardhat/types/index.d.ts index 7558145da..69566b51a 100644 --- a/packages/toolbox-hardhat/types/index.d.ts +++ b/packages/toolbox-hardhat/types/index.d.ts @@ -19,6 +19,7 @@ export type { // We also re-export all the relevant types from ua-devtools export type { OwnableNodeConfig, + OAppEnforcedOption, OAppReceiveConfig, OAppReceiveLibraryConfig, OAppSendConfig, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b5a4edb7f..38bffa64b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1544,7 +1544,7 @@ importers: version: 10.9.2(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3) tsup: specifier: ~8.0.1 - version: 8.0.1(ts-node@10.9.2)(typescript@5.5.3) + version: 8.0.1(@swc/core@1.4.0)(ts-node@10.9.2)(typescript@5.5.3) typescript: specifier: ^5.4.4 version: 5.5.3 @@ -1678,7 +1678,7 @@ importers: version: 10.9.2(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3) tsup: specifier: ~8.0.1 - version: 8.0.1(ts-node@10.9.2)(typescript@5.5.3) + version: 8.0.1(@swc/core@1.4.0)(ts-node@10.9.2)(typescript@5.5.3) typescript: specifier: ^5.4.4 version: 5.5.3 @@ -1791,7 +1791,7 @@ importers: version: 10.9.2(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3) tsup: specifier: ~8.0.1 - version: 8.0.1(ts-node@10.9.2)(typescript@5.5.3) + version: 8.0.1(@swc/core@1.4.0)(ts-node@10.9.2)(typescript@5.5.3) typescript: specifier: ^5.4.4 version: 5.5.3 @@ -2233,6 +2233,36 @@ importers: specifier: ^3.22.4 version: 3.22.4 + packages/metadata-tools: + devDependencies: + '@layerzerolabs/devtools-evm-hardhat': + specifier: ~2.0.3 + version: link:../devtools-evm-hardhat + '@layerzerolabs/ua-devtools': + specifier: ~3.0.1 + version: link:../ua-devtools + '@swc/core': + specifier: ^1.4.0 + version: 1.4.0 + '@swc/jest': + specifier: ^0.2.36 + version: 0.2.36(@swc/core@1.4.0) + '@types/jest': + specifier: ^29.5.12 + version: 29.5.12 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.18.14)(ts-node@10.9.2) + tslib: + specifier: ~2.6.2 + version: 2.6.3 + tsup: + specifier: ~8.0.1 + version: 8.0.1(@swc/core@1.4.0)(typescript@5.5.3) + typescript: + specifier: ^5.4.4 + version: 5.5.3 + packages/oapp-alt-evm: dependencies: ethers: @@ -2781,7 +2811,7 @@ importers: version: 2.6.2 tsup: specifier: ~8.0.1 - version: 8.0.1(ts-node@10.9.2)(typescript@5.5.3) + version: 8.0.1(@swc/core@1.4.0)(ts-node@10.9.2)(typescript@5.5.3) typescript: specifier: ^5.4.4 version: 5.5.3 @@ -2863,7 +2893,7 @@ importers: version: 2.6.2 tsup: specifier: ~8.0.1 - version: 8.0.1(ts-node@10.9.2)(typescript@5.5.3) + version: 8.0.1(@swc/core@1.4.0)(ts-node@10.9.2)(typescript@5.5.3) typescript: specifier: ^5.4.4 version: 5.5.3 @@ -2887,7 +2917,7 @@ importers: version: 2.6.3 tsup: specifier: ~8.0.1 - version: 8.0.1(ts-node@10.9.2)(typescript@5.5.3) + version: 8.0.1(@swc/core@1.4.0)(ts-node@10.9.2)(typescript@5.5.3) typescript: specifier: ^5.4.4 version: 5.5.3 @@ -3908,7 +3938,7 @@ importers: version: 2.6.2 tsup: specifier: ~8.0.1 - version: 8.0.1(ts-node@10.9.2)(typescript@5.5.3) + version: 8.0.1(@swc/core@1.4.0)(ts-node@10.9.2)(typescript@5.5.3) typescript: specifier: ^5.4.4 version: 5.5.3 @@ -13276,7 +13306,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -18366,46 +18396,7 @@ packages: bundle-require: 4.0.2(esbuild@0.19.11) cac: 6.7.14 chokidar: 3.6.0 - debug: 4.3.5 - esbuild: 0.19.11 - execa: 5.1.1 - globby: 11.1.0 - joycon: 3.1.1 - postcss-load-config: 4.0.2(ts-node@10.9.2) - resolve-from: 5.0.0 - rollup: 4.9.6 - source-map: 0.8.0-beta.0 - sucrase: 3.35.0 - tree-kill: 1.2.2 - typescript: 5.5.3 - transitivePeerDependencies: - - supports-color - - ts-node - dev: true - - /tsup@8.0.1(ts-node@10.9.2)(typescript@5.5.3): - resolution: {integrity: sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true - dependencies: - bundle-require: 4.0.2(esbuild@0.19.11) - cac: 6.7.14 - chokidar: 3.6.0 - debug: 4.3.5 + debug: 4.3.7 esbuild: 0.19.11 execa: 5.1.1 globby: 11.1.0 diff --git a/turbo.json b/turbo.json index 95af4caa5..0565ae9a3 100644 --- a/turbo.json +++ b/turbo.json @@ -53,6 +53,7 @@ "LZ_ENABLE_NATIVE_EXAMPLE", "LZ_ENABLE_MINTBURN_EXAMPLE", "LZ_ENABLE_UPGRADEABLE_EXAMPLE", + "LZ_METADATA_URL", "LAYERZERO_EXAMPLES_REPOSITORY_URL", "LAYERZERO_EXAMPLES_REPOSITORY_REF", From e2cabc5f7ae681eac23c13bc4ce098424682d493 Mon Sep 17 00:00:00 2001 From: Matthew Krak Date: Thu, 12 Dec 2024 11:50:42 -0800 Subject: [PATCH 16/24] =?UTF-8?q?=F0=9F=A7=B9=20Remove=20experimental=20fl?= =?UTF-8?q?ag=20from=20solana=20oft=20example=20(#1128)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/oft-solana/README.md | 2 +- packages/create-lz-oapp/src/config.ts | 2 +- packages/create-lz-oapp/test/config.test.ts | 8 ++++---- tests-user/tests/create-lz-oapp.bats | 6 +++--- turbo.json | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/oft-solana/README.md b/examples/oft-solana/README.md index 89ae03ff3..3743a997b 100644 --- a/examples/oft-solana/README.md +++ b/examples/oft-solana/README.md @@ -50,7 +50,7 @@ cargo install --git https://github.com/coral-xyz/anchor --tag v0.29.0 anchor-cli ### Get the code ```bash -LZ_ENABLE_EXPERIMENTAL_SOLANA_OFT_EXAMPLE=1 npx create-lz-oapp@latest +LZ_ENABLE_SOLANA_OFT_EXAMPLE=1 npx create-lz-oapp@latest ``` ### Installing Dependencies diff --git a/packages/create-lz-oapp/src/config.ts b/packages/create-lz-oapp/src/config.ts index a0676eee4..5fde2c4d8 100644 --- a/packages/create-lz-oapp/src/config.ts +++ b/packages/create-lz-oapp/src/config.ts @@ -100,7 +100,7 @@ export const getExamples = (): Example[] => { ] : []), // The Solana OFT example is feature flagged for the time being - ...(process.env.LZ_ENABLE_EXPERIMENTAL_SOLANA_OFT_EXAMPLE + ...(process.env.LZ_ENABLE_SOLANA_OFT_EXAMPLE ? [ { id: 'oft-solana', diff --git a/packages/create-lz-oapp/test/config.test.ts b/packages/create-lz-oapp/test/config.test.ts index 6bf8d2e02..4d40a5bde 100644 --- a/packages/create-lz-oapp/test/config.test.ts +++ b/packages/create-lz-oapp/test/config.test.ts @@ -40,14 +40,14 @@ describe('config', () => { examples.forEach((example) => expect(example).toMatchObject({ ref: 'ohhello' })) }) - it('should not include Solana OFT example if LZ_ENABLE_EXPERIMENTAL_SOLANA_OFT_EXAMPLE is empty', () => { - process.env.LZ_ENABLE_EXPERIMENTAL_SOLANA_OFT_EXAMPLE = '' + it('should not include Solana OFT example if LZ_ENABLE_SOLANA_OFT_EXAMPLE is empty', () => { + process.env.LZ_ENABLE_SOLANA_OFT_EXAMPLE = '' expect(getExamples()).not.toContainEqual(expect.objectContaining({ id: 'oft-solana' })) }) - it('should include Solana OFT example if LZ_ENABLE_EXPERIMENTAL_SOLANA_OFT_EXAMPLE is defined', () => { - process.env.LZ_ENABLE_EXPERIMENTAL_SOLANA_OFT_EXAMPLE = 'yes' + it('should include Solana OFT example if LZ_ENABLE_SOLANA_OFT_EXAMPLE is defined', () => { + process.env.LZ_ENABLE_SOLANA_OFT_EXAMPLE = 'yes' expect(getExamples()).toContainEqual(expect.objectContaining({ id: 'oft-solana' })) }) diff --git a/tests-user/tests/create-lz-oapp.bats b/tests-user/tests/create-lz-oapp.bats index 4f9329310..10a99d460 100644 --- a/tests-user/tests/create-lz-oapp.bats +++ b/tests-user/tests/create-lz-oapp.bats @@ -183,7 +183,7 @@ teardown() { @test "should work with pnpm & oft solana example in CI mode" { local DESTINATION="$PROJECTS_DIRECTORY/pnpm-oft-solana" - LZ_ENABLE_EXPERIMENTAL_SOLANA_OFT_EXAMPLE=1 npx --yes create-lz-oapp --ci --example oft-solana --destination $DESTINATION --package-manager pnpm + LZ_ENABLE_SOLANA_OFT_EXAMPLE=1 npx --yes create-lz-oapp --ci --example oft-solana --destination $DESTINATION --package-manager pnpm cd "$DESTINATION" pnpm compile pnpm test @@ -267,7 +267,7 @@ teardown() { @test "should work with yarn & oft solana example in CI mode" { local DESTINATION="$PROJECTS_DIRECTORY/yarn-oft-solana" - YARN_CACHE_FOLDER="/tmp/.yarn-cache-oft-solana" LZ_ENABLE_EXPERIMENTAL_SOLANA_OFT_EXAMPLE=1 npx --yes create-lz-oapp --ci --example oft-solana --destination $DESTINATION --package-manager yarn + YARN_CACHE_FOLDER="/tmp/.yarn-cache-oft-solana" LZ_ENABLE_SOLANA_OFT_EXAMPLE=1 npx --yes create-lz-oapp --ci --example oft-solana --destination $DESTINATION --package-manager yarn cd "$DESTINATION" yarn compile yarn test @@ -351,7 +351,7 @@ teardown() { @test "should work with npm & oft solana example in CI mode" { local DESTINATION="$PROJECTS_DIRECTORY/npm-oft-solana" - LZ_ENABLE_EXPERIMENTAL_SOLANA_OFT_EXAMPLE=1 npx --yes create-lz-oapp --ci --example oft-solana --destination $DESTINATION --package-manager npm + LZ_ENABLE_SOLANA_OFT_EXAMPLE=1 npx --yes create-lz-oapp --ci --example oft-solana --destination $DESTINATION --package-manager npm cd "$DESTINATION" npm run compile npm run test diff --git a/turbo.json b/turbo.json index 0565ae9a3..8cbb8d93c 100644 --- a/turbo.json +++ b/turbo.json @@ -47,7 +47,7 @@ "LZ_ENABLE_EXPERIMENTAL_PARALLEL_EXECUTION", "LZ_ENABLE_EXPERIMENTAL_RETRY", "LZ_ENABLE_EXPERIMENTAL_SIMULATION", - "LZ_ENABLE_EXPERIMENTAL_SOLANA_OFT_EXAMPLE", + "LZ_ENABLE_SOLANA_OFT_EXAMPLE", "LZ_ENABLE_READ_EXAMPLE", "LZ_ENABLE_ZKSOLC_EXAMPLE", "LZ_ENABLE_NATIVE_EXAMPLE", From 1d2abff2d6c105f65533ba02dbf5c79c33279ba9 Mon Sep 17 00:00:00 2001 From: Kai Stevenson <49915667+KaiStevenson@users.noreply.github.com> Date: Thu, 12 Dec 2024 16:34:07 -0800 Subject: [PATCH 17/24] =?UTF-8?q?=F0=9F=A7=B9=20Update=20devtools-ton=20(#?= =?UTF-8?q?1129)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/three-cups-march.md | 37 +++ Dockerfile | 2 +- examples/mint-burn-oft-adapter/package.json | 2 +- examples/native-oft-adapter/package.json | 2 +- examples/oapp-read/package.json | 2 +- examples/oapp/package.json | 2 +- examples/oft-adapter/package.json | 2 +- examples/oft-solana/package.json | 4 +- examples/oft-upgradeable/package.json | 2 +- examples/oft/package.json | 2 +- examples/onft721-zksync/package.json | 2 +- examples/onft721/package.json | 2 +- examples/uniswap-read/package.json | 2 +- packages/build-lz-options/package.json | 2 +- packages/create-lz-oapp/package.json | 2 +- packages/decode-lz-options/package.json | 2 +- packages/devtools-cli/package.json | 2 +- packages/devtools-evm-hardhat/package.json | 8 +- packages/devtools-evm/package.json | 8 +- packages/devtools-solana/package.json | 8 +- packages/devtools-ton/jest.config.ts | 2 +- packages/devtools-ton/package.json | 20 +- .../devtools-ton/src/getDeploymentAddress.ts | 101 ++++++++ packages/devtools-ton/src/index.ts | 2 + .../devtools-ton/src/omnigraph/coordinates.ts | 42 +++ packages/devtools-ton/src/omnigraph/index.ts | 3 + packages/devtools-ton/src/omnigraph/sdk.ts | 29 +++ packages/devtools-ton/src/omnigraph/types.ts | 4 + .../devtools-ton/src/transactions/serde.ts | 18 ++ .../devtools-ton/src/transactions/signer.ts | 33 +-- .../test/transactions/serde.test.ts | 41 +++ .../test/transactions/signer.test.ts | 11 +- packages/devtools-ton/tsconfig.json | 2 + packages/devtools/package.json | 8 +- .../__snapshots__/format.test.ts.snap | 48 ++++ packages/export-deployments/package.json | 2 +- .../omnicounter-devtools-evm/package.json | 4 +- packages/omnicounter-devtools/package.json | 4 +- packages/protocol-devtools-evm/package.json | 8 +- .../protocol-devtools-solana/package.json | 8 +- packages/protocol-devtools/package.json | 4 +- packages/test-devtools/package.json | 4 +- packages/toolbox-hardhat/package.json | 4 +- packages/ua-devtools-evm-hardhat/package.json | 8 +- packages/ua-devtools-evm/package.json | 8 +- packages/ua-devtools-solana/package.json | 8 +- packages/ua-devtools/package.json | 8 +- pnpm-lock.yaml | 244 +++++++++--------- tests/devtools-cli-test/package.json | 4 +- tests/devtools-evm-hardhat-test/package.json | 4 +- tests/devtools-evm-test/package.json | 2 +- tests/export-deployments-test/package.json | 2 +- .../package.json | 6 +- .../ua-devtools-evm-hardhat-test/package.json | 4 +- .../package.json | 4 +- 55 files changed, 572 insertions(+), 227 deletions(-) create mode 100644 .changeset/three-cups-march.md create mode 100644 packages/devtools-ton/src/getDeploymentAddress.ts create mode 100644 packages/devtools-ton/src/omnigraph/coordinates.ts create mode 100644 packages/devtools-ton/src/omnigraph/index.ts create mode 100644 packages/devtools-ton/src/omnigraph/sdk.ts create mode 100644 packages/devtools-ton/src/omnigraph/types.ts diff --git a/.changeset/three-cups-march.md b/.changeset/three-cups-march.md new file mode 100644 index 000000000..6ba0e4898 --- /dev/null +++ b/.changeset/three-cups-march.md @@ -0,0 +1,37 @@ +--- +"@layerzerolabs/devtools-ton": minor +"@layerzerolabs/test-setup-devtools-evm-hardhat": patch +"@layerzerolabs/ua-devtools-evm-hardhat-v1-test": patch +"@layerzerolabs/ua-devtools-evm-hardhat-test": patch +"@layerzerolabs/omnicounter-devtools-evm": patch +"@layerzerolabs/protocol-devtools-solana": patch +"@layerzerolabs/ua-devtools-evm-hardhat": patch +"@layerzerolabs/devtools-evm-hardhat-test": patch +"@layerzerolabs/mint-burn-oft-adapter-example": patch +"@layerzerolabs/protocol-devtools-evm": patch +"@layerzerolabs/devtools-evm-hardhat": patch +"@layerzerolabs/omnicounter-devtools": patch +"@layerzerolabs/native-oft-adapter-example": patch +"@layerzerolabs/ua-devtools-solana": patch +"@layerzerolabs/protocol-devtools": patch +"@layerzerolabs/oft-upgradeable-example": patch +"@layerzerolabs/devtools-solana": patch +"@layerzerolabs/toolbox-hardhat": patch +"@layerzerolabs/ua-devtools-evm": patch +"@layerzerolabs/onft721-zksync-example": patch +"@layerzerolabs/devtools-cli-test": patch +"@layerzerolabs/devtools-evm-test": patch +"@layerzerolabs/test-devtools": patch +"@layerzerolabs/uniswap-read-example": patch +"@layerzerolabs/devtools-evm": patch +"@layerzerolabs/oft-adapter-example": patch +"@layerzerolabs/ua-devtools": patch +"@layerzerolabs/oft-solana-example": patch +"@layerzerolabs/oapp-read-example": patch +"@layerzerolabs/devtools": patch +"@layerzerolabs/onft721-example": patch +"@layerzerolabs/oapp-example": patch +"@layerzerolabs/oft-example": patch +--- + +new SDK methods, tests in devtools-ton, upgraded lz-definitions diff --git a/Dockerfile b/Dockerfile index 16d05ba9c..2c1ea2656 100644 --- a/Dockerfile +++ b/Dockerfile @@ -85,7 +85,7 @@ RUN apt-get install --yes \ libatomic1 libssl-dev # Install rust -ARG RUST_TOOLCHAIN_VERSION=1.75.0 +ARG RUST_TOOLCHAIN_VERSION=1.83.0 RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain ${RUST_TOOLCHAIN_VERSION} # Install docker diff --git a/examples/mint-burn-oft-adapter/package.json b/examples/mint-burn-oft-adapter/package.json index c0e207272..c3f3af76d 100644 --- a/examples/mint-burn-oft-adapter/package.json +++ b/examples/mint-burn-oft-adapter/package.json @@ -23,7 +23,7 @@ "devDependencies": { "@babel/core": "^7.23.9", "@layerzerolabs/eslint-config-next": "~2.3.39", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", diff --git a/examples/native-oft-adapter/package.json b/examples/native-oft-adapter/package.json index 361f9694d..f682d19fc 100644 --- a/examples/native-oft-adapter/package.json +++ b/examples/native-oft-adapter/package.json @@ -23,7 +23,7 @@ "devDependencies": { "@babel/core": "^7.23.9", "@layerzerolabs/eslint-config-next": "~2.3.39", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", diff --git a/examples/oapp-read/package.json b/examples/oapp-read/package.json index 25322560b..f7d99188f 100644 --- a/examples/oapp-read/package.json +++ b/examples/oapp-read/package.json @@ -23,7 +23,7 @@ "devDependencies": { "@babel/core": "^7.23.9", "@layerzerolabs/eslint-config-next": "~2.3.39", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", diff --git a/examples/oapp/package.json b/examples/oapp/package.json index aca31a2fb..ff48a5fa2 100644 --- a/examples/oapp/package.json +++ b/examples/oapp/package.json @@ -23,7 +23,7 @@ "devDependencies": { "@babel/core": "^7.23.9", "@layerzerolabs/eslint-config-next": "~2.3.39", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", diff --git a/examples/oft-adapter/package.json b/examples/oft-adapter/package.json index f42f490de..86a06dafa 100644 --- a/examples/oft-adapter/package.json +++ b/examples/oft-adapter/package.json @@ -23,7 +23,7 @@ "devDependencies": { "@babel/core": "^7.23.9", "@layerzerolabs/eslint-config-next": "~2.3.39", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", diff --git a/examples/oft-solana/package.json b/examples/oft-solana/package.json index 52fa708ff..1539898fb 100644 --- a/examples/oft-solana/package.json +++ b/examples/oft-solana/package.json @@ -29,8 +29,8 @@ "@layerzerolabs/devtools-evm-hardhat": "^2.0.3", "@layerzerolabs/devtools-solana": "~1.0.2", "@layerzerolabs/eslint-config-next": "~2.3.39", - "@layerzerolabs/io-devtools": "~0.1.11", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", diff --git a/examples/oft-upgradeable/package.json b/examples/oft-upgradeable/package.json index 71ac4babb..f105e2bbe 100644 --- a/examples/oft-upgradeable/package.json +++ b/examples/oft-upgradeable/package.json @@ -24,7 +24,7 @@ "@babel/core": "^7.23.9", "@layerzerolabs/devtools-evm-hardhat": "^2.0.3", "@layerzerolabs/eslint-config-next": "~2.3.39", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-sdk-v2": "^3.0.21", diff --git a/examples/oft/package.json b/examples/oft/package.json index 1ef97f6dc..10c14209a 100644 --- a/examples/oft/package.json +++ b/examples/oft/package.json @@ -24,7 +24,7 @@ "@babel/core": "^7.23.9", "@layerzerolabs/devtools-evm-hardhat": "^2.0.3", "@layerzerolabs/eslint-config-next": "~2.3.39", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", diff --git a/examples/onft721-zksync/package.json b/examples/onft721-zksync/package.json index c3744309f..f62501638 100644 --- a/examples/onft721-zksync/package.json +++ b/examples/onft721-zksync/package.json @@ -24,7 +24,7 @@ "devDependencies": { "@babel/core": "^7.23.9", "@layerzerolabs/eslint-config-next": "~2.3.39", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", diff --git a/examples/onft721/package.json b/examples/onft721/package.json index 4e1231847..5f7bae834 100644 --- a/examples/onft721/package.json +++ b/examples/onft721/package.json @@ -22,7 +22,7 @@ "devDependencies": { "@babel/core": "^7.23.9", "@layerzerolabs/eslint-config-next": "~2.3.39", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", diff --git a/examples/uniswap-read/package.json b/examples/uniswap-read/package.json index 6a7cd56a2..e8cbdfa3e 100644 --- a/examples/uniswap-read/package.json +++ b/examples/uniswap-read/package.json @@ -23,7 +23,7 @@ "devDependencies": { "@babel/core": "^7.23.9", "@layerzerolabs/eslint-config-next": "~2.3.39", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", diff --git a/packages/build-lz-options/package.json b/packages/build-lz-options/package.json index a092203c5..b8c6facfb 100644 --- a/packages/build-lz-options/package.json +++ b/packages/build-lz-options/package.json @@ -36,7 +36,7 @@ "@ethersproject/address": "~5.7.0", "@layerzerolabs/devtools": "~0.4.0", "@layerzerolabs/devtools-evm": "~1.0.0", - "@layerzerolabs/io-devtools": "~0.1.12", + "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@types/prompts": "^2.4.9", "@types/react": "^17.0.74", diff --git a/packages/create-lz-oapp/package.json b/packages/create-lz-oapp/package.json index 694e79a97..e0fca7f52 100644 --- a/packages/create-lz-oapp/package.json +++ b/packages/create-lz-oapp/package.json @@ -33,7 +33,7 @@ "yoga-layout-prebuilt": "^1.10.0" }, "devDependencies": { - "@layerzerolabs/io-devtools": "~0.1.12", + "@layerzerolabs/io-devtools": "~0.1.14", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", "@types/jest": "^29.5.12", diff --git a/packages/decode-lz-options/package.json b/packages/decode-lz-options/package.json index fc323b43b..746ccea04 100644 --- a/packages/decode-lz-options/package.json +++ b/packages/decode-lz-options/package.json @@ -36,7 +36,7 @@ "@ethersproject/address": "~5.7.0", "@layerzerolabs/devtools": "~0.4.0", "@layerzerolabs/devtools-evm": "~1.0.0", - "@layerzerolabs/io-devtools": "~0.1.12", + "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@types/prompts": "^2.4.9", "@types/react": "^17.0.74", diff --git a/packages/devtools-cli/package.json b/packages/devtools-cli/package.json index 31b81bed7..1c5753049 100644 --- a/packages/devtools-cli/package.json +++ b/packages/devtools-cli/package.json @@ -44,7 +44,7 @@ }, "devDependencies": { "@layerzerolabs/devtools": "~0.4.0", - "@layerzerolabs/io-devtools": "~0.1.12", + "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/ua-devtools": "~3.0.0", "@types/prompts": "^2.4.9", "@types/react": "^17.0.74", diff --git a/packages/devtools-evm-hardhat/package.json b/packages/devtools-evm-hardhat/package.json index cf1f2cd40..9f664a755 100644 --- a/packages/devtools-evm-hardhat/package.json +++ b/packages/devtools-evm-hardhat/package.json @@ -57,8 +57,8 @@ "@ethersproject/wallet": "^5.7.0", "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/io-devtools": "~0.1.13", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-sdk-v1": "^3.0.12", "@layerzerolabs/test-devtools": "~0.4.1", "@layerzerolabs/test-devtools-evm-hardhat": "~0.5.0", @@ -85,8 +85,8 @@ "@ethersproject/providers": "^5.7.0", "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/io-devtools": "~0.1.13", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@nomiclabs/hardhat-ethers": "^2.2.3", "fp-ts": "^2.16.2", "hardhat": "^2.22.10", diff --git a/packages/devtools-evm/package.json b/packages/devtools-evm/package.json index 40d906b2a..eea090106 100644 --- a/packages/devtools-evm/package.json +++ b/packages/devtools-evm/package.json @@ -51,8 +51,8 @@ "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/test-devtools": "~0.4.1", "@safe-global/safe-core-sdk-types": "^2.3.0", "@swc/core": "^1.4.0", @@ -78,8 +78,8 @@ "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.0", "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "fp-ts": "^2.16.2", "zod": "^3.22.4" }, diff --git a/packages/devtools-solana/package.json b/packages/devtools-solana/package.json index 67e377553..6e72861c5 100644 --- a/packages/devtools-solana/package.json +++ b/packages/devtools-solana/package.json @@ -43,8 +43,8 @@ }, "devDependencies": { "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/test-devtools": "~0.4.1", "@layerzerolabs/test-devtools-solana": "~0.0.4", "@solana/web3.js": "~1.95.8", @@ -66,8 +66,8 @@ }, "peerDependencies": { "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@solana/web3.js": "^1.95.8", "bn.js": "^5.2.0", "fp-ts": "^2.16.2", diff --git a/packages/devtools-ton/jest.config.ts b/packages/devtools-ton/jest.config.ts index bbb53d8eb..c34739457 100644 --- a/packages/devtools-ton/jest.config.ts +++ b/packages/devtools-ton/jest.config.ts @@ -4,13 +4,13 @@ const config: Config = { cache: false, reporters: [['github-actions', { silent: false }], 'default'], testEnvironment: 'node', - testTimeout: 60_000, moduleNameMapper: { '^@/(.*)$': '/src/$1', }, transform: { '^.+\\.(t|j)sx?$': '@swc/jest', }, + testTimeout: 60_000, } export default config diff --git a/packages/devtools-ton/package.json b/packages/devtools-ton/package.json index a34dcb6dc..c5f10c4f6 100644 --- a/packages/devtools-ton/package.json +++ b/packages/devtools-ton/package.json @@ -31,15 +31,19 @@ "lint:fix": "eslint --fix '**/*.{js,ts,json}'", "test": "jest --ci" }, + "dependencies": { + "@ton/core": "^0.59.0", + "@ton/crypto": "^3.3.0", + "@ton/ton": "^15.1.0", + "p-memoize": "~4.0.4" + }, "devDependencies": { "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/io-devtools": "~0.1.13", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", + "@layerzerolabs/lz-ton-sdk-v2": "^3.0.27", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", - "@ton/core": "^0.59.0", - "@ton/crypto": "^3.3.0", - "@ton/ton": "^15.1.0", "@types/jest": "^29.5.12", "fast-check": "^3.16.0", "jest": "^29.7.0", @@ -47,12 +51,12 @@ "ts-node": "^10.9.2", "tslib": "~2.6.2", "tsup": "~8.0.1", - "typescript": "^5.4.4" + "typescript": "^5.3.3" }, "peerDependencies": { "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/io-devtools": "~0.1.13", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@ton/core": "^0.59.0", "@ton/crypto": "^3.3.0", "@ton/ton": "^15.1.0" diff --git a/packages/devtools-ton/src/getDeploymentAddress.ts b/packages/devtools-ton/src/getDeploymentAddress.ts new file mode 100644 index 000000000..6371af8af --- /dev/null +++ b/packages/devtools-ton/src/getDeploymentAddress.ts @@ -0,0 +1,101 @@ +// TODO: Maybe use Stage or Environment imported +export type EnvironmentName = 'sandbox' | 'localnet' | 'local' | 'testnet' | 'mainnet' +export type TonDeployment = { + name: ContractName + network: string + address: string + compatibleVersions: string[] + deployer: string +} +type ContractName = + | 'AllStorages' + | 'Controller' + | 'Counter' + | 'Dvn' + | 'DvnProxy' + | 'Executor' + | 'ExecutorProxy' + | 'PriceFeedCache' + | 'PriceFeedCacheProxy' + | 'SmlManager' + | 'UlnManager' +const DEFAULT_PATH = '@layerzerolabs/lz-ton-sdk-v2/deployments' + +const envToFolder = (env: EnvironmentName) => { + switch (env) { + case 'sandbox': + case 'localnet': + case 'local': + return 'ton-sandbox-local' + case 'testnet': + return 'ton-testnet' + case 'mainnet': + return 'ton-mainnet' + } +} + +const envToFolderFallback = (env: EnvironmentName) => { + switch (env) { + case 'sandbox': + case 'localnet': + case 'local': + return 'ton-localnet' + case 'testnet': + return 'ton-testnet' + case 'mainnet': + return 'ton-mainnet' + } +} + +/** + * + * @param env The environment name for which to fetch the deployment + * @param name The name of the contract to fetch + * @returns A deployment record + */ +export const getDeployment = (env: EnvironmentName, name: ContractName): TonDeployment => { + try { + // eslint-disable-next-line @typescript-eslint/no-var-requires + return require(`${DEFAULT_PATH}/${envToFolder(env)}/${name}.json`) as TonDeployment + } catch (e) { + // eslint-disable-next-line @typescript-eslint/no-var-requires + return require(`${DEFAULT_PATH}/${envToFolderFallback(env)}/${name}.json`) as TonDeployment + } +} +/** + * + * @param env The environment name for which to fetch the deployment + * @param name The name of the contract to fetch + * @param packageName The name of the package in which the deployment is located + * @returns A deployment record + */ +export const getDeploymentFromPackage = (env: EnvironmentName, name: string, packageName: string): TonDeployment => { + try { + // eslint-disable-next-line @typescript-eslint/no-var-requires + return require(`@layerzerolabs/${packageName}/deployments/${envToFolder(env)}/${name}.json`) as TonDeployment + } catch (e) { + // eslint-disable-next-line @typescript-eslint/no-var-requires + return require( + `@layerzerolabs/${packageName}/deployments/${envToFolderFallback(env)}/${name}.json` + ) as TonDeployment + } +} + +/** + * + * @param env The environment name for which to fetch the address + * @param name The name of the contract to fetch the address from + * @returns A deployed contract address + */ +export const getDeploymentAddress = (env: EnvironmentName, name: ContractName): string => + getDeployment(env, name).address + +/** + * + * @param env The environment name for which to fetch the address + * @param name The name of the contract to fetch the address from + * @param packageName The name of the package in which the deployment is located + * @returns A deployed contract address + */ +export const getDeploymentAddressFromPackage = (env: EnvironmentName, name: string, packageName: string): string => + getDeploymentFromPackage(env, name, packageName).address diff --git a/packages/devtools-ton/src/index.ts b/packages/devtools-ton/src/index.ts index 880b550c4..3fb90973a 100644 --- a/packages/devtools-ton/src/index.ts +++ b/packages/devtools-ton/src/index.ts @@ -1 +1,3 @@ export * from './transactions' +export * from './omnigraph' +export * from './getDeploymentAddress' diff --git a/packages/devtools-ton/src/omnigraph/coordinates.ts b/packages/devtools-ton/src/omnigraph/coordinates.ts new file mode 100644 index 000000000..3d7fd0ae6 --- /dev/null +++ b/packages/devtools-ton/src/omnigraph/coordinates.ts @@ -0,0 +1,42 @@ +import { TonClient } from '@ton/ton' +import pMemoize from 'p-memoize' + +import { formatEid, OmniPoint, type RpcUrlFactory } from '@layerzerolabs/devtools' +import { ChainType, EndpointId, endpointIdToChainType } from '@layerzerolabs/lz-definitions' + +import { TonClientFactory } from './types' + +export const isOmniPointOnTon = ({ eid }: OmniPoint): boolean => endpointIdToChainType(eid) === ChainType.TON + +export const defaultRpcUrlFactory: RpcUrlFactory = (eid) => { + switch (eid) { + case EndpointId.TON_V2_MAINNET: + return 'https://toncenter.com/api/v2/' + case EndpointId.TON_V2_TESTNET: + return 'https://testnet.toncenter.com/api/v2/' + } + + throw new Error(`Could not find a default TON RPC URL for eid ${eid} (${formatEid(eid)})`) +} + +/** + * Creates a TON RPC URL factory with the ability to specify overrides + * for specific `EndpointId`s. + * + * This is a convenience method for when custom RPC URLs can be provided, e.g. + * from environment variables. + * + * ``` + * const rpcUrlFactory = createRpcUrlFactory({ [EndpointId.TON_V2_MAINNET]: process.env.NETWORK_URL_TON_MAINNET }) + * ``` + * + * @param {Partial>} [overrides] An object mapping `EndpointId`s to RPC URLs. + * @returns {RpcUrlFactory} + */ +export const createRpcUrlFactory = + (overrides: Partial> = {}): RpcUrlFactory => + (eid) => + overrides[eid] ?? defaultRpcUrlFactory(eid) + +export const createTonClientFactory = (urlFactory: RpcUrlFactory = defaultRpcUrlFactory): TonClientFactory => + pMemoize(async (eid) => new TonClient({ endpoint: await urlFactory(eid) })) diff --git a/packages/devtools-ton/src/omnigraph/index.ts b/packages/devtools-ton/src/omnigraph/index.ts new file mode 100644 index 000000000..02b48ea20 --- /dev/null +++ b/packages/devtools-ton/src/omnigraph/index.ts @@ -0,0 +1,3 @@ +export * from './coordinates' +export * from './sdk' +export * from './types' diff --git a/packages/devtools-ton/src/omnigraph/sdk.ts b/packages/devtools-ton/src/omnigraph/sdk.ts new file mode 100644 index 000000000..8a22c9982 --- /dev/null +++ b/packages/devtools-ton/src/omnigraph/sdk.ts @@ -0,0 +1,29 @@ +import { formatOmniPoint, type OmniPoint, type OmniTransaction, IOmniSDK } from '@layerzerolabs/devtools' +import { Logger, createModuleLogger } from '@layerzerolabs/io-devtools' +import { TonClient } from '@ton/ton' + +/** + * Base class for all TON SDKs, providing some common functionality + * to reduce the boilerplate + */ +export abstract class OmniSDK implements IOmniSDK { + constructor( + public readonly tonClient: TonClient, + public readonly point: OmniPoint, + protected readonly logger: Logger = createModuleLogger(`TON SDK ${new.target.name} @ ${formatOmniPoint(point)}`) + ) {} + + /** + * Human readable label for this SDK + */ + get label(): string { + return formatOmniPoint(this.point) + } + + protected createTransaction(data: string): OmniTransaction { + return { + point: this.point, + data, + } + } +} diff --git a/packages/devtools-ton/src/omnigraph/types.ts b/packages/devtools-ton/src/omnigraph/types.ts new file mode 100644 index 000000000..004538c67 --- /dev/null +++ b/packages/devtools-ton/src/omnigraph/types.ts @@ -0,0 +1,4 @@ +import { EndpointBasedFactory } from '@layerzerolabs/devtools' +import { TonClient } from '@ton/ton' + +export type TonClientFactory = EndpointBasedFactory diff --git a/packages/devtools-ton/src/transactions/serde.ts b/packages/devtools-ton/src/transactions/serde.ts index 1bff9a22c..d96c736d0 100644 --- a/packages/devtools-ton/src/transactions/serde.ts +++ b/packages/devtools-ton/src/transactions/serde.ts @@ -28,6 +28,15 @@ export const serializeMessage = (message: Message): string => export const serializeMessageRelaxed = (message: MessageRelaxed): string => messageRelaxedToCell(message).toBoc().toString('base64') +/** + * Serializes a MessageRelaxed array into a string that can be passed to OmniTransaction data + * + * @param {MessageRelaxed[]} messages + * @returns {string} Base64 serialized message string + */ +export const serializeMessagesRelaxed = (messages: MessageRelaxed[]): string => + messages.map((msg) => messageRelaxedToCell(msg).toBoc().toString('base64')).join(',') //comma is a safe separator for base64 + /** * Deserializes a Message object from Base64 serialized representation * @@ -45,6 +54,15 @@ export const deserializeMessage = (data: string): Message => loadMessage(Cell.fr export const deserializeMessageRelaxed = (data: string): MessageRelaxed => loadMessageRelaxed(Cell.fromBase64(data).beginParse()) +/** + * Deserializes a MessageRelaxed array from Base64 serialized representation + * + * @param {string} data + * @returns {MessageRelaxed[]} + */ +export const deserializeMessagesRelaxed = (data: string): MessageRelaxed[] => + data.split(',').map((datum) => loadMessageRelaxed(Cell.fromBase64(datum).beginParse())) + /** * Tries to deserialize Base64 serialized data into a Message or MessageRelaxed object * diff --git a/packages/devtools-ton/src/transactions/signer.ts b/packages/devtools-ton/src/transactions/signer.ts index 2ecd4b56a..073c28ac0 100644 --- a/packages/devtools-ton/src/transactions/signer.ts +++ b/packages/devtools-ton/src/transactions/signer.ts @@ -7,10 +7,11 @@ import { AsyncRetriable, } from '@layerzerolabs/devtools' import type { EndpointId } from '@layerzerolabs/lz-definitions' -import type { Cell, OpenedContract, Contract, ContractProvider, MessageRelaxed } from '@ton/core' +import { Cell } from '@ton/core' +import type { OpenedContract, Contract, ContractProvider, MessageRelaxed } from '@ton/core' import { TonClient } from '@ton/ton' import type { KeyPair } from '@ton/crypto' -import { deserializeMessageRelaxed } from './serde' +import { deserializeMessagesRelaxed } from './serde' import assert from 'assert' import { createIsCellInTransaction, hasTransactionBounced, isTransactionSuccessful } from './state' import { createModuleLogger, Logger } from '@layerzerolabs/io-devtools' @@ -49,9 +50,8 @@ export class OmniSignerTON extends Omni constructor( eid: EndpointId, public readonly keyPair: KeyPair, - public readonly endpoint: string, public readonly wallet: TWalletContract, - public readonly client: TonClient = new TonClient({ endpoint }), + public readonly client: TonClient, protected readonly logger: Logger = createModuleLogger('OmniSignerTON') ) { super(eid) @@ -60,20 +60,24 @@ export class OmniSignerTON extends Omni } override getPoint(): OmniPoint | Promise { - return { eid: this.eid, address: this.keyPair.publicKey.toString('base64') } + return { eid: this.eid, address: `0:${this.openWallet.address.hash.toString('hex')}` } } - override sign(_transaction: OmniTransaction): Promise { - throw new Error('Method not implemented.') + override async sign(_transaction: OmniTransaction): Promise { + const seqno = await this.openWallet.getSeqno() + return ( + await this.wallet.createTransfer({ + seqno, + secretKey: this.keyPair.secretKey, + messages: deserializeMessagesRelaxed(_transaction.data), + }) + ) + .toBoc() + .toString('base64') } override async signAndSend(omniTransaction: OmniTransaction): Promise { - const seqno = await this.openWallet.getSeqno() - const cell = await this.wallet.createTransfer({ - seqno, - secretKey: this.keyPair.secretKey, - messages: [deserializeMessageRelaxed(omniTransaction.data)], - }) + const cell = Cell.fromBase64(await this.sign(omniTransaction)) await this.openWallet.send(cell) @@ -98,7 +102,6 @@ export class OmniSignerTON extends Omni assert(transactionState != null, `Transaction '${transactionHash}' missing from the API`) assert(!hasTransactionBounced(transactionState), `Transaction '${transactionHash}' has bounced`) assert(isTransactionSuccessful(transactionState), `Transaction '${transactionHash}' has not succeeded`) - return { transactionHash } }, } @@ -109,6 +112,7 @@ export class OmniSignerTON extends Omni enabled: true, numAttempts: Number.POSITIVE_INFINITY, maxDelay: 1_000, + onRetry: () => {}, //need this to prevent trying to log error that is too large }) protected async waitForCellSubmitted(cell: Cell, limit: number = 100) { const transactions = await this.client.getTransactions(this.wallet.address, { @@ -117,7 +121,6 @@ export class OmniSignerTON extends Omni const transaction = transactions.find(createIsCellInTransaction(cell)) assert(transaction != null, `Failed to locate cell ${cell.toString()} among the last ${limit} transactions`) - return transaction } } diff --git a/packages/devtools-ton/test/transactions/serde.test.ts b/packages/devtools-ton/test/transactions/serde.test.ts index 963b57f90..ff3e29a02 100644 --- a/packages/devtools-ton/test/transactions/serde.test.ts +++ b/packages/devtools-ton/test/transactions/serde.test.ts @@ -5,10 +5,12 @@ import { deserialize, deserializeMessage, deserializeMessageRelaxed, + deserializeMessagesRelaxed, messageRelaxedToCell, messageToCell, serializeMessage, serializeMessageRelaxed, + serializeMessagesRelaxed, } from '@/transactions/serde' describe('transactions/serde', () => { @@ -136,6 +138,45 @@ describe('transactions/serde', () => { }) }) + describe('serializeMessagesRelaxed', () => { + it('should serialize and deserialize an array of internal messages', () => { + fc.assert( + fc.property(fc.bigInt({ min: 0n, max: 1000n }), fc.boolean(), cellArbitrary, (value, bounce, body) => { + const messageRelaxed = internal({ + value, + to: wallet.address, + bounce, + body, + }) + const messageRelaxed2 = internal({ + value, + to: wallet.address, + bounce, + body, + }) + + const serialized = serializeMessagesRelaxed([messageRelaxed, messageRelaxed2]) + const deserialized = deserializeMessagesRelaxed(serialized) + + // FIXME Jest comparison operators don't work well with message objects + // so a workaround expectation is used + // + // See https://github.com/ton-core/ton-core/blob/e0ed819973daf0484dfbacd0c30a0dcfe4714f8d/src/types/MessageRelaxed.spec.ts + const serializedData = serialized.split(',') + expect( + Cell.fromBase64(serializedData[0]!).equals(messageRelaxedToCell(messageRelaxed)) + ).toBeTruthy() + expect( + Cell.fromBase64(serializedData[1]!).equals(messageRelaxedToCell(messageRelaxed2)) + ).toBeTruthy() + + const reserialized = serializeMessagesRelaxed(deserialized) + expect(reserialized).toEqual(serialized) + }) + ) + }) + }) + describe('deserialize', () => { it('should throw if passed an invalid message', () => { fc.assert( diff --git a/packages/devtools-ton/test/transactions/signer.test.ts b/packages/devtools-ton/test/transactions/signer.test.ts index c0857e25f..adae1b01b 100644 --- a/packages/devtools-ton/test/transactions/signer.test.ts +++ b/packages/devtools-ton/test/transactions/signer.test.ts @@ -1,7 +1,7 @@ import { OmniSignerTON, serializeMessageRelaxed } from '@/transactions' import { OmniTransaction } from '@layerzerolabs/devtools' import { EndpointId } from '@layerzerolabs/lz-definitions' -import { internal, WalletContractV3R2, WalletContractV4 } from '@ton/ton' +import { internal, TonClient, WalletContractV3R2, WalletContractV4 } from '@ton/ton' import { mnemonicToWalletKey } from '@ton/crypto' describe('transactions/signer', () => { @@ -9,17 +9,18 @@ describe('transactions/signer', () => { const mnemonic = process.env.MNEMONIC_TON || 'spoon key tower goat diesel labor camera movie chaos entry panic ceiling panel move sibling genius grunt rival buzz just velvet medal butter foam' + const client = new TonClient({ endpoint }) describe('OmniSignerTON', () => { describe('signAndSend', () => { it('should send a token transfer', async () => { - const eid = EndpointId.TRON_SANDBOX + const eid = EndpointId.TON_V2_SANDBOX const keyPair = await mnemonicToWalletKey(mnemonic.split(' ')) const signer = new OmniSignerTON( - EndpointId.TRON_SANDBOX, + EndpointId.TON_V2_SANDBOX, keyPair, - endpoint, - WalletContractV3R2.create({ workchain: 0, publicKey: keyPair.publicKey, walletId: 42 }) + WalletContractV3R2.create({ workchain: 0, publicKey: keyPair.publicKey, walletId: 42 }), + client ) const anotherWallet = WalletContractV4.create({ diff --git a/packages/devtools-ton/tsconfig.json b/packages/devtools-ton/tsconfig.json index c208b5a1e..7e48a0c98 100644 --- a/packages/devtools-ton/tsconfig.json +++ b/packages/devtools-ton/tsconfig.json @@ -4,6 +4,8 @@ "include": ["src", "test", "*.config.ts"], "compilerOptions": { "experimentalDecorators": true, + "target": "ES2020", + "module": "commonjs", "types": ["node", "jest"], "paths": { "@/*": ["./src/*"] diff --git a/packages/devtools/package.json b/packages/devtools/package.json index dcec86165..ca16961b3 100644 --- a/packages/devtools/package.json +++ b/packages/devtools/package.json @@ -38,8 +38,8 @@ "devDependencies": { "@ethersproject/bytes": "~5.7.0", "@ethersproject/constants": "~5.7.0", - "@layerzerolabs/io-devtools": "~0.1.13", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/test-devtools": "~0.4.1", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", @@ -55,8 +55,8 @@ }, "peerDependencies": { "@ethersproject/bytes": "~5.7.0", - "@layerzerolabs/io-devtools": "~0.1.13", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "zod": "^3.22.4" }, "publishConfig": { diff --git a/packages/devtools/test/omnigraph/__snapshots__/format.test.ts.snap b/packages/devtools/test/omnigraph/__snapshots__/format.test.ts.snap index d4e3c284f..fcefb0194 100644 --- a/packages/devtools/test/omnigraph/__snapshots__/format.test.ts.snap +++ b/packages/devtools/test/omnigraph/__snapshots__/format.test.ts.snap @@ -214,6 +214,20 @@ exports[`omnigraph/format formatEid should format 330 correctly 1`] = `"ISLANDER exports[`omnigraph/format formatEid should format 331 correctly 1`] = `"MP1_MAINNET"`; +exports[`omnigraph/format formatEid should format 332 correctly 1`] = `"SONIC_MAINNET"`; + +exports[`omnigraph/format formatEid should format 333 correctly 1`] = `"ROOTSTOCK_MAINNET"`; + +exports[`omnigraph/format formatEid should format 334 correctly 1`] = `"SOPHON_MAINNET"`; + +exports[`omnigraph/format formatEid should format 335 correctly 1`] = `"SWELL_MAINNET"`; + +exports[`omnigraph/format formatEid should format 336 correctly 1`] = `"FLOW_MAINNET"`; + +exports[`omnigraph/format formatEid should format 337 correctly 1`] = `"BL4_MAINNET"`; + +exports[`omnigraph/format formatEid should format 338 correctly 1`] = `"BL5_MAINNET"`; + exports[`omnigraph/format formatEid should format 420 correctly 1`] = `"TRON_MAINNET"`; exports[`omnigraph/format formatEid should format 10102 correctly 1`] = `"BSC_TESTNET"`; @@ -544,6 +558,16 @@ exports[`omnigraph/format formatEid should format 10352 correctly 1`] = `"NIBIRU exports[`omnigraph/format formatEid should format 10353 correctly 1`] = `"SWELL_TESTNET"`; +exports[`omnigraph/format formatEid should format 10354 correctly 1`] = `"MEMECOREFORMICARIUM_TESTNET"`; + +exports[`omnigraph/format formatEid should format 10355 correctly 1`] = `"APEXFUSIONNEXUS_TESTNET"`; + +exports[`omnigraph/format formatEid should format 10356 correctly 1`] = `"GOAT_TESTNET"`; + +exports[`omnigraph/format formatEid should format 10357 correctly 1`] = `"BL6_TESTNET"`; + +exports[`omnigraph/format formatEid should format 10358 correctly 1`] = `"INK_TESTNET"`; + exports[`omnigraph/format formatEid should format 10420 correctly 1`] = `"TRON_TESTNET"`; exports[`omnigraph/format formatEid should format 20008 correctly 1`] = `"APTOS_SANDBOX"`; @@ -786,6 +810,20 @@ exports[`omnigraph/format formatEid should format 30330 correctly 1`] = `"ISLAND exports[`omnigraph/format formatEid should format 30331 correctly 1`] = `"MP1_V2_MAINNET"`; +exports[`omnigraph/format formatEid should format 30332 correctly 1`] = `"SONIC_V2_MAINNET"`; + +exports[`omnigraph/format formatEid should format 30333 correctly 1`] = `"ROOTSTOCK_V2_MAINNET"`; + +exports[`omnigraph/format formatEid should format 30334 correctly 1`] = `"SOPHON_V2_MAINNET"`; + +exports[`omnigraph/format formatEid should format 30335 correctly 1`] = `"SWELL_V2_MAINNET"`; + +exports[`omnigraph/format formatEid should format 30336 correctly 1`] = `"FLOW_V2_MAINNET"`; + +exports[`omnigraph/format formatEid should format 30337 correctly 1`] = `"BL4_V2_MAINNET"`; + +exports[`omnigraph/format formatEid should format 30338 correctly 1`] = `"BL5_V2_MAINNET"`; + exports[`omnigraph/format formatEid should format 30343 correctly 1`] = `"TON_V2_MAINNET"`; exports[`omnigraph/format formatEid should format 30420 correctly 1`] = `"TRON_V2_MAINNET"`; @@ -1120,6 +1158,16 @@ exports[`omnigraph/format formatEid should format 40352 correctly 1`] = `"NIBIRU exports[`omnigraph/format formatEid should format 40353 correctly 1`] = `"SWELL_V2_TESTNET"`; +exports[`omnigraph/format formatEid should format 40354 correctly 1`] = `"MEMECOREFORMICARIUM_V2_TESTNET"`; + +exports[`omnigraph/format formatEid should format 40355 correctly 1`] = `"APEXFUSIONNEXUS_V2_TESTNET"`; + +exports[`omnigraph/format formatEid should format 40356 correctly 1`] = `"GOAT_V2_TESTNET"`; + +exports[`omnigraph/format formatEid should format 40357 correctly 1`] = `"BL6_V2_TESTNET"`; + +exports[`omnigraph/format formatEid should format 40358 correctly 1`] = `"INK_V2_TESTNET"`; + exports[`omnigraph/format formatEid should format 40420 correctly 1`] = `"TRON_V2_TESTNET"`; exports[`omnigraph/format formatEid should format 50008 correctly 1`] = `"APTOS_V2_SANDBOX"`; diff --git a/packages/export-deployments/package.json b/packages/export-deployments/package.json index 049bff9ed..8aec073ce 100644 --- a/packages/export-deployments/package.json +++ b/packages/export-deployments/package.json @@ -30,7 +30,7 @@ "typescript": "^5.4.4" }, "devDependencies": { - "@layerzerolabs/io-devtools": "~0.1.12", + "@layerzerolabs/io-devtools": "~0.1.14", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", "@types/jest": "^29.5.12", diff --git a/packages/omnicounter-devtools-evm/package.json b/packages/omnicounter-devtools-evm/package.json index 23337b71c..795177a05 100644 --- a/packages/omnicounter-devtools-evm/package.json +++ b/packages/omnicounter-devtools-evm/package.json @@ -35,7 +35,7 @@ "devDependencies": { "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/omnicounter-devtools": "~3.0.1", "@layerzerolabs/protocol-devtools": "~1.1.1", "@layerzerolabs/protocol-devtools-evm": "~3.0.1", @@ -54,7 +54,7 @@ "peerDependencies": { "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/omnicounter-devtools": "~3.0.1", "@layerzerolabs/protocol-devtools": "~1.1.1", "@layerzerolabs/protocol-devtools-evm": "~3.0.1", diff --git a/packages/omnicounter-devtools/package.json b/packages/omnicounter-devtools/package.json index ba9520b02..304350536 100644 --- a/packages/omnicounter-devtools/package.json +++ b/packages/omnicounter-devtools/package.json @@ -32,7 +32,7 @@ }, "devDependencies": { "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/protocol-devtools": "~1.1.1", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", @@ -46,7 +46,7 @@ }, "peerDependencies": { "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/protocol-devtools": "~1.1.1", "zod": "^3.22.4" }, diff --git a/packages/protocol-devtools-evm/package.json b/packages/protocol-devtools-evm/package.json index 72e55b581..3ede0c1e8 100644 --- a/packages/protocol-devtools-evm/package.json +++ b/packages/protocol-devtools-evm/package.json @@ -47,8 +47,8 @@ "@ethersproject/providers": "^5.7.2", "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-sdk-v2": "^3.0.21", "@layerzerolabs/protocol-devtools": "~1.1.1", "@layerzerolabs/test-devtools": "~0.4.1", @@ -72,8 +72,8 @@ "@ethersproject/providers": "^5.7.0", "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/protocol-devtools": "~1.1.1", "zod": "^3.22.4" }, diff --git a/packages/protocol-devtools-solana/package.json b/packages/protocol-devtools-solana/package.json index 7d915e100..5404134a9 100644 --- a/packages/protocol-devtools-solana/package.json +++ b/packages/protocol-devtools-solana/package.json @@ -44,8 +44,8 @@ "devDependencies": { "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-solana": "~1.0.3", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-solana-sdk-v2": "^3.0.0", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/protocol-devtools": "~1.1.1", @@ -69,8 +69,8 @@ "peerDependencies": { "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-solana": "~1.0.3", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-solana-sdk-v2": "^3.0.0", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/protocol-devtools": "^1.1.1", diff --git a/packages/protocol-devtools/package.json b/packages/protocol-devtools/package.json index 113a190e6..fbb020eb1 100644 --- a/packages/protocol-devtools/package.json +++ b/packages/protocol-devtools/package.json @@ -34,7 +34,7 @@ "devDependencies": { "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/io-devtools": "~0.1.14", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/test-devtools": "~0.4.1", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", @@ -50,7 +50,7 @@ "peerDependencies": { "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/io-devtools": "~0.1.14", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "zod": "^3.22.4" }, "publishConfig": { diff --git a/packages/test-devtools/package.json b/packages/test-devtools/package.json index c702f390d..1d90734cf 100644 --- a/packages/test-devtools/package.json +++ b/packages/test-devtools/package.json @@ -33,7 +33,7 @@ "@scure/bip39": "~1.2.2" }, "devDependencies": { - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "bs58": "^6.0.0", "fast-check": "^3.15.1", "ts-node": "^10.9.2", @@ -42,7 +42,7 @@ "typescript": "^5.4.4" }, "peerDependencies": { - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "bs58": "^6.0.0", "fast-check": "^3.14.0" }, diff --git a/packages/toolbox-hardhat/package.json b/packages/toolbox-hardhat/package.json index 790efe4ec..8f85b81fe 100644 --- a/packages/toolbox-hardhat/package.json +++ b/packages/toolbox-hardhat/package.json @@ -38,8 +38,8 @@ "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-sdk-v1": "^3.0.12", "@layerzerolabs/lz-evm-sdk-v2": "^3.0.21", "@layerzerolabs/lz-v2-utilities": "^3.0.12", diff --git a/packages/ua-devtools-evm-hardhat/package.json b/packages/ua-devtools-evm-hardhat/package.json index 88cb56d7a..3001538f9 100644 --- a/packages/ua-devtools-evm-hardhat/package.json +++ b/packages/ua-devtools-evm-hardhat/package.json @@ -47,8 +47,8 @@ "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", - "@layerzerolabs/io-devtools": "~0.1.13", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/protocol-devtools": "~1.1.1", @@ -76,8 +76,8 @@ "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", - "@layerzerolabs/io-devtools": "~0.1.13", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/protocol-devtools": "~1.1.1", "@layerzerolabs/protocol-devtools-evm": "~3.0.1", "@layerzerolabs/ua-devtools": "~3.0.1", diff --git a/packages/ua-devtools-evm/package.json b/packages/ua-devtools-evm/package.json index 91997279c..915c09fd0 100644 --- a/packages/ua-devtools-evm/package.json +++ b/packages/ua-devtools-evm/package.json @@ -42,8 +42,8 @@ "@ethersproject/providers": "^5.7.0", "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/protocol-devtools": "~1.1.1", "@layerzerolabs/protocol-devtools-evm": "~3.0.1", @@ -65,8 +65,8 @@ "@ethersproject/contracts": "^5.7.0", "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/protocol-devtools": "~1.1.1", "@layerzerolabs/protocol-devtools-evm": "~3.0.1", diff --git a/packages/ua-devtools-solana/package.json b/packages/ua-devtools-solana/package.json index 7cc3663e3..da69522b7 100644 --- a/packages/ua-devtools-solana/package.json +++ b/packages/ua-devtools-solana/package.json @@ -44,8 +44,8 @@ "devDependencies": { "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-solana": "~1.0.3", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-solana-sdk-v2": "^3.0.0", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/oft-v2-solana-sdk": "^3.0.0", @@ -75,8 +75,8 @@ "peerDependencies": { "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-solana": "~1.0.3", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-solana-sdk-v2": "^3.0.0", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/oft-v2-solana-sdk": "^3.0.0", diff --git a/packages/ua-devtools/package.json b/packages/ua-devtools/package.json index 53c51e50d..28f6ae818 100644 --- a/packages/ua-devtools/package.json +++ b/packages/ua-devtools/package.json @@ -32,8 +32,8 @@ }, "devDependencies": { "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/protocol-devtools": "~1.1.1", "@layerzerolabs/test-devtools": "~0.4.1", @@ -50,8 +50,8 @@ }, "peerDependencies": { "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/protocol-devtools": "~1.1.1", "zod": "^3.22.4" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 38bffa64b..19582aee9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,8 +84,8 @@ importers: specifier: ~2.3.39 version: 2.3.44(typescript@5.5.3) '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.12 version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.15)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -198,8 +198,8 @@ importers: specifier: ~2.3.39 version: 2.3.44(typescript@5.5.3) '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.12 version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.12)(@openzeppelin/contracts-upgradeable@5.0.2)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -312,8 +312,8 @@ importers: specifier: ~2.3.39 version: 2.3.44(typescript@5.5.3) '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.12 version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.12)(@openzeppelin/contracts-upgradeable@5.0.2)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.1)(solidity-bytes-utils@0.8.2) @@ -423,8 +423,8 @@ importers: specifier: ~2.3.39 version: 2.3.44(typescript@5.5.3) '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.12 version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.12)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -537,8 +537,8 @@ importers: specifier: ~2.3.39 version: 2.3.44(typescript@5.5.3) '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.12 version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.12)(@openzeppelin/contracts-upgradeable@5.0.2)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.1)(solidity-bytes-utils@0.8.2) @@ -651,8 +651,8 @@ importers: specifier: ~2.3.39 version: 2.3.44(typescript@5.5.3) '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.12 version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.12)(@openzeppelin/contracts-upgradeable@5.0.2)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -780,11 +780,11 @@ importers: specifier: ~2.3.39 version: 2.3.44(typescript@5.5.3) '@layerzerolabs/io-devtools': - specifier: ~0.1.11 + specifier: ~0.1.14 version: link:../../packages/io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.12 version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.12)(@openzeppelin/contracts-upgradeable@5.0.2)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -993,8 +993,8 @@ importers: specifier: ~2.3.39 version: 2.3.44(typescript@5.5.3) '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.12 version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.12)(@openzeppelin/contracts-upgradeable@5.0.2)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -1122,8 +1122,8 @@ importers: specifier: ~2.3.39 version: 2.3.44(typescript@5.5.3) '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.12 version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.12)(@openzeppelin/contracts-upgradeable@5.0.2)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -1233,8 +1233,8 @@ importers: specifier: ~2.3.39 version: 2.3.44(typescript@5.5.3) '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.12 version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.12)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -1356,8 +1356,8 @@ importers: specifier: ~2.3.39 version: 2.3.44(typescript@5.5.3) '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.12 version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.12)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -1507,7 +1507,7 @@ importers: specifier: ~1.0.0 version: link:../devtools-evm '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../io-devtools '@layerzerolabs/lz-v2-utilities': specifier: ^3.0.12 @@ -1556,7 +1556,7 @@ importers: version: 1.10.0 devDependencies: '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../io-devtools '@swc/core': specifier: ^1.4.0 @@ -1641,7 +1641,7 @@ importers: specifier: ~1.0.0 version: link:../devtools-evm '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../io-devtools '@layerzerolabs/lz-v2-utilities': specifier: ^3.0.12 @@ -1702,11 +1702,11 @@ importers: specifier: ~5.7.0 version: 5.7.0 '@layerzerolabs/io-devtools': - specifier: ~0.1.13 + specifier: ~0.1.14 version: link:../io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/test-devtools': specifier: ~0.4.1 version: link:../test-devtools @@ -1754,7 +1754,7 @@ importers: specifier: ~0.4.0 version: link:../devtools '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../io-devtools '@layerzerolabs/ua-devtools': specifier: ~3.0.0 @@ -1842,11 +1842,11 @@ importers: specifier: ~0.4.2 version: link:../devtools '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/test-devtools': specifier: ~0.4.1 version: link:../test-devtools @@ -1930,11 +1930,11 @@ importers: specifier: ~1.0.1 version: link:../devtools-evm '@layerzerolabs/io-devtools': - specifier: ~0.1.13 + specifier: ~0.1.14 version: link:../io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-sdk-v1': specifier: ^3.0.12 version: 3.0.12 @@ -2006,11 +2006,11 @@ importers: specifier: ~0.4.2 version: link:../devtools '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/test-devtools': specifier: ~0.4.1 version: link:../test-devtools @@ -2067,31 +2067,38 @@ importers: version: 3.22.4 packages/devtools-ton: + dependencies: + '@ton/core': + specifier: ^0.59.0 + version: 0.59.0(@ton/crypto@3.3.0) + '@ton/crypto': + specifier: ^3.3.0 + version: 3.3.0 + '@ton/ton': + specifier: ^15.1.0 + version: 15.1.0(@ton/core@0.59.0)(@ton/crypto@3.3.0) + p-memoize: + specifier: ~4.0.4 + version: 4.0.4 devDependencies: '@layerzerolabs/devtools': specifier: ~0.4.2 version: link:../devtools '@layerzerolabs/io-devtools': - specifier: ~0.1.13 + specifier: ~0.1.14 version: link:../io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 + '@layerzerolabs/lz-ton-sdk-v2': + specifier: ^3.0.27 + version: 3.0.27 '@swc/core': specifier: ^1.4.0 version: 1.4.0 '@swc/jest': specifier: ^0.2.36 version: 0.2.36(@swc/core@1.4.0) - '@ton/core': - specifier: ^0.59.0 - version: 0.59.0(@ton/crypto@3.3.0) - '@ton/crypto': - specifier: ^3.3.0 - version: 3.3.0 - '@ton/ton': - specifier: ^15.1.0 - version: 15.1.0(@ton/core@0.59.0)(@ton/crypto@3.3.0) '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -2114,7 +2121,7 @@ importers: specifier: ~8.0.1 version: 8.0.1(@swc/core@1.4.0)(ts-node@10.9.2)(typescript@5.5.3) typescript: - specifier: ^5.4.4 + specifier: ^5.3.3 version: 5.5.3 packages/export-deployments: @@ -2124,7 +2131,7 @@ importers: version: 5.5.3 devDependencies: '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../io-devtools '@swc/core': specifier: ^1.4.0 @@ -2458,8 +2465,8 @@ importers: specifier: ~0.4.2 version: link:../devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/protocol-devtools': specifier: ~1.1.1 version: link:../protocol-devtools @@ -2504,8 +2511,8 @@ importers: specifier: ~1.0.1 version: link:../devtools-evm '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/omnicounter-devtools': specifier: ~3.0.1 version: link:../omnicounter-devtools @@ -2591,8 +2598,8 @@ importers: specifier: ~0.1.14 version: link:../io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/test-devtools': specifier: ~0.4.1 version: link:../test-devtools @@ -2658,11 +2665,11 @@ importers: specifier: ~1.0.1 version: link:../devtools-evm '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-sdk-v2': specifier: ^3.0.21 version: 3.0.22 @@ -2725,11 +2732,11 @@ importers: specifier: ~1.0.3 version: link:../devtools-solana '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-solana-sdk-v2': specifier: ^3.0.0 version: 3.0.0(fastestsmallesttextencoderdecoder@1.0.22) @@ -2795,8 +2802,8 @@ importers: version: 1.2.2 devDependencies: '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 bs58: specifier: ^6.0.0 version: 6.0.0 @@ -3006,11 +3013,11 @@ importers: specifier: ~2.0.3 version: link:../devtools-evm-hardhat '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-sdk-v1': specifier: ^3.0.12 version: 3.0.12 @@ -3100,11 +3107,11 @@ importers: specifier: ~0.4.2 version: link:../devtools '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-v2-utilities': specifier: ^3.0.12 version: 3.0.12 @@ -3176,11 +3183,11 @@ importers: specifier: ~1.0.1 version: link:../devtools-evm '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-v2-utilities': specifier: ^3.0.12 version: 3.0.12 @@ -3261,11 +3268,11 @@ importers: specifier: ~2.0.3 version: link:../devtools-evm-hardhat '@layerzerolabs/io-devtools': - specifier: ~0.1.13 + specifier: ~0.1.14 version: link:../io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.12 version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.15)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.1)(solidity-bytes-utils@0.8.2) @@ -3343,11 +3350,11 @@ importers: specifier: ~1.0.3 version: link:../devtools-solana '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-solana-sdk-v2': specifier: ^3.0.0 version: 3.0.0(fastestsmallesttextencoderdecoder@1.0.22) @@ -3511,11 +3518,11 @@ importers: specifier: ~2.0.3 version: link:../../packages/devtools-evm-hardhat '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../../packages/io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.12 version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.15)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2) @@ -3649,11 +3656,11 @@ importers: specifier: ~2.0.3 version: link:../../packages/devtools-evm-hardhat '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../../packages/io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.12 version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.15)(@openzeppelin/contracts-upgradeable@4.9.5)(@openzeppelin/contracts@4.9.5)(hardhat-deploy@0.12.1)(solidity-bytes-utils@0.8.2) @@ -3766,8 +3773,8 @@ importers: specifier: ~1.0.1 version: link:../../packages/devtools-evm '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/test-devtools': specifier: ~0.4.1 version: link:../../packages/test-devtools @@ -3814,7 +3821,7 @@ importers: specifier: ~0.0.13 version: link:../../packages/export-deployments '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../../packages/io-devtools '@layerzerolabs/test-setup-devtools-evm-hardhat': specifier: ~6.0.0 @@ -3901,11 +3908,11 @@ importers: specifier: ~2.0.3 version: link:../../packages/devtools-evm-hardhat '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../../packages/io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/protocol-devtools': specifier: ~1.1.1 version: link:../../packages/protocol-devtools @@ -3979,11 +3986,11 @@ importers: specifier: ~2.0.3 version: link:../../packages/devtools-evm-hardhat '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../../packages/io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.12 version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.15)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.1)(solidity-bytes-utils@0.8.2) @@ -4117,11 +4124,11 @@ importers: specifier: ~2.0.3 version: link:../../packages/devtools-evm-hardhat '@layerzerolabs/io-devtools': - specifier: ~0.1.12 + specifier: ~0.1.14 version: link:../../packages/io-devtools '@layerzerolabs/lz-definitions': - specifier: ^3.0.21 - version: 3.0.21 + specifier: ^3.0.27 + version: 3.0.27 '@layerzerolabs/lz-evm-messagelib-v2': specifier: ^3.0.12 version: 3.0.12(@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.12)(@layerzerolabs/lz-evm-v1-0.7@3.0.12)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.1)(solidity-bytes-utils@0.8.2) @@ -6398,8 +6405,8 @@ packages: - utf-8-validate dev: true - /@layerzerolabs/lz-definitions@3.0.21: - resolution: {integrity: sha512-LirBj6+rODkk97wnZ/Z2zK8NPyopOh3taj3GG1tOVBILkoHO2j5HbXM16QOwHzmQeU/OrdnzCS5tPV225KVQmA==} + /@layerzerolabs/lz-definitions@3.0.27: + resolution: {integrity: sha512-XfYKb2BHef+rLRbBAQeys6ZqFrVIjiIgHKeztvMKgHigrlKjwL/5QyH/F9KdPP6buy25l5FbOlYVujCHb/li5A==} dependencies: tiny-invariant: 1.3.3 @@ -6959,7 +6966,7 @@ packages: /@layerzerolabs/lz-foundation@3.0.0: resolution: {integrity: sha512-vYuuZAfIaRQUEGaKnV4dCOiFTENhfc2w+Fcnza/T7+O/JIKL2p/GqdxcC21HqrMNdLGMmSWnUqLlou+eCk3ROQ==} dependencies: - '@layerzerolabs/lz-definitions': 3.0.21 + '@layerzerolabs/lz-definitions': 3.0.27 '@layerzerolabs/lz-utilities': 3.0.0 '@noble/ed25519': 1.7.3 '@noble/hashes': 1.4.0 @@ -6982,7 +6989,7 @@ packages: '@ethersproject/sha2': 5.7.0 '@ethersproject/solidity': 5.7.0 '@layerzerolabs/lz-corekit-solana': 3.0.0 - '@layerzerolabs/lz-definitions': 3.0.21 + '@layerzerolabs/lz-definitions': 3.0.27 '@layerzerolabs/lz-v2-utilities': 3.0.12 '@metaplex-foundation/beet': 0.7.2 '@metaplex-foundation/beet-solana': 0.4.1 @@ -7002,12 +7009,26 @@ packages: - utf-8-validate dev: true + /@layerzerolabs/lz-ton-sdk-v2@3.0.27: + resolution: {integrity: sha512-AU1uOzmLjWvyHdJGTo689bXLsCS/QAmfQSjvZ4544muLfpGVLl3l6lOl8DwmN1UQuwKKK94C5rEvoElVUYf0zQ==} + dependencies: + '@ton/core': 0.59.0(@ton/crypto@3.3.0) + '@ton/crypto': 3.3.0 + bigint-buffer: 1.1.5 + crc-32: 1.2.2 + ethers: 5.7.2 + tiny-invariant: 1.3.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + /@layerzerolabs/lz-utilities@3.0.0: resolution: {integrity: sha512-vlQXc4BdkNNMrQT0Zp4X20GLss6xwd3rzD0kYI6W3JnhCLrUo03FEZLbliTf6t2F3IgcQf80KyOQKRewMoU+ow==} dependencies: '@ethersproject/bytes': 5.7.0 '@ethersproject/providers': 5.7.2 - '@layerzerolabs/lz-definitions': 3.0.21 + '@layerzerolabs/lz-definitions': 3.0.27 '@noble/hashes': 1.4.0 '@noble/secp256k1': 1.7.1 '@solana/web3.js': 1.95.8 @@ -8844,13 +8865,11 @@ packages: dependencies: '@ton/crypto': 3.3.0 symbol.inspect: 1.0.1 - dev: true /@ton/crypto-primitives@2.1.0: resolution: {integrity: sha512-PQesoyPgqyI6vzYtCXw4/ZzevePc4VGcJtFwf08v10OevVJHVfW238KBdpj1kEDQkxWLeuNHEpTECNFKnP6tow==} dependencies: jssha: 3.2.0 - dev: true /@ton/crypto@3.3.0: resolution: {integrity: sha512-/A6CYGgA/H36OZ9BbTaGerKtzWp50rg67ZCH2oIjV1NcrBaCK9Z343M+CxedvM7Haf3f/Ee9EhxyeTp0GKMUpA==} @@ -8858,7 +8877,6 @@ packages: '@ton/crypto-primitives': 2.1.0 jssha: 3.2.0 tweetnacl: 1.0.3 - dev: true /@ton/ton@15.1.0(@ton/core@0.59.0)(@ton/crypto@3.3.0): resolution: {integrity: sha512-almetcfTu7jLjcNcEEPB7wAc8yl90ES1M//sOr1QE+kv7RbmEvMkaPSc7kFxzs10qrjIPKxlodBJlMSWP5LuVQ==} @@ -8875,7 +8893,7 @@ packages: zod: 3.22.4 transitivePeerDependencies: - debug - dev: true + dev: false /@trufflesuite/bigint-buffer@1.1.9: resolution: {integrity: sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==} @@ -9964,7 +9982,6 @@ packages: proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - dev: true /babel-jest@29.7.0(@babel/core@7.23.9): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} @@ -11111,7 +11128,6 @@ packages: /dataloader@2.2.2: resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} - dev: true /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} @@ -12896,7 +12912,6 @@ packages: optional: true dependencies: debug: 4.3.7 - dev: true /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -12951,7 +12966,6 @@ packages: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - dev: true /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} @@ -14982,7 +14996,6 @@ packages: /jssha@3.2.0: resolution: {integrity: sha512-QuruyBENDWdN4tZwJbQq7/eAK85FqrI4oDbXjy5IBhYD+2pTJyBUWZe8ctWaCkrV0gy6AaelgOZZBMeswEa/6Q==} - dev: true /jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} @@ -16514,7 +16527,6 @@ packages: /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: true /prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} @@ -17936,7 +17948,6 @@ packages: /symbol.inspect@1.0.1: resolution: {integrity: sha512-YQSL4duoHmLhsTD1Pw8RW6TZ5MaTX5rXJnqacJottr2P2LZBF/Yvrc3ku4NUpMOm8aM0KOCqM+UAkMA5HWQCzQ==} - dev: true /synckit@0.8.8: resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} @@ -18053,7 +18064,6 @@ packages: /teslabot@1.5.0: resolution: {integrity: sha512-e2MmELhCgrgZEGo7PQu/6bmYG36IDH+YrBI1iGm6jovXkeDIGa3pZ2WSqRjzkuw2vt1EqfkZoV5GpXgqL8QJVg==} - dev: true /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} diff --git a/tests/devtools-cli-test/package.json b/tests/devtools-cli-test/package.json index 1315ba9b5..5bd931a79 100644 --- a/tests/devtools-cli-test/package.json +++ b/tests/devtools-cli-test/package.json @@ -29,8 +29,8 @@ "@layerzerolabs/devtools-cli": "~0.0.4", "@layerzerolabs/devtools-evm": "~1.0.1", "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-sdk-v1": "^3.0.12", diff --git a/tests/devtools-evm-hardhat-test/package.json b/tests/devtools-evm-hardhat-test/package.json index 786d3324c..5a56fab45 100644 --- a/tests/devtools-evm-hardhat-test/package.json +++ b/tests/devtools-evm-hardhat-test/package.json @@ -28,8 +28,8 @@ "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-sdk-v1": "^3.0.12", diff --git a/tests/devtools-evm-test/package.json b/tests/devtools-evm-test/package.json index 8f22d37b6..c47d38c8d 100644 --- a/tests/devtools-evm-test/package.json +++ b/tests/devtools-evm-test/package.json @@ -24,7 +24,7 @@ "@ethersproject/providers": "^5.7.2", "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/test-devtools": "~0.4.1", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-ethers": "^2.2.3", diff --git a/tests/export-deployments-test/package.json b/tests/export-deployments-test/package.json index cb25b3cfa..647256c7e 100644 --- a/tests/export-deployments-test/package.json +++ b/tests/export-deployments-test/package.json @@ -19,7 +19,7 @@ "devDependencies": { "@babel/core": "^7.23.9", "@layerzerolabs/export-deployments": "~0.0.13", - "@layerzerolabs/io-devtools": "~0.1.12", + "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/test-setup-devtools-evm-hardhat": "~6.0.0", "@layerzerolabs/toolbox-hardhat": "~0.6.0", "@nomicfoundation/hardhat-ethers": "^3.0.5", diff --git a/tests/test-setup-devtools-evm-hardhat/package.json b/tests/test-setup-devtools-evm-hardhat/package.json index 0f76967b3..8a652e984 100644 --- a/tests/test-setup-devtools-evm-hardhat/package.json +++ b/tests/test-setup-devtools-evm-hardhat/package.json @@ -34,8 +34,8 @@ "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/protocol-devtools": "~1.1.1", "@layerzerolabs/protocol-devtools-evm": "~3.0.1", "@layerzerolabs/ua-devtools": "~3.0.1", @@ -54,7 +54,7 @@ "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/protocol-devtools": "~1.1.1", "@layerzerolabs/protocol-devtools-evm": "~3.0.1", "@layerzerolabs/ua-devtools": "~3.0.1", diff --git a/tests/ua-devtools-evm-hardhat-test/package.json b/tests/ua-devtools-evm-hardhat-test/package.json index 584868b9e..065488ff9 100644 --- a/tests/ua-devtools-evm-hardhat-test/package.json +++ b/tests/ua-devtools-evm-hardhat-test/package.json @@ -28,8 +28,8 @@ "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-sdk-v1": "^3.0.12", diff --git a/tests/ua-devtools-evm-hardhat-v1-test/package.json b/tests/ua-devtools-evm-hardhat-v1-test/package.json index 5bfce3018..9d7aed98e 100644 --- a/tests/ua-devtools-evm-hardhat-v1-test/package.json +++ b/tests/ua-devtools-evm-hardhat-v1-test/package.json @@ -28,8 +28,8 @@ "@layerzerolabs/devtools": "~0.4.2", "@layerzerolabs/devtools-evm": "~1.0.1", "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", - "@layerzerolabs/io-devtools": "~0.1.12", - "@layerzerolabs/lz-definitions": "^3.0.21", + "@layerzerolabs/io-devtools": "~0.1.14", + "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-evm-oapp-v1": "^3.0.12", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", From 9d7024e4366be4e20374a1fe63b2e7e214d21edc Mon Sep 17 00:00:00 2001 From: layerzero-bot <131946195+layerzero-bot@users.noreply.github.com> Date: Fri, 13 Dec 2024 01:50:50 +0000 Subject: [PATCH 18/24] =?UTF-8?q?=F0=9F=9A=80=20Version=20packages=20(#112?= =?UTF-8?q?4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: github-actions[bot] --- .changeset/brave-buckets-approve.md | 5 - .changeset/nice-buttons-work.md | 5 - .changeset/serious-laws-tie.md | 5 - .changeset/sixty-radios-rest.md | 6 - .changeset/three-cups-march.md | 37 -- examples/mint-burn-oft-adapter/CHANGELOG.md | 7 + examples/mint-burn-oft-adapter/package.json | 8 +- examples/native-oft-adapter/CHANGELOG.md | 6 + examples/native-oft-adapter/package.json | 8 +- examples/oapp-read/CHANGELOG.md | 6 + examples/oapp-read/package.json | 6 +- examples/oapp/CHANGELOG.md | 6 + examples/oapp/package.json | 6 +- examples/oft-adapter/CHANGELOG.md | 6 + examples/oft-adapter/package.json | 8 +- examples/oft-solana/CHANGELOG.md | 6 + examples/oft-solana/package.json | 30 +- examples/oft-upgradeable/CHANGELOG.md | 6 + examples/oft-upgradeable/package.json | 10 +- examples/oft/CHANGELOG.md | 6 + examples/oft/package.json | 10 +- examples/onft721-zksync/CHANGELOG.md | 6 + examples/onft721-zksync/package.json | 6 +- examples/onft721/CHANGELOG.md | 6 + examples/onft721/package.json | 6 +- examples/uniswap-read/CHANGELOG.md | 6 + examples/uniswap-read/package.json | 6 +- packages/devtools-evm-hardhat/CHANGELOG.md | 9 + packages/devtools-evm-hardhat/package.json | 12 +- packages/devtools-evm/CHANGELOG.md | 8 + packages/devtools-evm/package.json | 8 +- packages/devtools-solana/CHANGELOG.md | 8 + packages/devtools-solana/package.json | 8 +- packages/devtools-ton/CHANGELOG.md | 11 + packages/devtools-ton/package.json | 6 +- packages/devtools/CHANGELOG.md | 6 + packages/devtools/package.json | 4 +- packages/metadata-tools/CHANGELOG.md | 10 + packages/metadata-tools/package.json | 10 +- packages/oapp-alt-evm/package.json | 2 +- packages/oapp-evm-upgradeable/package.json | 2 +- packages/oapp-evm/package.json | 2 +- packages/oft-alt-evm/package.json | 4 +- packages/oft-evm-upgradeable/package.json | 4 +- packages/oft-evm/CHANGELOG.md | 12 + packages/oft-evm/package.json | 4 +- .../omnicounter-devtools-evm/CHANGELOG.md | 14 + .../omnicounter-devtools-evm/package.json | 30 +- packages/omnicounter-devtools/CHANGELOG.md | 9 + packages/omnicounter-devtools/package.json | 10 +- packages/onft-evm/package.json | 2 +- packages/protocol-devtools-evm/CHANGELOG.md | 10 + packages/protocol-devtools-evm/package.json | 16 +- .../protocol-devtools-solana/CHANGELOG.md | 11 + .../protocol-devtools-solana/package.json | 20 +- packages/protocol-devtools/CHANGELOG.md | 8 + packages/protocol-devtools/package.json | 8 +- .../test-devtools-evm-foundry/CHANGELOG.md | 10 + .../test-devtools-evm-foundry/package.json | 4 +- packages/test-devtools/CHANGELOG.md | 6 + packages/test-devtools/package.json | 2 +- packages/toolbox-hardhat/CHANGELOG.md | 16 + packages/toolbox-hardhat/package.json | 18 +- packages/ua-devtools-evm-hardhat/CHANGELOG.md | 14 + packages/ua-devtools-evm-hardhat/package.json | 30 +- packages/ua-devtools-evm/CHANGELOG.md | 12 + packages/ua-devtools-evm/package.json | 24 +- packages/ua-devtools-solana/CHANGELOG.md | 12 + packages/ua-devtools-solana/package.json | 24 +- packages/ua-devtools/CHANGELOG.md | 9 + packages/ua-devtools/package.json | 12 +- pnpm-lock.yaml | 336 +++++++++--------- tests/devtools-cli-test/CHANGELOG.md | 6 + tests/devtools-cli-test/package.json | 26 +- tests/devtools-evm-hardhat-test/CHANGELOG.md | 6 + tests/devtools-evm-hardhat-test/package.json | 22 +- tests/devtools-evm-test/CHANGELOG.md | 6 + tests/devtools-evm-test/package.json | 8 +- .../CHANGELOG.md | 14 + .../package.json | 30 +- .../ua-devtools-evm-hardhat-test/CHANGELOG.md | 6 + .../ua-devtools-evm-hardhat-test/package.json | 26 +- .../CHANGELOG.md | 6 + .../package.json | 26 +- 84 files changed, 728 insertions(+), 480 deletions(-) delete mode 100644 .changeset/brave-buckets-approve.md delete mode 100644 .changeset/nice-buttons-work.md delete mode 100644 .changeset/serious-laws-tie.md delete mode 100644 .changeset/sixty-radios-rest.md delete mode 100644 .changeset/three-cups-march.md create mode 100644 examples/mint-burn-oft-adapter/CHANGELOG.md create mode 100644 packages/metadata-tools/CHANGELOG.md diff --git a/.changeset/brave-buckets-approve.md b/.changeset/brave-buckets-approve.md deleted file mode 100644 index 5b9cc69b5..000000000 --- a/.changeset/brave-buckets-approve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@layerzerolabs/oft-evm": minor ---- - -changed license for MintBurnOFTAdapter and periphery contracts to MIT from UNLICENSED diff --git a/.changeset/nice-buttons-work.md b/.changeset/nice-buttons-work.md deleted file mode 100644 index 478ac9bf1..000000000 --- a/.changeset/nice-buttons-work.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@layerzerolabs/oft-evm": minor ---- - -Added MintBurnOFTAdapter diff --git a/.changeset/serious-laws-tie.md b/.changeset/serious-laws-tie.md deleted file mode 100644 index 9f395d4df..000000000 --- a/.changeset/serious-laws-tie.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@layerzerolabs/oft-evm": patch ---- - -Improve quoteOFT default implementation to use totalSupply() diff --git a/.changeset/sixty-radios-rest.md b/.changeset/sixty-radios-rest.md deleted file mode 100644 index c59c76273..000000000 --- a/.changeset/sixty-radios-rest.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@layerzerolabs/toolbox-hardhat": patch -"@layerzerolabs/metadata-tools": patch ---- - -add metadata-tools package diff --git a/.changeset/three-cups-march.md b/.changeset/three-cups-march.md deleted file mode 100644 index 6ba0e4898..000000000 --- a/.changeset/three-cups-march.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -"@layerzerolabs/devtools-ton": minor -"@layerzerolabs/test-setup-devtools-evm-hardhat": patch -"@layerzerolabs/ua-devtools-evm-hardhat-v1-test": patch -"@layerzerolabs/ua-devtools-evm-hardhat-test": patch -"@layerzerolabs/omnicounter-devtools-evm": patch -"@layerzerolabs/protocol-devtools-solana": patch -"@layerzerolabs/ua-devtools-evm-hardhat": patch -"@layerzerolabs/devtools-evm-hardhat-test": patch -"@layerzerolabs/mint-burn-oft-adapter-example": patch -"@layerzerolabs/protocol-devtools-evm": patch -"@layerzerolabs/devtools-evm-hardhat": patch -"@layerzerolabs/omnicounter-devtools": patch -"@layerzerolabs/native-oft-adapter-example": patch -"@layerzerolabs/ua-devtools-solana": patch -"@layerzerolabs/protocol-devtools": patch -"@layerzerolabs/oft-upgradeable-example": patch -"@layerzerolabs/devtools-solana": patch -"@layerzerolabs/toolbox-hardhat": patch -"@layerzerolabs/ua-devtools-evm": patch -"@layerzerolabs/onft721-zksync-example": patch -"@layerzerolabs/devtools-cli-test": patch -"@layerzerolabs/devtools-evm-test": patch -"@layerzerolabs/test-devtools": patch -"@layerzerolabs/uniswap-read-example": patch -"@layerzerolabs/devtools-evm": patch -"@layerzerolabs/oft-adapter-example": patch -"@layerzerolabs/ua-devtools": patch -"@layerzerolabs/oft-solana-example": patch -"@layerzerolabs/oapp-read-example": patch -"@layerzerolabs/devtools": patch -"@layerzerolabs/onft721-example": patch -"@layerzerolabs/oapp-example": patch -"@layerzerolabs/oft-example": patch ---- - -new SDK methods, tests in devtools-ton, upgraded lz-definitions diff --git a/examples/mint-burn-oft-adapter/CHANGELOG.md b/examples/mint-burn-oft-adapter/CHANGELOG.md new file mode 100644 index 000000000..33a86d28a --- /dev/null +++ b/examples/mint-burn-oft-adapter/CHANGELOG.md @@ -0,0 +1,7 @@ +# @layerzerolabs/mint-burn-oft-adapter-example + +## 0.0.2 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions diff --git a/examples/mint-burn-oft-adapter/package.json b/examples/mint-burn-oft-adapter/package.json index c3f3af76d..1e1a48074 100644 --- a/examples/mint-burn-oft-adapter/package.json +++ b/examples/mint-burn-oft-adapter/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/mint-burn-oft-adapter-example", - "version": "0.0.1", + "version": "0.0.2", "private": true, "license": "MIT", "scripts": { @@ -29,12 +29,12 @@ "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/oapp-evm": "^0.3.0", - "@layerzerolabs/oft-evm": "^3.0.0", + "@layerzerolabs/oft-evm": "^3.1.0", "@layerzerolabs/prettier-config-next": "^2.3.39", "@layerzerolabs/solhint-config": "^3.0.12", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/toolbox-foundry": "~0.1.9", - "@layerzerolabs/toolbox-hardhat": "~0.6.1", + "@layerzerolabs/toolbox-hardhat": "~0.6.3", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", diff --git a/examples/native-oft-adapter/CHANGELOG.md b/examples/native-oft-adapter/CHANGELOG.md index 4e7ddbf31..0e0608dd4 100644 --- a/examples/native-oft-adapter/CHANGELOG.md +++ b/examples/native-oft-adapter/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/native-oft-adapter-example +## 0.2.3 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 0.2.2 ### Patch Changes diff --git a/examples/native-oft-adapter/package.json b/examples/native-oft-adapter/package.json index f682d19fc..83b06a785 100644 --- a/examples/native-oft-adapter/package.json +++ b/examples/native-oft-adapter/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/native-oft-adapter-example", - "version": "0.2.2", + "version": "0.2.3", "private": true, "license": "MIT", "scripts": { @@ -29,12 +29,12 @@ "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/oapp-evm": "^0.3.0", - "@layerzerolabs/oft-evm": "^3.0.0", + "@layerzerolabs/oft-evm": "^3.1.0", "@layerzerolabs/prettier-config-next": "^2.3.39", "@layerzerolabs/solhint-config": "^3.0.12", - "@layerzerolabs/test-devtools-evm-foundry": "^5.0.0", + "@layerzerolabs/test-devtools-evm-foundry": "^6.0.0", "@layerzerolabs/toolbox-foundry": "~0.1.9", - "@layerzerolabs/toolbox-hardhat": "~0.6.1", + "@layerzerolabs/toolbox-hardhat": "~0.6.3", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", diff --git a/examples/oapp-read/CHANGELOG.md b/examples/oapp-read/CHANGELOG.md index 242b4b14a..57d94352f 100644 --- a/examples/oapp-read/CHANGELOG.md +++ b/examples/oapp-read/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/oapp-read-example +## 0.2.3 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 0.2.2 ### Patch Changes diff --git a/examples/oapp-read/package.json b/examples/oapp-read/package.json index f7d99188f..4c2c09315 100644 --- a/examples/oapp-read/package.json +++ b/examples/oapp-read/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/oapp-read-example", - "version": "0.2.2", + "version": "0.2.3", "private": true, "license": "MIT", "scripts": { @@ -31,9 +31,9 @@ "@layerzerolabs/oapp-evm": "^0.3.0", "@layerzerolabs/prettier-config-next": "^2.3.39", "@layerzerolabs/solhint-config": "^3.0.12", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/toolbox-foundry": "~0.1.9", - "@layerzerolabs/toolbox-hardhat": "~0.6.1", + "@layerzerolabs/toolbox-hardhat": "~0.6.3", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", diff --git a/examples/oapp/CHANGELOG.md b/examples/oapp/CHANGELOG.md index 48d9f6a8f..17fe247bc 100644 --- a/examples/oapp/CHANGELOG.md +++ b/examples/oapp/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/oapp-example +## 0.5.3 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 0.5.2 ### Patch Changes diff --git a/examples/oapp/package.json b/examples/oapp/package.json index ff48a5fa2..cb68234c8 100644 --- a/examples/oapp/package.json +++ b/examples/oapp/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/oapp-example", - "version": "0.5.2", + "version": "0.5.3", "private": true, "license": "MIT", "scripts": { @@ -31,9 +31,9 @@ "@layerzerolabs/oapp-evm": "^0.3.0", "@layerzerolabs/prettier-config-next": "^2.3.39", "@layerzerolabs/solhint-config": "^3.0.12", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/toolbox-foundry": "~0.1.9", - "@layerzerolabs/toolbox-hardhat": "~0.6.1", + "@layerzerolabs/toolbox-hardhat": "~0.6.3", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", diff --git a/examples/oft-adapter/CHANGELOG.md b/examples/oft-adapter/CHANGELOG.md index 4c8b59722..bd512e6ee 100644 --- a/examples/oft-adapter/CHANGELOG.md +++ b/examples/oft-adapter/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/oft-adapter-example +## 0.3.3 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 0.3.2 ### Patch Changes diff --git a/examples/oft-adapter/package.json b/examples/oft-adapter/package.json index 86a06dafa..43e29022e 100644 --- a/examples/oft-adapter/package.json +++ b/examples/oft-adapter/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/oft-adapter-example", - "version": "0.3.2", + "version": "0.3.3", "private": true, "license": "MIT", "scripts": { @@ -29,12 +29,12 @@ "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/oapp-evm": "^0.3.0", - "@layerzerolabs/oft-evm": "^3.0.0", + "@layerzerolabs/oft-evm": "^3.1.0", "@layerzerolabs/prettier-config-next": "^2.3.39", "@layerzerolabs/solhint-config": "^3.0.12", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/toolbox-foundry": "~0.1.9", - "@layerzerolabs/toolbox-hardhat": "~0.6.1", + "@layerzerolabs/toolbox-hardhat": "~0.6.3", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", diff --git a/examples/oft-solana/CHANGELOG.md b/examples/oft-solana/CHANGELOG.md index d98b3f83d..bd4bfbc16 100644 --- a/examples/oft-solana/CHANGELOG.md +++ b/examples/oft-solana/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/oft-solana-example +## 0.4.5 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 0.4.4 ### Patch Changes diff --git a/examples/oft-solana/package.json b/examples/oft-solana/package.json index 1539898fb..ad9425563 100644 --- a/examples/oft-solana/package.json +++ b/examples/oft-solana/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/oft-solana-example", - "version": "0.4.4", + "version": "0.4.5", "private": true, "scripts": { "clean": "rm -rf target artifacts cache out .anchor", @@ -24,10 +24,10 @@ "devDependencies": { "@coral-xyz/anchor": "^0.29.0", "@ethersproject/bytes": "^5.7.0", - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/devtools-evm-hardhat": "^2.0.3", - "@layerzerolabs/devtools-solana": "~1.0.2", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", + "@layerzerolabs/devtools-evm-hardhat": "^2.0.4", + "@layerzerolabs/devtools-solana": "~1.0.4", "@layerzerolabs/eslint-config-next": "~2.3.39", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", @@ -37,21 +37,21 @@ "@layerzerolabs/lz-solana-sdk-v2": "3.0.0", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/oapp-evm": "^0.3.0", - "@layerzerolabs/oft-evm": "^3.0.0", + "@layerzerolabs/oft-evm": "^3.1.0", "@layerzerolabs/oft-v2-solana-sdk": "3.0.0", "@layerzerolabs/prettier-config-next": "^2.3.39", - "@layerzerolabs/protocol-devtools": "^1.1.1", - "@layerzerolabs/protocol-devtools-evm": "~3.0.1", - "@layerzerolabs/protocol-devtools-solana": "^4.0.1", + "@layerzerolabs/protocol-devtools": "^1.1.2", + "@layerzerolabs/protocol-devtools-evm": "~3.0.3", + "@layerzerolabs/protocol-devtools-solana": "^4.0.3", "@layerzerolabs/solhint-config": "^3.0.12", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/test-devtools-evm-hardhat": "~0.5.0", "@layerzerolabs/toolbox-foundry": "~0.1.9", - "@layerzerolabs/toolbox-hardhat": "~0.6.1", - "@layerzerolabs/ua-devtools": "~3.0.1", - "@layerzerolabs/ua-devtools-evm": "~5.0.1", - "@layerzerolabs/ua-devtools-evm-hardhat": "~6.0.4", - "@layerzerolabs/ua-devtools-solana": "~4.0.2", + "@layerzerolabs/toolbox-hardhat": "~0.6.3", + "@layerzerolabs/ua-devtools": "~3.0.2", + "@layerzerolabs/ua-devtools-evm": "~5.0.3", + "@layerzerolabs/ua-devtools-evm-hardhat": "~6.0.5", + "@layerzerolabs/ua-devtools-solana": "~4.0.4", "@metaplex-foundation/mpl-token-metadata": "^3.2.1", "@metaplex-foundation/mpl-toolbox": "^0.9.4", "@metaplex-foundation/umi": "^0.9.2", diff --git a/examples/oft-upgradeable/CHANGELOG.md b/examples/oft-upgradeable/CHANGELOG.md index eb69cb01f..12f28d2f1 100644 --- a/examples/oft-upgradeable/CHANGELOG.md +++ b/examples/oft-upgradeable/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/oft-upgradeable-example +## 0.2.5 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 0.2.4 ### Patch Changes diff --git a/examples/oft-upgradeable/package.json b/examples/oft-upgradeable/package.json index f105e2bbe..de5774148 100644 --- a/examples/oft-upgradeable/package.json +++ b/examples/oft-upgradeable/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/oft-upgradeable-example", - "version": "0.2.4", + "version": "0.2.5", "private": true, "license": "MIT", "scripts": { @@ -22,7 +22,7 @@ }, "devDependencies": { "@babel/core": "^7.23.9", - "@layerzerolabs/devtools-evm-hardhat": "^2.0.3", + "@layerzerolabs/devtools-evm-hardhat": "^2.0.4", "@layerzerolabs/eslint-config-next": "~2.3.39", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", @@ -32,13 +32,13 @@ "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/oapp-evm": "^0.3.0", "@layerzerolabs/oapp-evm-upgradeable": "^0.1.0", - "@layerzerolabs/oft-evm": "^3.0.0", + "@layerzerolabs/oft-evm": "^3.1.0", "@layerzerolabs/oft-evm-upgradeable": "^3.0.0", "@layerzerolabs/prettier-config-next": "^2.3.39", "@layerzerolabs/solhint-config": "^3.0.12", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/toolbox-foundry": "~0.1.9", - "@layerzerolabs/toolbox-hardhat": "~0.6.2", + "@layerzerolabs/toolbox-hardhat": "~0.6.3", "@nomiclabs/hardhat-ethers": "^2.2.3", "@nomiclabs/hardhat-waffle": "^2.0.6", "@openzeppelin/contracts": "^5.0.2", diff --git a/examples/oft/CHANGELOG.md b/examples/oft/CHANGELOG.md index b935a90fb..5c53acfff 100644 --- a/examples/oft/CHANGELOG.md +++ b/examples/oft/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/oft-example +## 0.5.3 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 0.5.2 ### Patch Changes diff --git a/examples/oft/package.json b/examples/oft/package.json index 10c14209a..fe9447e90 100644 --- a/examples/oft/package.json +++ b/examples/oft/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/oft-example", - "version": "0.5.2", + "version": "0.5.3", "private": true, "license": "MIT", "scripts": { @@ -22,7 +22,7 @@ }, "devDependencies": { "@babel/core": "^7.23.9", - "@layerzerolabs/devtools-evm-hardhat": "^2.0.3", + "@layerzerolabs/devtools-evm-hardhat": "^2.0.4", "@layerzerolabs/eslint-config-next": "~2.3.39", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", @@ -30,12 +30,12 @@ "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/oapp-evm": "^0.3.0", - "@layerzerolabs/oft-evm": "^3.0.0", + "@layerzerolabs/oft-evm": "^3.1.0", "@layerzerolabs/prettier-config-next": "^2.3.39", "@layerzerolabs/solhint-config": "^3.0.12", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/toolbox-foundry": "~0.1.9", - "@layerzerolabs/toolbox-hardhat": "~0.6.1", + "@layerzerolabs/toolbox-hardhat": "~0.6.3", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", diff --git a/examples/onft721-zksync/CHANGELOG.md b/examples/onft721-zksync/CHANGELOG.md index 4194abfd4..d52a4dd22 100644 --- a/examples/onft721-zksync/CHANGELOG.md +++ b/examples/onft721-zksync/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/onft721-zksync-example +## 1.0.2 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 1.0.1 ### Patch Changes diff --git a/examples/onft721-zksync/package.json b/examples/onft721-zksync/package.json index f62501638..f5fc53a3d 100644 --- a/examples/onft721-zksync/package.json +++ b/examples/onft721-zksync/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/onft721-zksync-example", - "version": "1.0.1", + "version": "1.0.2", "private": true, "license": "MIT", "scripts": { @@ -33,9 +33,9 @@ "@layerzerolabs/onft-evm": "^0.1.0", "@layerzerolabs/prettier-config-next": "^2.3.39", "@layerzerolabs/solhint-config": "^3.0.12", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/toolbox-foundry": "~0.1.9", - "@layerzerolabs/toolbox-hardhat": "~0.6.1", + "@layerzerolabs/toolbox-hardhat": "~0.6.3", "@matterlabs/hardhat-zksync-deploy": "~0.9.0", "@matterlabs/hardhat-zksync-solc": "~1.1.4", "@matterlabs/hardhat-zksync-verify": "^1.7.0", diff --git a/examples/onft721/CHANGELOG.md b/examples/onft721/CHANGELOG.md index 1d388a6fe..7b3184d71 100644 --- a/examples/onft721/CHANGELOG.md +++ b/examples/onft721/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/onft721-example +## 0.3.3 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 0.3.2 ### Patch Changes diff --git a/examples/onft721/package.json b/examples/onft721/package.json index 5f7bae834..3457885af 100644 --- a/examples/onft721/package.json +++ b/examples/onft721/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/onft721-example", - "version": "0.3.2", + "version": "0.3.3", "license": "MIT", "scripts": { "clean": "rm -rf artifacts cache out", @@ -31,9 +31,9 @@ "@layerzerolabs/onft-evm": "^0.1.0", "@layerzerolabs/prettier-config-next": "^2.3.39", "@layerzerolabs/solhint-config": "^3.0.12", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/toolbox-foundry": "~0.1.9", - "@layerzerolabs/toolbox-hardhat": "~0.6.1", + "@layerzerolabs/toolbox-hardhat": "~0.6.3", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", diff --git a/examples/uniswap-read/CHANGELOG.md b/examples/uniswap-read/CHANGELOG.md index 48719d7fb..6761ab8cc 100644 --- a/examples/uniswap-read/CHANGELOG.md +++ b/examples/uniswap-read/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/uniswap-read-example +## 0.2.3 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 0.2.2 ### Patch Changes diff --git a/examples/uniswap-read/package.json b/examples/uniswap-read/package.json index e8cbdfa3e..48992e55c 100644 --- a/examples/uniswap-read/package.json +++ b/examples/uniswap-read/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/uniswap-read-example", - "version": "0.2.2", + "version": "0.2.3", "private": true, "license": "MIT", "scripts": { @@ -31,9 +31,9 @@ "@layerzerolabs/oapp-evm": "^0.3.0", "@layerzerolabs/prettier-config-next": "^2.3.39", "@layerzerolabs/solhint-config": "^3.0.12", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/toolbox-foundry": "~0.1.9", - "@layerzerolabs/toolbox-hardhat": "~0.6.1", + "@layerzerolabs/toolbox-hardhat": "~0.6.3", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", diff --git a/packages/devtools-evm-hardhat/CHANGELOG.md b/packages/devtools-evm-hardhat/CHANGELOG.md index e6a916a6e..5a102a827 100644 --- a/packages/devtools-evm-hardhat/CHANGELOG.md +++ b/packages/devtools-evm-hardhat/CHANGELOG.md @@ -1,5 +1,14 @@ # @layerzerolabs/devtools-evm-hardhat +## 2.0.4 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions +- Updated dependencies [1d2abff] + - @layerzerolabs/devtools-evm@1.0.2 + - @layerzerolabs/devtools@0.4.3 + ## 2.0.3 ### Patch Changes diff --git a/packages/devtools-evm-hardhat/package.json b/packages/devtools-evm-hardhat/package.json index 9f664a755..58165f674 100644 --- a/packages/devtools-evm-hardhat/package.json +++ b/packages/devtools-evm-hardhat/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/devtools-evm-hardhat", - "version": "2.0.3", + "version": "2.0.4", "description": "Hardhat utilities for LayerZero EVM projects", "repository": { "type": "git", @@ -55,12 +55,12 @@ "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@ethersproject/wallet": "^5.7.0", - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-sdk-v1": "^3.0.12", - "@layerzerolabs/test-devtools": "~0.4.1", + "@layerzerolabs/test-devtools": "~0.4.2", "@layerzerolabs/test-devtools-evm-hardhat": "~0.5.0", "@nomiclabs/hardhat-ethers": "^2.2.3", "@swc/core": "^1.4.0", @@ -83,8 +83,8 @@ "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.0", - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@nomiclabs/hardhat-ethers": "^2.2.3", diff --git a/packages/devtools-evm/CHANGELOG.md b/packages/devtools-evm/CHANGELOG.md index 6402a12d3..56431ad1e 100644 --- a/packages/devtools-evm/CHANGELOG.md +++ b/packages/devtools-evm/CHANGELOG.md @@ -1,5 +1,13 @@ # @layerzerolabs/devtools-evm +## 1.0.2 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions +- Updated dependencies [1d2abff] + - @layerzerolabs/devtools@0.4.3 + ## 1.0.1 ### Patch Changes diff --git a/packages/devtools-evm/package.json b/packages/devtools-evm/package.json index eea090106..7611a356e 100644 --- a/packages/devtools-evm/package.json +++ b/packages/devtools-evm/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/devtools-evm", - "version": "1.0.1", + "version": "1.0.2", "description": "Utilities for LayerZero EVM projects", "repository": { "type": "git", @@ -50,10 +50,10 @@ "@ethersproject/constants": "^5.7.0", "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.2", - "@layerzerolabs/devtools": "~0.4.2", + "@layerzerolabs/devtools": "~0.4.3", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", - "@layerzerolabs/test-devtools": "~0.4.1", + "@layerzerolabs/test-devtools": "~0.4.2", "@safe-global/safe-core-sdk-types": "^2.3.0", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", @@ -77,7 +77,7 @@ "@ethersproject/constants": "^5.7.0", "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.0", - "@layerzerolabs/devtools": "~0.4.2", + "@layerzerolabs/devtools": "~0.4.3", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "fp-ts": "^2.16.2", diff --git a/packages/devtools-solana/CHANGELOG.md b/packages/devtools-solana/CHANGELOG.md index 6ad82f3e4..63e0977cb 100644 --- a/packages/devtools-solana/CHANGELOG.md +++ b/packages/devtools-solana/CHANGELOG.md @@ -1,5 +1,13 @@ # @layerzerolabs/devtools-solana +## 1.0.4 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions +- Updated dependencies [1d2abff] + - @layerzerolabs/devtools@0.4.3 + ## 1.0.3 ### Patch Changes diff --git a/packages/devtools-solana/package.json b/packages/devtools-solana/package.json index 6e72861c5..b22cb7b5a 100644 --- a/packages/devtools-solana/package.json +++ b/packages/devtools-solana/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/devtools-solana", - "version": "1.0.3", + "version": "1.0.4", "description": "Utilities for LayerZero Solana projects", "repository": { "type": "git", @@ -42,10 +42,10 @@ "p-memoize": "~4.0.4" }, "devDependencies": { - "@layerzerolabs/devtools": "~0.4.2", + "@layerzerolabs/devtools": "~0.4.3", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", - "@layerzerolabs/test-devtools": "~0.4.1", + "@layerzerolabs/test-devtools": "~0.4.2", "@layerzerolabs/test-devtools-solana": "~0.0.4", "@solana/web3.js": "~1.95.8", "@sqds/multisig": "^2.1.3", @@ -65,7 +65,7 @@ "zod": "^3.22.4" }, "peerDependencies": { - "@layerzerolabs/devtools": "~0.4.2", + "@layerzerolabs/devtools": "~0.4.3", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@solana/web3.js": "^1.95.8", diff --git a/packages/devtools-ton/CHANGELOG.md b/packages/devtools-ton/CHANGELOG.md index d2e505616..dff85a409 100644 --- a/packages/devtools-ton/CHANGELOG.md +++ b/packages/devtools-ton/CHANGELOG.md @@ -1,5 +1,16 @@ # @layerzerolabs/devtools-ton +## 0.1.0 + +### Minor Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + +### Patch Changes + +- Updated dependencies [1d2abff] + - @layerzerolabs/devtools@0.4.3 + ## 0.0.2 ### Patch Changes diff --git a/packages/devtools-ton/package.json b/packages/devtools-ton/package.json index c5f10c4f6..1b9ed79a9 100644 --- a/packages/devtools-ton/package.json +++ b/packages/devtools-ton/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/devtools-ton", - "version": "0.0.2", + "version": "0.1.0", "description": "Developer utilities for working with LayerZero TON contracts", "repository": { "type": "git", @@ -38,7 +38,7 @@ "p-memoize": "~4.0.4" }, "devDependencies": { - "@layerzerolabs/devtools": "~0.4.2", + "@layerzerolabs/devtools": "~0.4.3", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-ton-sdk-v2": "^3.0.27", @@ -54,7 +54,7 @@ "typescript": "^5.3.3" }, "peerDependencies": { - "@layerzerolabs/devtools": "~0.4.2", + "@layerzerolabs/devtools": "~0.4.3", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@ton/core": "^0.59.0", diff --git a/packages/devtools/CHANGELOG.md b/packages/devtools/CHANGELOG.md index 4f7482a19..7332b17fd 100644 --- a/packages/devtools/CHANGELOG.md +++ b/packages/devtools/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/devtools +## 0.4.3 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 0.4.2 ### Patch Changes diff --git a/packages/devtools/package.json b/packages/devtools/package.json index ca16961b3..1b96116d6 100644 --- a/packages/devtools/package.json +++ b/packages/devtools/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/devtools", - "version": "0.4.2", + "version": "0.4.3", "description": "Core utilities for working with LayerZero on-chain infrastructure", "repository": { "type": "git", @@ -40,7 +40,7 @@ "@ethersproject/constants": "~5.7.0", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", - "@layerzerolabs/test-devtools": "~0.4.1", + "@layerzerolabs/test-devtools": "~0.4.2", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", "@types/jest": "^29.5.12", diff --git a/packages/metadata-tools/CHANGELOG.md b/packages/metadata-tools/CHANGELOG.md new file mode 100644 index 000000000..77ee065bb --- /dev/null +++ b/packages/metadata-tools/CHANGELOG.md @@ -0,0 +1,10 @@ +# @layerzerolabs/metadata-tools + +## 0.0.2 + +### Patch Changes + +- d255778: add metadata-tools package +- Updated dependencies [1d2abff] + - @layerzerolabs/devtools-evm-hardhat@2.0.4 + - @layerzerolabs/ua-devtools@3.0.2 diff --git a/packages/metadata-tools/package.json b/packages/metadata-tools/package.json index 92460528f..5670645d5 100644 --- a/packages/metadata-tools/package.json +++ b/packages/metadata-tools/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/metadata-tools", - "version": "0.0.1", + "version": "0.0.2", "description": "LayerZero metadata API tools", "repository": { "type": "git", @@ -36,8 +36,8 @@ "test": "jest" }, "devDependencies": { - "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", - "@layerzerolabs/ua-devtools": "~3.0.1", + "@layerzerolabs/devtools-evm-hardhat": "~2.0.4", + "@layerzerolabs/ua-devtools": "~3.0.2", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", "@types/jest": "^29.5.12", @@ -47,8 +47,8 @@ "typescript": "^5.4.4" }, "peerDependencies": { - "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", - "@layerzerolabs/ua-devtools": "~3.0.1" + "@layerzerolabs/devtools-evm-hardhat": "~2.0.4", + "@layerzerolabs/ua-devtools": "~3.0.2" }, "publishConfig": { "access": "public" diff --git a/packages/oapp-alt-evm/package.json b/packages/oapp-alt-evm/package.json index ac7e6236e..ae2d46e64 100644 --- a/packages/oapp-alt-evm/package.json +++ b/packages/oapp-alt-evm/package.json @@ -43,7 +43,7 @@ "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", "@layerzerolabs/oapp-evm": "^0.3.0", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/toolbox-foundry": "^0.1.9", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2" diff --git a/packages/oapp-evm-upgradeable/package.json b/packages/oapp-evm-upgradeable/package.json index 553135797..76002940b 100644 --- a/packages/oapp-evm-upgradeable/package.json +++ b/packages/oapp-evm-upgradeable/package.json @@ -41,7 +41,7 @@ "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", "@layerzerolabs/oapp-evm": "^0.3.0", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/toolbox-foundry": "^0.1.9", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2" diff --git a/packages/oapp-evm/package.json b/packages/oapp-evm/package.json index 40983617e..fc662fe12 100644 --- a/packages/oapp-evm/package.json +++ b/packages/oapp-evm/package.json @@ -39,7 +39,7 @@ "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/toolbox-foundry": "^0.1.9", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2" diff --git a/packages/oft-alt-evm/package.json b/packages/oft-alt-evm/package.json index 629d87ca3..cd1d870c9 100644 --- a/packages/oft-alt-evm/package.json +++ b/packages/oft-alt-evm/package.json @@ -41,8 +41,8 @@ "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", "@layerzerolabs/oapp-alt-evm": "^0.0.1", "@layerzerolabs/oapp-evm": "^0.3.0", - "@layerzerolabs/oft-evm": "^3.0.0", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/oft-evm": "^3.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/toolbox-foundry": "^0.1.9", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2" diff --git a/packages/oft-evm-upgradeable/package.json b/packages/oft-evm-upgradeable/package.json index 6b9fe6a38..151bae0dd 100644 --- a/packages/oft-evm-upgradeable/package.json +++ b/packages/oft-evm-upgradeable/package.json @@ -49,8 +49,8 @@ "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", "@layerzerolabs/oapp-evm": "^0.3.0", "@layerzerolabs/oapp-evm-upgradeable": "^0.1.0", - "@layerzerolabs/oft-evm": "^3.0.0", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/oft-evm": "^3.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/toolbox-foundry": "^0.1.9", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2", diff --git a/packages/oft-evm/CHANGELOG.md b/packages/oft-evm/CHANGELOG.md index dc5141224..d65fc3d77 100644 --- a/packages/oft-evm/CHANGELOG.md +++ b/packages/oft-evm/CHANGELOG.md @@ -1,5 +1,17 @@ # @layerzerolabs/oft-evm +## 3.1.0 + +### Minor Changes + +- 60cc71c: changed license for MintBurnOFTAdapter and periphery contracts to MIT from UNLICENSED +- 5c47a41: Added MintBurnOFTAdapter + +### Patch Changes + +- e90a1d3: Improve quoteOFT default implementation to use totalSupply() + - @layerzerolabs/oapp-evm@0.3.0 + ## 3.0.0 ### Patch Changes diff --git a/packages/oft-evm/package.json b/packages/oft-evm/package.json index ef8400b3e..59d6da1b7 100644 --- a/packages/oft-evm/package.json +++ b/packages/oft-evm/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/oft-evm", - "version": "3.0.0", + "version": "3.1.0", "description": "LayerZero Labs reference EVM OmniChain Fungible Token (OFT) implementation", "keywords": [ "LayerZero", @@ -48,7 +48,7 @@ "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", "@layerzerolabs/oapp-evm": "^0.3.0", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/toolbox-foundry": "^0.1.9", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2", diff --git a/packages/omnicounter-devtools-evm/CHANGELOG.md b/packages/omnicounter-devtools-evm/CHANGELOG.md index e3161a03a..3d777b5bd 100644 --- a/packages/omnicounter-devtools-evm/CHANGELOG.md +++ b/packages/omnicounter-devtools-evm/CHANGELOG.md @@ -1,5 +1,19 @@ # @layerzerolabs/omnicounter-devtools-evm +## 5.0.2 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions +- Updated dependencies [1d2abff] + - @layerzerolabs/protocol-devtools-evm@3.0.3 + - @layerzerolabs/omnicounter-devtools@3.0.2 + - @layerzerolabs/protocol-devtools@1.1.2 + - @layerzerolabs/ua-devtools-evm@5.0.3 + - @layerzerolabs/devtools-evm@1.0.2 + - @layerzerolabs/ua-devtools@3.0.2 + - @layerzerolabs/devtools@0.4.3 + ## 5.0.1 ### Patch Changes diff --git a/packages/omnicounter-devtools-evm/package.json b/packages/omnicounter-devtools-evm/package.json index 795177a05..9f8ecaff0 100644 --- a/packages/omnicounter-devtools-evm/package.json +++ b/packages/omnicounter-devtools-evm/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/omnicounter-devtools-evm", - "version": "5.0.1", + "version": "5.0.2", "description": "Utilities for working with LayerZero OmniCounter contract", "repository": { "type": "git", @@ -33,14 +33,14 @@ "p-memoize": "~4.0.4" }, "devDependencies": { - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", "@layerzerolabs/lz-definitions": "^3.0.27", - "@layerzerolabs/omnicounter-devtools": "~3.0.1", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/protocol-devtools-evm": "~3.0.1", - "@layerzerolabs/ua-devtools": "~3.0.1", - "@layerzerolabs/ua-devtools-evm": "~5.0.1", + "@layerzerolabs/omnicounter-devtools": "~3.0.2", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/protocol-devtools-evm": "~3.0.3", + "@layerzerolabs/ua-devtools": "~3.0.2", + "@layerzerolabs/ua-devtools-evm": "~5.0.3", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", "@types/jest": "^29.5.12", @@ -52,14 +52,14 @@ "zod": "^3.22.4" }, "peerDependencies": { - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", "@layerzerolabs/lz-definitions": "^3.0.27", - "@layerzerolabs/omnicounter-devtools": "~3.0.1", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/protocol-devtools-evm": "~3.0.1", - "@layerzerolabs/ua-devtools": "~3.0.1", - "@layerzerolabs/ua-devtools-evm": "~5.0.1", + "@layerzerolabs/omnicounter-devtools": "~3.0.2", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/protocol-devtools-evm": "~3.0.3", + "@layerzerolabs/ua-devtools": "~3.0.2", + "@layerzerolabs/ua-devtools-evm": "~5.0.3", "zod": "^3.22.4" }, "publishConfig": { diff --git a/packages/omnicounter-devtools/CHANGELOG.md b/packages/omnicounter-devtools/CHANGELOG.md index 74b0f3d91..0c5f134ff 100644 --- a/packages/omnicounter-devtools/CHANGELOG.md +++ b/packages/omnicounter-devtools/CHANGELOG.md @@ -1,5 +1,14 @@ # @layerzerolabs/omnicounter-devtools +## 3.0.2 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions +- Updated dependencies [1d2abff] + - @layerzerolabs/protocol-devtools@1.1.2 + - @layerzerolabs/devtools@0.4.3 + ## 3.0.1 ### Patch Changes diff --git a/packages/omnicounter-devtools/package.json b/packages/omnicounter-devtools/package.json index 304350536..581ad417a 100644 --- a/packages/omnicounter-devtools/package.json +++ b/packages/omnicounter-devtools/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/omnicounter-devtools", - "version": "3.0.1", + "version": "3.0.2", "description": "Utilities for working with LayerZero OmniCounter contract", "repository": { "type": "git", @@ -31,9 +31,9 @@ "lint:fix": "eslint --fix '**/*.{js,ts,json}'" }, "devDependencies": { - "@layerzerolabs/devtools": "~0.4.2", + "@layerzerolabs/devtools": "~0.4.3", "@layerzerolabs/lz-definitions": "^3.0.27", - "@layerzerolabs/protocol-devtools": "~1.1.1", + "@layerzerolabs/protocol-devtools": "~1.1.2", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", "@types/jest": "^29.5.12", @@ -45,9 +45,9 @@ "zod": "^3.22.4" }, "peerDependencies": { - "@layerzerolabs/devtools": "~0.4.2", + "@layerzerolabs/devtools": "~0.4.3", "@layerzerolabs/lz-definitions": "^3.0.27", - "@layerzerolabs/protocol-devtools": "~1.1.1", + "@layerzerolabs/protocol-devtools": "~1.1.2", "zod": "^3.22.4" }, "publishConfig": { diff --git a/packages/onft-evm/package.json b/packages/onft-evm/package.json index 007d67496..fdbe0d563 100644 --- a/packages/onft-evm/package.json +++ b/packages/onft-evm/package.json @@ -46,7 +46,7 @@ "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/oapp-evm": "^0.3.0", - "@layerzerolabs/test-devtools-evm-foundry": "~5.1.0", + "@layerzerolabs/test-devtools-evm-foundry": "~6.0.0", "@layerzerolabs/toolbox-foundry": "~0.1.9", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2", diff --git a/packages/protocol-devtools-evm/CHANGELOG.md b/packages/protocol-devtools-evm/CHANGELOG.md index 7c44bdb4b..c0fc5b4e8 100644 --- a/packages/protocol-devtools-evm/CHANGELOG.md +++ b/packages/protocol-devtools-evm/CHANGELOG.md @@ -1,5 +1,15 @@ # @layerzerolabs/protocol-devtools-evm +## 3.0.3 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions +- Updated dependencies [1d2abff] + - @layerzerolabs/protocol-devtools@1.1.2 + - @layerzerolabs/devtools-evm@1.0.2 + - @layerzerolabs/devtools@0.4.3 + ## 3.0.2 ### Patch Changes diff --git a/packages/protocol-devtools-evm/package.json b/packages/protocol-devtools-evm/package.json index 3ede0c1e8..1a8555f53 100644 --- a/packages/protocol-devtools-evm/package.json +++ b/packages/protocol-devtools-evm/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/protocol-devtools-evm", - "version": "3.0.2", + "version": "3.0.3", "description": "Utilities for LayerZero EVM protocol contracts", "repository": { "type": "git", @@ -45,13 +45,13 @@ "@ethersproject/constants": "^5.7.0", "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.2", - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-sdk-v2": "^3.0.21", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/test-devtools": "~0.4.1", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/test-devtools": "~0.4.2", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", "@types/jest": "^29.5.12", @@ -70,11 +70,11 @@ "@ethersproject/constants": "^5.7.0", "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.0", - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", - "@layerzerolabs/protocol-devtools": "~1.1.1", + "@layerzerolabs/protocol-devtools": "~1.1.2", "zod": "^3.22.4" }, "publishConfig": { diff --git a/packages/protocol-devtools-solana/CHANGELOG.md b/packages/protocol-devtools-solana/CHANGELOG.md index ffbbd3a7a..672ea7ce2 100644 --- a/packages/protocol-devtools-solana/CHANGELOG.md +++ b/packages/protocol-devtools-solana/CHANGELOG.md @@ -1,5 +1,16 @@ # @layerzerolabs/protocol-devtools-solana +## 4.0.3 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions +- Updated dependencies [1d2abff] + - @layerzerolabs/protocol-devtools@1.1.2 + - @layerzerolabs/devtools-solana@1.0.4 + - @layerzerolabs/ua-devtools@3.0.2 + - @layerzerolabs/devtools@0.4.3 + ## 4.0.2 ### Patch Changes diff --git a/packages/protocol-devtools-solana/package.json b/packages/protocol-devtools-solana/package.json index 5404134a9..7bed54683 100644 --- a/packages/protocol-devtools-solana/package.json +++ b/packages/protocol-devtools-solana/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/protocol-devtools-solana", - "version": "4.0.2", + "version": "4.0.3", "description": "Utilities for LayerZero Solana protocol programs", "repository": { "type": "git", @@ -42,16 +42,16 @@ "p-memoize": "~4.0.4" }, "devDependencies": { - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-solana": "~1.0.3", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-solana": "~1.0.4", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-solana-sdk-v2": "^3.0.0", "@layerzerolabs/lz-v2-utilities": "^3.0.12", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/test-devtools": "~0.4.1", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/test-devtools": "~0.4.2", "@layerzerolabs/test-devtools-solana": "~0.0.4", - "@layerzerolabs/ua-devtools": "~3.0.1", + "@layerzerolabs/ua-devtools": "~3.0.2", "@solana/web3.js": "~1.95.8", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", @@ -67,14 +67,14 @@ "zod": "^3.22.4" }, "peerDependencies": { - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-solana": "~1.0.3", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-solana": "~1.0.4", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-solana-sdk-v2": "^3.0.0", "@layerzerolabs/lz-v2-utilities": "^3.0.12", - "@layerzerolabs/protocol-devtools": "^1.1.1", - "@layerzerolabs/ua-devtools": "^3.0.1", + "@layerzerolabs/protocol-devtools": "^1.1.2", + "@layerzerolabs/ua-devtools": "^3.0.2", "@solana/web3.js": "^1.95.8", "fp-ts": "^2.16.2", "zod": "^3.22.4" diff --git a/packages/protocol-devtools/CHANGELOG.md b/packages/protocol-devtools/CHANGELOG.md index 1040f75a1..df3f39210 100644 --- a/packages/protocol-devtools/CHANGELOG.md +++ b/packages/protocol-devtools/CHANGELOG.md @@ -1,5 +1,13 @@ # @layerzerolabs/protocol-devtools +## 1.1.2 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions +- Updated dependencies [1d2abff] + - @layerzerolabs/devtools@0.4.3 + ## 1.1.1 ### Patch Changes diff --git a/packages/protocol-devtools/package.json b/packages/protocol-devtools/package.json index fbb020eb1..7e9bfbfe2 100644 --- a/packages/protocol-devtools/package.json +++ b/packages/protocol-devtools/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/protocol-devtools", - "version": "1.1.1", + "version": "1.1.2", "description": "Utilities for working with LayerZero protocol contracts", "repository": { "type": "git", @@ -32,10 +32,10 @@ "test": "jest --ci" }, "devDependencies": { - "@layerzerolabs/devtools": "~0.4.2", + "@layerzerolabs/devtools": "~0.4.3", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", - "@layerzerolabs/test-devtools": "~0.4.1", + "@layerzerolabs/test-devtools": "~0.4.2", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", "@types/jest": "^29.5.12", @@ -48,7 +48,7 @@ "zod": "^3.22.4" }, "peerDependencies": { - "@layerzerolabs/devtools": "~0.4.2", + "@layerzerolabs/devtools": "~0.4.3", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "zod": "^3.22.4" diff --git a/packages/test-devtools-evm-foundry/CHANGELOG.md b/packages/test-devtools-evm-foundry/CHANGELOG.md index d286af4be..5b997d4ad 100644 --- a/packages/test-devtools-evm-foundry/CHANGELOG.md +++ b/packages/test-devtools-evm-foundry/CHANGELOG.md @@ -1,5 +1,15 @@ # @layerzerolabs/test-devtools-evm-foundry +## 6.0.0 + +### Patch Changes + +- Updated dependencies [60cc71c] +- Updated dependencies [5c47a41] +- Updated dependencies [e90a1d3] + - @layerzerolabs/oft-evm@3.1.0 + - @layerzerolabs/oapp-evm@0.3.0 + ## 5.1.0 ### Minor Changes diff --git a/packages/test-devtools-evm-foundry/package.json b/packages/test-devtools-evm-foundry/package.json index b4ae71775..cbfce777b 100644 --- a/packages/test-devtools-evm-foundry/package.json +++ b/packages/test-devtools-evm-foundry/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/test-devtools-evm-foundry", - "version": "5.1.0", + "version": "6.0.0", "description": "Helpers for testing LayerZero EVM contracts using foundry", "repository": { "type": "git", @@ -34,7 +34,7 @@ "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", "@layerzerolabs/oapp-evm": "^0.3.0", - "@layerzerolabs/oft-evm": "^3.0.0", + "@layerzerolabs/oft-evm": "^3.1.0", "@openzeppelin/contracts": "^4.9.5 || ^5.0.0", "@openzeppelin/contracts-upgradeable": "^4.9.5 || ^5.0.0" }, diff --git a/packages/test-devtools/CHANGELOG.md b/packages/test-devtools/CHANGELOG.md index 76e737b84..9119f4247 100644 --- a/packages/test-devtools/CHANGELOG.md +++ b/packages/test-devtools/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/test-devtools +## 0.4.2 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 0.4.1 ### Patch Changes diff --git a/packages/test-devtools/package.json b/packages/test-devtools/package.json index 1d90734cf..438b11bd2 100644 --- a/packages/test-devtools/package.json +++ b/packages/test-devtools/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/test-devtools", - "version": "0.4.1", + "version": "0.4.2", "description": "Internal utilities for testing LayerZero packages", "repository": { "type": "git", diff --git a/packages/toolbox-hardhat/CHANGELOG.md b/packages/toolbox-hardhat/CHANGELOG.md index 04a735f89..05b4c8dfa 100644 --- a/packages/toolbox-hardhat/CHANGELOG.md +++ b/packages/toolbox-hardhat/CHANGELOG.md @@ -1,5 +1,21 @@ # @layerzerolabs/toolbox-hardhat +## 0.6.3 + +### Patch Changes + +- d255778: add metadata-tools package +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions +- Updated dependencies [1d2abff] + - @layerzerolabs/ua-devtools-evm-hardhat@6.0.5 + - @layerzerolabs/protocol-devtools-evm@3.0.3 + - @layerzerolabs/devtools-evm-hardhat@2.0.4 + - @layerzerolabs/protocol-devtools@1.1.2 + - @layerzerolabs/ua-devtools-evm@5.0.3 + - @layerzerolabs/devtools-evm@1.0.2 + - @layerzerolabs/ua-devtools@3.0.2 + - @layerzerolabs/devtools@0.4.3 + ## 0.6.2 ### Patch Changes diff --git a/packages/toolbox-hardhat/package.json b/packages/toolbox-hardhat/package.json index 8f85b81fe..ba3ae872f 100644 --- a/packages/toolbox-hardhat/package.json +++ b/packages/toolbox-hardhat/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/toolbox-hardhat", - "version": "0.6.2", + "version": "0.6.3", "description": "One-stop-shop for developing LayerZero applications using hardhat", "repository": { "type": "git", @@ -35,20 +35,20 @@ "@ethersproject/bytes": "^5.7.0", "@ethersproject/contracts": "^5.7.0", "@ethersproject/hash": "^5.7.0", - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", + "@layerzerolabs/devtools-evm-hardhat": "~2.0.4", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-sdk-v1": "^3.0.12", "@layerzerolabs/lz-evm-sdk-v2": "^3.0.21", "@layerzerolabs/lz-v2-utilities": "^3.0.12", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/protocol-devtools-evm": "~3.0.2", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/protocol-devtools-evm": "~3.0.3", "@layerzerolabs/test-devtools-evm-hardhat": "~0.5.0", - "@layerzerolabs/ua-devtools": "~3.0.1", - "@layerzerolabs/ua-devtools-evm": "~5.0.1", - "@layerzerolabs/ua-devtools-evm-hardhat": "~6.0.4", + "@layerzerolabs/ua-devtools": "~3.0.2", + "@layerzerolabs/ua-devtools-evm": "~5.0.3", + "@layerzerolabs/ua-devtools-evm-hardhat": "~6.0.5", "fp-ts": "^2.16.2", "ink": "^3.2.0", "ink-gradient": "^2.0.0", diff --git a/packages/ua-devtools-evm-hardhat/CHANGELOG.md b/packages/ua-devtools-evm-hardhat/CHANGELOG.md index f47a5f004..83cf2c3f4 100644 --- a/packages/ua-devtools-evm-hardhat/CHANGELOG.md +++ b/packages/ua-devtools-evm-hardhat/CHANGELOG.md @@ -1,5 +1,19 @@ # @layerzerolabs/ua-devtools-evm-hardhat +## 6.0.5 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions +- Updated dependencies [1d2abff] + - @layerzerolabs/protocol-devtools-evm@3.0.3 + - @layerzerolabs/devtools-evm-hardhat@2.0.4 + - @layerzerolabs/protocol-devtools@1.1.2 + - @layerzerolabs/ua-devtools-evm@5.0.3 + - @layerzerolabs/devtools-evm@1.0.2 + - @layerzerolabs/ua-devtools@3.0.2 + - @layerzerolabs/devtools@0.4.3 + ## 6.0.4 ### Patch Changes diff --git a/packages/ua-devtools-evm-hardhat/package.json b/packages/ua-devtools-evm-hardhat/package.json index 3001538f9..a1b24d7d1 100644 --- a/packages/ua-devtools-evm-hardhat/package.json +++ b/packages/ua-devtools-evm-hardhat/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/ua-devtools-evm-hardhat", - "version": "6.0.4", + "version": "6.0.5", "description": "Hardhat utilities for working with LayerZero EVM contracts", "repository": { "type": "git", @@ -44,17 +44,17 @@ "@ethersproject/contracts": "^5.7.0", "@ethersproject/hash": "^5.7.0", "@ethersproject/providers": "^5.7.0", - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", + "@layerzerolabs/devtools-evm-hardhat": "~2.0.4", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", "@layerzerolabs/lz-v2-utilities": "^3.0.12", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/protocol-devtools-evm": "~3.0.1", - "@layerzerolabs/ua-devtools": "~3.0.1", - "@layerzerolabs/ua-devtools-evm": "~5.0.1", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/protocol-devtools-evm": "~3.0.3", + "@layerzerolabs/ua-devtools": "~3.0.2", + "@layerzerolabs/ua-devtools-evm": "~5.0.3", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", "@types/jest": "^29.5.12", @@ -73,15 +73,15 @@ "@ethersproject/bytes": "^5.7.0", "@ethersproject/contracts": "^5.7.0", "@ethersproject/hash": "^5.7.0", - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", + "@layerzerolabs/devtools-evm-hardhat": "~2.0.4", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/protocol-devtools-evm": "~3.0.1", - "@layerzerolabs/ua-devtools": "~3.0.1", - "@layerzerolabs/ua-devtools-evm": "~5.0.1", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/protocol-devtools-evm": "~3.0.3", + "@layerzerolabs/ua-devtools": "~3.0.2", + "@layerzerolabs/ua-devtools-evm": "~5.0.3", "ethers": "^5.7.2", "hardhat": "^2.22.10", "hardhat-deploy": "^0.12.1" diff --git a/packages/ua-devtools-evm/CHANGELOG.md b/packages/ua-devtools-evm/CHANGELOG.md index d2217b820..4a4afa253 100644 --- a/packages/ua-devtools-evm/CHANGELOG.md +++ b/packages/ua-devtools-evm/CHANGELOG.md @@ -1,5 +1,17 @@ # @layerzerolabs/ua-devtools-evm +## 5.0.3 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions +- Updated dependencies [1d2abff] + - @layerzerolabs/protocol-devtools-evm@3.0.3 + - @layerzerolabs/protocol-devtools@1.1.2 + - @layerzerolabs/devtools-evm@1.0.2 + - @layerzerolabs/ua-devtools@3.0.2 + - @layerzerolabs/devtools@0.4.3 + ## 5.0.2 ### Patch Changes diff --git a/packages/ua-devtools-evm/package.json b/packages/ua-devtools-evm/package.json index 915c09fd0..97fe20e66 100644 --- a/packages/ua-devtools-evm/package.json +++ b/packages/ua-devtools-evm/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/ua-devtools-evm", - "version": "5.0.2", + "version": "5.0.3", "description": "Utilities for working with LayerZero contracts", "repository": { "type": "git", @@ -40,15 +40,15 @@ "@ethersproject/constants": "^5.7.0", "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.0", - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-v2-utilities": "^3.0.12", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/protocol-devtools-evm": "~3.0.1", - "@layerzerolabs/test-devtools": "~0.4.1", - "@layerzerolabs/ua-devtools": "~3.0.1", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/protocol-devtools-evm": "~3.0.3", + "@layerzerolabs/test-devtools": "~0.4.2", + "@layerzerolabs/ua-devtools": "~3.0.2", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", "@types/jest": "^29.5.12", @@ -63,14 +63,14 @@ "peerDependencies": { "@ethersproject/constants": "^5.7.0", "@ethersproject/contracts": "^5.7.0", - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-v2-utilities": "^3.0.12", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/protocol-devtools-evm": "~3.0.1", - "@layerzerolabs/ua-devtools": "~3.0.1", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/protocol-devtools-evm": "~3.0.3", + "@layerzerolabs/ua-devtools": "~3.0.2", "zod": "^3.22.4" }, "publishConfig": { diff --git a/packages/ua-devtools-solana/CHANGELOG.md b/packages/ua-devtools-solana/CHANGELOG.md index de20dac94..d24479c50 100644 --- a/packages/ua-devtools-solana/CHANGELOG.md +++ b/packages/ua-devtools-solana/CHANGELOG.md @@ -1,5 +1,17 @@ # @layerzerolabs/ua-devtools-solana +## 4.0.4 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions +- Updated dependencies [1d2abff] + - @layerzerolabs/protocol-devtools-solana@4.0.3 + - @layerzerolabs/protocol-devtools@1.1.2 + - @layerzerolabs/devtools-solana@1.0.4 + - @layerzerolabs/ua-devtools@3.0.2 + - @layerzerolabs/devtools@0.4.3 + ## 4.0.3 ### Patch Changes diff --git a/packages/ua-devtools-solana/package.json b/packages/ua-devtools-solana/package.json index da69522b7..c751069f5 100644 --- a/packages/ua-devtools-solana/package.json +++ b/packages/ua-devtools-solana/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/ua-devtools-solana", - "version": "4.0.3", + "version": "4.0.4", "description": "Utilities for LayerZero Solana projects", "repository": { "type": "git", @@ -42,18 +42,18 @@ "p-memoize": "~4.0.4" }, "devDependencies": { - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-solana": "~1.0.3", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-solana": "~1.0.4", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-solana-sdk-v2": "^3.0.0", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/oft-v2-solana-sdk": "^3.0.0", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/protocol-devtools-solana": "~4.0.2", - "@layerzerolabs/test-devtools": "~0.4.1", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/protocol-devtools-solana": "~4.0.3", + "@layerzerolabs/test-devtools": "~0.4.2", "@layerzerolabs/test-devtools-solana": "~0.0.4", - "@layerzerolabs/ua-devtools": "~3.0.1", + "@layerzerolabs/ua-devtools": "~3.0.2", "@metaplex-foundation/mpl-toolbox": "^0.9.4", "@metaplex-foundation/umi": "^0.9.2", "@metaplex-foundation/umi-bundle-defaults": "^0.9.2", @@ -73,16 +73,16 @@ "zod": "^3.22.4" }, "peerDependencies": { - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-solana": "~1.0.3", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-solana": "~1.0.4", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-solana-sdk-v2": "^3.0.0", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/oft-v2-solana-sdk": "^3.0.0", - "@layerzerolabs/protocol-devtools": "^1.1.1", - "@layerzerolabs/protocol-devtools-solana": "~4.0.2", - "@layerzerolabs/ua-devtools": "^3.0.1", + "@layerzerolabs/protocol-devtools": "^1.1.2", + "@layerzerolabs/protocol-devtools-solana": "~4.0.3", + "@layerzerolabs/ua-devtools": "^3.0.2", "@solana/web3.js": "^1.95.8", "fp-ts": "^2.16.2", "zod": "^3.22.4" diff --git a/packages/ua-devtools/CHANGELOG.md b/packages/ua-devtools/CHANGELOG.md index 02da0f1c1..606561e4a 100644 --- a/packages/ua-devtools/CHANGELOG.md +++ b/packages/ua-devtools/CHANGELOG.md @@ -1,5 +1,14 @@ # @layerzerolabs/ua-devtools +## 3.0.2 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions +- Updated dependencies [1d2abff] + - @layerzerolabs/protocol-devtools@1.1.2 + - @layerzerolabs/devtools@0.4.3 + ## 3.0.1 ### Patch Changes diff --git a/packages/ua-devtools/package.json b/packages/ua-devtools/package.json index 28f6ae818..7b3055a42 100644 --- a/packages/ua-devtools/package.json +++ b/packages/ua-devtools/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/ua-devtools", - "version": "3.0.1", + "version": "3.0.2", "description": "Utilities for working with LayerZero contracts", "repository": { "type": "git", @@ -31,12 +31,12 @@ "test": "jest --ci" }, "devDependencies": { - "@layerzerolabs/devtools": "~0.4.2", + "@layerzerolabs/devtools": "~0.4.3", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-v2-utilities": "^3.0.12", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/test-devtools": "~0.4.1", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/test-devtools": "~0.4.2", "@swc/core": "^1.4.0", "@swc/jest": "^0.2.36", "@types/jest": "^29.5.12", @@ -49,11 +49,11 @@ "zod": "^3.22.4" }, "peerDependencies": { - "@layerzerolabs/devtools": "~0.4.2", + "@layerzerolabs/devtools": "~0.4.3", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-v2-utilities": "^3.0.12", - "@layerzerolabs/protocol-devtools": "~1.1.1", + "@layerzerolabs/protocol-devtools": "~1.1.2", "zod": "^3.22.4" }, "publishConfig": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 19582aee9..525e487dd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -102,7 +102,7 @@ importers: specifier: ^0.3.0 version: link:../../packages/oapp-evm '@layerzerolabs/oft-evm': - specifier: ^3.0.0 + specifier: ^3.1.0 version: link:../../packages/oft-evm '@layerzerolabs/prettier-config-next': specifier: ^2.3.39 @@ -111,13 +111,13 @@ importers: specifier: ^3.0.12 version: 3.0.12(typescript@5.5.3) '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../../packages/test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ~0.1.9 version: link:../../packages/toolbox-foundry '@layerzerolabs/toolbox-hardhat': - specifier: ~0.6.1 + specifier: ~0.6.3 version: link:../../packages/toolbox-hardhat '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 @@ -216,7 +216,7 @@ importers: specifier: ^0.3.0 version: link:../../packages/oapp-evm '@layerzerolabs/oft-evm': - specifier: ^3.0.0 + specifier: ^3.1.0 version: link:../../packages/oft-evm '@layerzerolabs/prettier-config-next': specifier: ^2.3.39 @@ -225,13 +225,13 @@ importers: specifier: ^3.0.12 version: 3.0.12(typescript@5.5.3) '@layerzerolabs/test-devtools-evm-foundry': - specifier: ^5.0.0 + specifier: ^6.0.0 version: link:../../packages/test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ~0.1.9 version: link:../../packages/toolbox-foundry '@layerzerolabs/toolbox-hardhat': - specifier: ~0.6.1 + specifier: ~0.6.3 version: link:../../packages/toolbox-hardhat '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 @@ -336,13 +336,13 @@ importers: specifier: ^3.0.12 version: 3.0.12(typescript@5.5.3) '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../../packages/test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ~0.1.9 version: link:../../packages/toolbox-foundry '@layerzerolabs/toolbox-hardhat': - specifier: ~0.6.1 + specifier: ~0.6.3 version: link:../../packages/toolbox-hardhat '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 @@ -447,13 +447,13 @@ importers: specifier: ^3.0.12 version: 3.0.12(typescript@5.5.3) '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../../packages/test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ~0.1.9 version: link:../../packages/toolbox-foundry '@layerzerolabs/toolbox-hardhat': - specifier: ~0.6.1 + specifier: ~0.6.3 version: link:../../packages/toolbox-hardhat '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 @@ -531,7 +531,7 @@ importers: specifier: ^7.23.9 version: 7.23.9 '@layerzerolabs/devtools-evm-hardhat': - specifier: ^2.0.3 + specifier: ^2.0.4 version: link:../../packages/devtools-evm-hardhat '@layerzerolabs/eslint-config-next': specifier: ~2.3.39 @@ -555,7 +555,7 @@ importers: specifier: ^0.3.0 version: link:../../packages/oapp-evm '@layerzerolabs/oft-evm': - specifier: ^3.0.0 + specifier: ^3.1.0 version: link:../../packages/oft-evm '@layerzerolabs/prettier-config-next': specifier: ^2.3.39 @@ -564,13 +564,13 @@ importers: specifier: ^3.0.12 version: 3.0.12(typescript@5.5.3) '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../../packages/test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ~0.1.9 version: link:../../packages/toolbox-foundry '@layerzerolabs/toolbox-hardhat': - specifier: ~0.6.1 + specifier: ~0.6.3 version: link:../../packages/toolbox-hardhat '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 @@ -669,7 +669,7 @@ importers: specifier: ^0.3.0 version: link:../../packages/oapp-evm '@layerzerolabs/oft-evm': - specifier: ^3.0.0 + specifier: ^3.1.0 version: link:../../packages/oft-evm '@layerzerolabs/prettier-config-next': specifier: ^2.3.39 @@ -678,13 +678,13 @@ importers: specifier: ^3.0.12 version: 3.0.12(typescript@5.5.3) '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../../packages/test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ~0.1.9 version: link:../../packages/toolbox-foundry '@layerzerolabs/toolbox-hardhat': - specifier: ~0.6.1 + specifier: ~0.6.3 version: link:../../packages/toolbox-hardhat '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 @@ -765,16 +765,16 @@ importers: specifier: ^5.7.0 version: 5.7.0 '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../../packages/devtools '@layerzerolabs/devtools-evm': - specifier: ~1.0.1 + specifier: ~1.0.2 version: link:../../packages/devtools-evm '@layerzerolabs/devtools-evm-hardhat': - specifier: ^2.0.3 + specifier: ^2.0.4 version: link:../../packages/devtools-evm-hardhat '@layerzerolabs/devtools-solana': - specifier: ~1.0.2 + specifier: ~1.0.4 version: link:../../packages/devtools-solana '@layerzerolabs/eslint-config-next': specifier: ~2.3.39 @@ -804,7 +804,7 @@ importers: specifier: ^0.3.0 version: link:../../packages/oapp-evm '@layerzerolabs/oft-evm': - specifier: ^3.0.0 + specifier: ^3.1.0 version: link:../../packages/oft-evm '@layerzerolabs/oft-v2-solana-sdk': specifier: 3.0.0 @@ -813,19 +813,19 @@ importers: specifier: ^2.3.39 version: 2.3.44 '@layerzerolabs/protocol-devtools': - specifier: ^1.1.1 + specifier: ^1.1.2 version: link:../../packages/protocol-devtools '@layerzerolabs/protocol-devtools-evm': - specifier: ~3.0.1 + specifier: ~3.0.3 version: link:../../packages/protocol-devtools-evm '@layerzerolabs/protocol-devtools-solana': - specifier: ^4.0.1 + specifier: ^4.0.3 version: link:../../packages/protocol-devtools-solana '@layerzerolabs/solhint-config': specifier: ^3.0.12 version: 3.0.12(typescript@5.5.3) '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../../packages/test-devtools-evm-foundry '@layerzerolabs/test-devtools-evm-hardhat': specifier: ~0.5.0 @@ -834,19 +834,19 @@ importers: specifier: ~0.1.9 version: link:../../packages/toolbox-foundry '@layerzerolabs/toolbox-hardhat': - specifier: ~0.6.1 + specifier: ~0.6.3 version: link:../../packages/toolbox-hardhat '@layerzerolabs/ua-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../../packages/ua-devtools '@layerzerolabs/ua-devtools-evm': - specifier: ~5.0.1 + specifier: ~5.0.3 version: link:../../packages/ua-devtools-evm '@layerzerolabs/ua-devtools-evm-hardhat': - specifier: ~6.0.4 + specifier: ~6.0.5 version: link:../../packages/ua-devtools-evm-hardhat '@layerzerolabs/ua-devtools-solana': - specifier: ~4.0.2 + specifier: ~4.0.4 version: link:../../packages/ua-devtools-solana '@metaplex-foundation/mpl-token-metadata': specifier: ^3.2.1 @@ -987,7 +987,7 @@ importers: specifier: ^7.23.9 version: 7.23.9 '@layerzerolabs/devtools-evm-hardhat': - specifier: ^2.0.3 + specifier: ^2.0.4 version: link:../../packages/devtools-evm-hardhat '@layerzerolabs/eslint-config-next': specifier: ~2.3.39 @@ -1017,7 +1017,7 @@ importers: specifier: ^0.1.0 version: link:../../packages/oapp-evm-upgradeable '@layerzerolabs/oft-evm': - specifier: ^3.0.0 + specifier: ^3.1.0 version: link:../../packages/oft-evm '@layerzerolabs/oft-evm-upgradeable': specifier: ^3.0.0 @@ -1029,13 +1029,13 @@ importers: specifier: ^3.0.12 version: 3.0.12(typescript@5.5.3) '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../../packages/test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ~0.1.9 version: link:../../packages/toolbox-foundry '@layerzerolabs/toolbox-hardhat': - specifier: ~0.6.2 + specifier: ~0.6.3 version: link:../../packages/toolbox-hardhat '@nomiclabs/hardhat-ethers': specifier: ^2.2.3 @@ -1149,13 +1149,13 @@ importers: specifier: ^3.0.12 version: 3.0.12(typescript@5.5.3) '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../../packages/test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ~0.1.9 version: link:../../packages/toolbox-foundry '@layerzerolabs/toolbox-hardhat': - specifier: ~0.6.1 + specifier: ~0.6.3 version: link:../../packages/toolbox-hardhat '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 @@ -1260,13 +1260,13 @@ importers: specifier: ^3.0.12 version: 3.0.12(typescript@5.5.3) '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../../packages/test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ~0.1.9 version: link:../../packages/toolbox-foundry '@layerzerolabs/toolbox-hardhat': - specifier: ~0.6.1 + specifier: ~0.6.3 version: link:../../packages/toolbox-hardhat '@matterlabs/hardhat-zksync-deploy': specifier: ~0.9.0 @@ -1380,13 +1380,13 @@ importers: specifier: ^3.0.12 version: 3.0.12(typescript@5.5.3) '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../../packages/test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ~0.1.9 version: link:../../packages/toolbox-foundry '@layerzerolabs/toolbox-hardhat': - specifier: ~0.6.1 + specifier: ~0.6.3 version: link:../../packages/toolbox-hardhat '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 @@ -1708,7 +1708,7 @@ importers: specifier: ^3.0.27 version: 3.0.27 '@layerzerolabs/test-devtools': - specifier: ~0.4.1 + specifier: ~0.4.2 version: link:../test-devtools '@swc/core': specifier: ^1.4.0 @@ -1839,7 +1839,7 @@ importers: specifier: ^5.7.2 version: 5.7.2 '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../devtools '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -1848,7 +1848,7 @@ importers: specifier: ^3.0.27 version: 3.0.27 '@layerzerolabs/test-devtools': - specifier: ~0.4.1 + specifier: ~0.4.2 version: link:../test-devtools '@safe-global/safe-core-sdk-types': specifier: ^2.3.0 @@ -1924,10 +1924,10 @@ importers: specifier: ^5.7.0 version: 5.7.0 '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../devtools '@layerzerolabs/devtools-evm': - specifier: ~1.0.1 + specifier: ~1.0.2 version: link:../devtools-evm '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -1939,7 +1939,7 @@ importers: specifier: ^3.0.12 version: 3.0.12 '@layerzerolabs/test-devtools': - specifier: ~0.4.1 + specifier: ~0.4.2 version: link:../test-devtools '@layerzerolabs/test-devtools-evm-hardhat': specifier: ~0.5.0 @@ -2003,7 +2003,7 @@ importers: version: 4.0.4 devDependencies: '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../devtools '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -2012,7 +2012,7 @@ importers: specifier: ^3.0.27 version: 3.0.27 '@layerzerolabs/test-devtools': - specifier: ~0.4.1 + specifier: ~0.4.2 version: link:../test-devtools '@layerzerolabs/test-devtools-solana': specifier: ~0.0.4 @@ -2082,7 +2082,7 @@ importers: version: 4.0.4 devDependencies: '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../devtools '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -2243,10 +2243,10 @@ importers: packages/metadata-tools: devDependencies: '@layerzerolabs/devtools-evm-hardhat': - specifier: ~2.0.3 + specifier: ~2.0.4 version: link:../devtools-evm-hardhat '@layerzerolabs/ua-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../ua-devtools '@swc/core': specifier: ^1.4.0 @@ -2289,7 +2289,7 @@ importers: specifier: ^0.3.0 version: link:../oapp-evm '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ^0.1.9 @@ -2317,7 +2317,7 @@ importers: specifier: ^3.0.12 version: 3.0.12(@openzeppelin/contracts-upgradeable@5.0.2)(@openzeppelin/contracts@5.0.2)(hardhat-deploy@0.12.4) '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ^0.1.9 @@ -2348,7 +2348,7 @@ importers: specifier: ^0.3.0 version: link:../oapp-evm '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ^0.1.9 @@ -2378,10 +2378,10 @@ importers: specifier: ^0.3.0 version: link:../oapp-evm '@layerzerolabs/oft-evm': - specifier: ^3.0.0 + specifier: ^3.1.0 version: link:../oft-evm '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ^0.1.9 @@ -2408,7 +2408,7 @@ importers: specifier: ^0.3.0 version: link:../oapp-evm '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ^0.1.9 @@ -2441,10 +2441,10 @@ importers: specifier: ^0.1.0 version: link:../oapp-evm-upgradeable '@layerzerolabs/oft-evm': - specifier: ^3.0.0 + specifier: ^3.1.0 version: link:../oft-evm '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ^0.1.9 @@ -2462,13 +2462,13 @@ importers: packages/omnicounter-devtools: devDependencies: '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../devtools '@layerzerolabs/lz-definitions': specifier: ^3.0.27 version: 3.0.27 '@layerzerolabs/protocol-devtools': - specifier: ~1.1.1 + specifier: ~1.1.2 version: link:../protocol-devtools '@swc/core': specifier: ^1.4.0 @@ -2505,28 +2505,28 @@ importers: version: 4.0.4 devDependencies: '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../devtools '@layerzerolabs/devtools-evm': - specifier: ~1.0.1 + specifier: ~1.0.2 version: link:../devtools-evm '@layerzerolabs/lz-definitions': specifier: ^3.0.27 version: 3.0.27 '@layerzerolabs/omnicounter-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../omnicounter-devtools '@layerzerolabs/protocol-devtools': - specifier: ~1.1.1 + specifier: ~1.1.2 version: link:../protocol-devtools '@layerzerolabs/protocol-devtools-evm': - specifier: ~3.0.1 + specifier: ~3.0.3 version: link:../protocol-devtools-evm '@layerzerolabs/ua-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../ua-devtools '@layerzerolabs/ua-devtools-evm': - specifier: ~5.0.1 + specifier: ~5.0.3 version: link:../ua-devtools-evm '@swc/core': specifier: ^1.4.0 @@ -2574,7 +2574,7 @@ importers: specifier: ^0.3.0 version: link:../oapp-evm '@layerzerolabs/test-devtools-evm-foundry': - specifier: ~5.1.0 + specifier: ~6.0.0 version: link:../test-devtools-evm-foundry '@layerzerolabs/toolbox-foundry': specifier: ~0.1.9 @@ -2592,7 +2592,7 @@ importers: packages/protocol-devtools: devDependencies: '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../devtools '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -2601,7 +2601,7 @@ importers: specifier: ^3.0.27 version: 3.0.27 '@layerzerolabs/test-devtools': - specifier: ~0.4.1 + specifier: ~0.4.2 version: link:../test-devtools '@swc/core': specifier: ^1.4.0 @@ -2659,10 +2659,10 @@ importers: specifier: ^5.7.2 version: 5.7.2 '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../devtools '@layerzerolabs/devtools-evm': - specifier: ~1.0.1 + specifier: ~1.0.2 version: link:../devtools-evm '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -2674,10 +2674,10 @@ importers: specifier: ^3.0.21 version: 3.0.22 '@layerzerolabs/protocol-devtools': - specifier: ~1.1.1 + specifier: ~1.1.2 version: link:../protocol-devtools '@layerzerolabs/test-devtools': - specifier: ~0.4.1 + specifier: ~0.4.2 version: link:../test-devtools '@swc/core': specifier: ^1.4.0 @@ -2726,10 +2726,10 @@ importers: version: 4.0.4 devDependencies: '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../devtools '@layerzerolabs/devtools-solana': - specifier: ~1.0.3 + specifier: ~1.0.4 version: link:../devtools-solana '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -2744,16 +2744,16 @@ importers: specifier: ^3.0.12 version: 3.0.12 '@layerzerolabs/protocol-devtools': - specifier: ~1.1.1 + specifier: ~1.1.2 version: link:../protocol-devtools '@layerzerolabs/test-devtools': - specifier: ~0.4.1 + specifier: ~0.4.2 version: link:../test-devtools '@layerzerolabs/test-devtools-solana': specifier: ~0.0.4 version: link:../test-devtools-solana '@layerzerolabs/ua-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../ua-devtools '@solana/web3.js': specifier: ~1.95.8 @@ -2829,7 +2829,7 @@ importers: specifier: ^0.3.0 version: link:../oapp-evm '@layerzerolabs/oft-evm': - specifier: ^3.0.0 + specifier: ^3.1.0 version: link:../oft-evm devDependencies: '@layerzerolabs/lz-evm-messagelib-v2': @@ -3004,13 +3004,13 @@ importers: specifier: ^5.7.0 version: 5.7.0 '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../devtools '@layerzerolabs/devtools-evm': - specifier: ~1.0.1 + specifier: ~1.0.2 version: link:../devtools-evm '@layerzerolabs/devtools-evm-hardhat': - specifier: ~2.0.3 + specifier: ~2.0.4 version: link:../devtools-evm-hardhat '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -3028,22 +3028,22 @@ importers: specifier: ^3.0.12 version: 3.0.12 '@layerzerolabs/protocol-devtools': - specifier: ~1.1.1 + specifier: ~1.1.2 version: link:../protocol-devtools '@layerzerolabs/protocol-devtools-evm': - specifier: ~3.0.2 + specifier: ~3.0.3 version: link:../protocol-devtools-evm '@layerzerolabs/test-devtools-evm-hardhat': specifier: ~0.5.0 version: link:../test-devtools-evm-hardhat '@layerzerolabs/ua-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../ua-devtools '@layerzerolabs/ua-devtools-evm': - specifier: ~5.0.1 + specifier: ~5.0.3 version: link:../ua-devtools-evm '@layerzerolabs/ua-devtools-evm-hardhat': - specifier: ~6.0.4 + specifier: ~6.0.5 version: link:../ua-devtools-evm-hardhat '@nomicfoundation/hardhat-ethers': specifier: ^3.0.2 @@ -3104,7 +3104,7 @@ importers: packages/ua-devtools: devDependencies: '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../devtools '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -3116,10 +3116,10 @@ importers: specifier: ^3.0.12 version: 3.0.12 '@layerzerolabs/protocol-devtools': - specifier: ~1.1.1 + specifier: ~1.1.2 version: link:../protocol-devtools '@layerzerolabs/test-devtools': - specifier: ~0.4.1 + specifier: ~0.4.2 version: link:../test-devtools '@swc/core': specifier: ^1.4.0 @@ -3177,10 +3177,10 @@ importers: specifier: ^5.7.0 version: 5.7.2 '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../devtools '@layerzerolabs/devtools-evm': - specifier: ~1.0.1 + specifier: ~1.0.2 version: link:../devtools-evm '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -3192,16 +3192,16 @@ importers: specifier: ^3.0.12 version: 3.0.12 '@layerzerolabs/protocol-devtools': - specifier: ~1.1.1 + specifier: ~1.1.2 version: link:../protocol-devtools '@layerzerolabs/protocol-devtools-evm': - specifier: ~3.0.1 + specifier: ~3.0.3 version: link:../protocol-devtools-evm '@layerzerolabs/test-devtools': - specifier: ~0.4.1 + specifier: ~0.4.2 version: link:../test-devtools '@layerzerolabs/ua-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../ua-devtools '@swc/core': specifier: ^1.4.0 @@ -3259,13 +3259,13 @@ importers: specifier: ^5.7.0 version: 5.7.2 '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../devtools '@layerzerolabs/devtools-evm': - specifier: ~1.0.1 + specifier: ~1.0.2 version: link:../devtools-evm '@layerzerolabs/devtools-evm-hardhat': - specifier: ~2.0.3 + specifier: ~2.0.4 version: link:../devtools-evm-hardhat '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -3280,16 +3280,16 @@ importers: specifier: ^3.0.12 version: 3.0.12 '@layerzerolabs/protocol-devtools': - specifier: ~1.1.1 + specifier: ~1.1.2 version: link:../protocol-devtools '@layerzerolabs/protocol-devtools-evm': - specifier: ~3.0.1 + specifier: ~3.0.3 version: link:../protocol-devtools-evm '@layerzerolabs/ua-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../ua-devtools '@layerzerolabs/ua-devtools-evm': - specifier: ~5.0.1 + specifier: ~5.0.3 version: link:../ua-devtools-evm '@swc/core': specifier: ^1.4.0 @@ -3344,10 +3344,10 @@ importers: version: 4.0.4 devDependencies: '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../devtools '@layerzerolabs/devtools-solana': - specifier: ~1.0.3 + specifier: ~1.0.4 version: link:../devtools-solana '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -3365,19 +3365,19 @@ importers: specifier: ^3.0.0 version: 3.0.0(fastestsmallesttextencoderdecoder@1.0.22) '@layerzerolabs/protocol-devtools': - specifier: ~1.1.1 + specifier: ~1.1.2 version: link:../protocol-devtools '@layerzerolabs/protocol-devtools-solana': - specifier: ~4.0.2 + specifier: ~4.0.3 version: link:../protocol-devtools-solana '@layerzerolabs/test-devtools': - specifier: ~0.4.1 + specifier: ~0.4.2 version: link:../test-devtools '@layerzerolabs/test-devtools-solana': specifier: ~0.0.4 version: link:../test-devtools-solana '@layerzerolabs/ua-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../ua-devtools '@metaplex-foundation/mpl-toolbox': specifier: ^0.9.4 @@ -3506,16 +3506,16 @@ importers: specifier: ^5.7.0 version: 5.7.0 '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../../packages/devtools '@layerzerolabs/devtools-cli': specifier: ~0.0.4 version: link:../../packages/devtools-cli '@layerzerolabs/devtools-evm': - specifier: ~1.0.1 + specifier: ~1.0.2 version: link:../../packages/devtools-evm '@layerzerolabs/devtools-evm-hardhat': - specifier: ~2.0.3 + specifier: ~2.0.4 version: link:../../packages/devtools-evm-hardhat '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -3542,34 +3542,34 @@ importers: specifier: ^0.3.0 version: link:../../packages/oapp-evm '@layerzerolabs/omnicounter-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../../packages/omnicounter-devtools '@layerzerolabs/omnicounter-devtools-evm': - specifier: ~5.0.1 + specifier: ~5.0.2 version: link:../../packages/omnicounter-devtools-evm '@layerzerolabs/protocol-devtools': - specifier: ~1.1.1 + specifier: ~1.1.2 version: link:../../packages/protocol-devtools '@layerzerolabs/protocol-devtools-evm': - specifier: ~3.0.2 + specifier: ~3.0.3 version: link:../../packages/protocol-devtools-evm '@layerzerolabs/test-devtools-evm-hardhat': specifier: ~0.5.0 version: link:../../packages/test-devtools-evm-hardhat '@layerzerolabs/test-setup-devtools-evm-hardhat': - specifier: ~6.0.1 + specifier: ~6.0.2 version: link:../test-setup-devtools-evm-hardhat '@layerzerolabs/toolbox-hardhat': - specifier: ~0.6.2 + specifier: ~0.6.3 version: link:../../packages/toolbox-hardhat '@layerzerolabs/ua-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../../packages/ua-devtools '@layerzerolabs/ua-devtools-evm': - specifier: ~5.0.1 + specifier: ~5.0.3 version: link:../../packages/ua-devtools-evm '@layerzerolabs/ua-devtools-evm-hardhat': - specifier: ~6.0.4 + specifier: ~6.0.5 version: link:../../packages/ua-devtools-evm-hardhat '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 @@ -3647,13 +3647,13 @@ importers: specifier: ^5.7.0 version: 5.7.0 '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../../packages/devtools '@layerzerolabs/devtools-evm': - specifier: ~1.0.1 + specifier: ~1.0.2 version: link:../../packages/devtools-evm '@layerzerolabs/devtools-evm-hardhat': - specifier: ~2.0.3 + specifier: ~2.0.4 version: link:../../packages/devtools-evm-hardhat '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -3677,28 +3677,28 @@ importers: specifier: ^3.0.12 version: 3.0.12 '@layerzerolabs/omnicounter-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../../packages/omnicounter-devtools '@layerzerolabs/omnicounter-devtools-evm': - specifier: ~5.0.1 + specifier: ~5.0.2 version: link:../../packages/omnicounter-devtools-evm '@layerzerolabs/protocol-devtools': - specifier: ~1.1.1 + specifier: ~1.1.2 version: link:../../packages/protocol-devtools '@layerzerolabs/protocol-devtools-evm': - specifier: ~3.0.2 + specifier: ~3.0.3 version: link:../../packages/protocol-devtools-evm '@layerzerolabs/test-devtools': - specifier: ~0.4.1 + specifier: ~0.4.2 version: link:../../packages/test-devtools '@layerzerolabs/test-devtools-evm-hardhat': specifier: ~0.5.0 version: link:../../packages/test-devtools-evm-hardhat '@layerzerolabs/test-setup-devtools-evm-hardhat': - specifier: ~6.0.1 + specifier: ~6.0.2 version: link:../test-setup-devtools-evm-hardhat '@layerzerolabs/toolbox-hardhat': - specifier: ~0.6.2 + specifier: ~0.6.3 version: link:../../packages/toolbox-hardhat '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 @@ -3767,16 +3767,16 @@ importers: specifier: ^5.7.2 version: 5.7.2 '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../../packages/devtools '@layerzerolabs/devtools-evm': - specifier: ~1.0.1 + specifier: ~1.0.2 version: link:../../packages/devtools-evm '@layerzerolabs/lz-definitions': specifier: ^3.0.27 version: 3.0.27 '@layerzerolabs/test-devtools': - specifier: ~0.4.1 + specifier: ~0.4.2 version: link:../../packages/test-devtools '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 @@ -3899,13 +3899,13 @@ importers: specifier: ^5.7.2 version: 5.7.2 '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../../packages/devtools '@layerzerolabs/devtools-evm': - specifier: ~1.0.1 + specifier: ~1.0.2 version: link:../../packages/devtools-evm '@layerzerolabs/devtools-evm-hardhat': - specifier: ~2.0.3 + specifier: ~2.0.4 version: link:../../packages/devtools-evm-hardhat '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -3914,16 +3914,16 @@ importers: specifier: ^3.0.27 version: 3.0.27 '@layerzerolabs/protocol-devtools': - specifier: ~1.1.1 + specifier: ~1.1.2 version: link:../../packages/protocol-devtools '@layerzerolabs/protocol-devtools-evm': - specifier: ~3.0.1 + specifier: ~3.0.3 version: link:../../packages/protocol-devtools-evm '@layerzerolabs/ua-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../../packages/ua-devtools '@layerzerolabs/ua-devtools-evm': - specifier: ~5.0.1 + specifier: ~5.0.3 version: link:../../packages/ua-devtools-evm '@types/jest': specifier: ^29.5.12 @@ -3977,13 +3977,13 @@ importers: specifier: ^5.7.0 version: 5.7.0 '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../../packages/devtools '@layerzerolabs/devtools-evm': - specifier: ~1.0.1 + specifier: ~1.0.2 version: link:../../packages/devtools-evm '@layerzerolabs/devtools-evm-hardhat': - specifier: ~2.0.3 + specifier: ~2.0.4 version: link:../../packages/devtools-evm-hardhat '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -4010,34 +4010,34 @@ importers: specifier: ^0.3.0 version: link:../../packages/oapp-evm '@layerzerolabs/omnicounter-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../../packages/omnicounter-devtools '@layerzerolabs/omnicounter-devtools-evm': - specifier: ~5.0.1 + specifier: ~5.0.2 version: link:../../packages/omnicounter-devtools-evm '@layerzerolabs/protocol-devtools': - specifier: ~1.1.1 + specifier: ~1.1.2 version: link:../../packages/protocol-devtools '@layerzerolabs/protocol-devtools-evm': - specifier: ~3.0.2 + specifier: ~3.0.3 version: link:../../packages/protocol-devtools-evm '@layerzerolabs/test-devtools-evm-hardhat': specifier: ~0.5.0 version: link:../../packages/test-devtools-evm-hardhat '@layerzerolabs/test-setup-devtools-evm-hardhat': - specifier: ~6.0.1 + specifier: ~6.0.2 version: link:../test-setup-devtools-evm-hardhat '@layerzerolabs/toolbox-hardhat': - specifier: ~0.6.2 + specifier: ~0.6.3 version: link:../../packages/toolbox-hardhat '@layerzerolabs/ua-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../../packages/ua-devtools '@layerzerolabs/ua-devtools-evm': - specifier: ~5.0.1 + specifier: ~5.0.3 version: link:../../packages/ua-devtools-evm '@layerzerolabs/ua-devtools-evm-hardhat': - specifier: ~6.0.4 + specifier: ~6.0.5 version: link:../../packages/ua-devtools-evm-hardhat '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 @@ -4115,13 +4115,13 @@ importers: specifier: ^5.7.0 version: 5.7.0 '@layerzerolabs/devtools': - specifier: ~0.4.2 + specifier: ~0.4.3 version: link:../../packages/devtools '@layerzerolabs/devtools-evm': - specifier: ~1.0.1 + specifier: ~1.0.2 version: link:../../packages/devtools-evm '@layerzerolabs/devtools-evm-hardhat': - specifier: ~2.0.3 + specifier: ~2.0.4 version: link:../../packages/devtools-evm-hardhat '@layerzerolabs/io-devtools': specifier: ~0.1.14 @@ -4154,34 +4154,34 @@ importers: specifier: ^0.3.0 version: link:../../packages/oapp-evm '@layerzerolabs/omnicounter-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../../packages/omnicounter-devtools '@layerzerolabs/omnicounter-devtools-evm': - specifier: ~5.0.1 + specifier: ~5.0.2 version: link:../../packages/omnicounter-devtools-evm '@layerzerolabs/protocol-devtools': - specifier: ~1.1.1 + specifier: ~1.1.2 version: link:../../packages/protocol-devtools '@layerzerolabs/protocol-devtools-evm': - specifier: ~3.0.2 + specifier: ~3.0.3 version: link:../../packages/protocol-devtools-evm '@layerzerolabs/test-devtools-evm-hardhat': specifier: ~0.5.0 version: link:../../packages/test-devtools-evm-hardhat '@layerzerolabs/test-setup-devtools-evm-hardhat': - specifier: ~6.0.1 + specifier: ~6.0.2 version: link:../test-setup-devtools-evm-hardhat '@layerzerolabs/toolbox-hardhat': - specifier: ~0.6.2 + specifier: ~0.6.3 version: link:../../packages/toolbox-hardhat '@layerzerolabs/ua-devtools': - specifier: ~3.0.1 + specifier: ~3.0.2 version: link:../../packages/ua-devtools '@layerzerolabs/ua-devtools-evm': - specifier: ~5.0.1 + specifier: ~5.0.3 version: link:../../packages/ua-devtools-evm '@layerzerolabs/ua-devtools-evm-hardhat': - specifier: ~6.0.4 + specifier: ~6.0.5 version: link:../../packages/ua-devtools-evm-hardhat '@nomicfoundation/hardhat-ethers': specifier: ^3.0.5 diff --git a/tests/devtools-cli-test/CHANGELOG.md b/tests/devtools-cli-test/CHANGELOG.md index 5ac75e652..ae670437f 100644 --- a/tests/devtools-cli-test/CHANGELOG.md +++ b/tests/devtools-cli-test/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/devtools-cli-test +## 0.4.3 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 0.4.2 ### Patch Changes diff --git a/tests/devtools-cli-test/package.json b/tests/devtools-cli-test/package.json index 5bd931a79..144ee9bce 100644 --- a/tests/devtools-cli-test/package.json +++ b/tests/devtools-cli-test/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/devtools-cli-test", - "version": "0.4.2", + "version": "0.4.3", "private": true, "description": "Integration tests for devtools-cli for V2", "repository": { @@ -25,10 +25,10 @@ "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@ethersproject/wallet": "^5.7.0", - "@layerzerolabs/devtools": "~0.4.2", + "@layerzerolabs/devtools": "~0.4.3", "@layerzerolabs/devtools-cli": "~0.0.4", - "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", + "@layerzerolabs/devtools-evm": "~1.0.2", + "@layerzerolabs/devtools-evm-hardhat": "~2.0.4", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", @@ -37,16 +37,16 @@ "@layerzerolabs/lz-evm-sdk-v2": "^3.0.21", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/oapp-evm": "^0.3.0", - "@layerzerolabs/omnicounter-devtools": "~3.0.1", - "@layerzerolabs/omnicounter-devtools-evm": "~5.0.1", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/protocol-devtools-evm": "~3.0.2", + "@layerzerolabs/omnicounter-devtools": "~3.0.2", + "@layerzerolabs/omnicounter-devtools-evm": "~5.0.2", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/protocol-devtools-evm": "~3.0.3", "@layerzerolabs/test-devtools-evm-hardhat": "~0.5.0", - "@layerzerolabs/test-setup-devtools-evm-hardhat": "~6.0.1", - "@layerzerolabs/toolbox-hardhat": "~0.6.2", - "@layerzerolabs/ua-devtools": "~3.0.1", - "@layerzerolabs/ua-devtools-evm": "~5.0.1", - "@layerzerolabs/ua-devtools-evm-hardhat": "~6.0.4", + "@layerzerolabs/test-setup-devtools-evm-hardhat": "~6.0.2", + "@layerzerolabs/toolbox-hardhat": "~0.6.3", + "@layerzerolabs/ua-devtools": "~3.0.2", + "@layerzerolabs/ua-devtools-evm": "~5.0.3", + "@layerzerolabs/ua-devtools-evm-hardhat": "~6.0.5", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", diff --git a/tests/devtools-evm-hardhat-test/CHANGELOG.md b/tests/devtools-evm-hardhat-test/CHANGELOG.md index 176fce775..358164053 100644 --- a/tests/devtools-evm-hardhat-test/CHANGELOG.md +++ b/tests/devtools-evm-hardhat-test/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/devtools-evm-hardhat-test +## 0.3.4 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 0.3.3 ### Patch Changes diff --git a/tests/devtools-evm-hardhat-test/package.json b/tests/devtools-evm-hardhat-test/package.json index 5a56fab45..2aa2cd13c 100644 --- a/tests/devtools-evm-hardhat-test/package.json +++ b/tests/devtools-evm-hardhat-test/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/devtools-evm-hardhat-test", - "version": "0.3.3", + "version": "0.3.4", "private": true, "description": "Integration tests for devtools-evm-hardhat for V2", "repository": { @@ -25,9 +25,9 @@ "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@ethersproject/wallet": "^5.7.0", - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", + "@layerzerolabs/devtools-evm-hardhat": "~2.0.4", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", @@ -35,14 +35,14 @@ "@layerzerolabs/lz-evm-sdk-v1": "^3.0.12", "@layerzerolabs/lz-evm-sdk-v2": "^3.0.21", "@layerzerolabs/lz-v2-utilities": "^3.0.12", - "@layerzerolabs/omnicounter-devtools": "~3.0.1", - "@layerzerolabs/omnicounter-devtools-evm": "~5.0.1", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/protocol-devtools-evm": "~3.0.2", - "@layerzerolabs/test-devtools": "~0.4.1", + "@layerzerolabs/omnicounter-devtools": "~3.0.2", + "@layerzerolabs/omnicounter-devtools-evm": "~5.0.2", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/protocol-devtools-evm": "~3.0.3", + "@layerzerolabs/test-devtools": "~0.4.2", "@layerzerolabs/test-devtools-evm-hardhat": "~0.5.0", - "@layerzerolabs/test-setup-devtools-evm-hardhat": "~6.0.1", - "@layerzerolabs/toolbox-hardhat": "~0.6.2", + "@layerzerolabs/test-setup-devtools-evm-hardhat": "~6.0.2", + "@layerzerolabs/toolbox-hardhat": "~0.6.3", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^4.9.5", diff --git a/tests/devtools-evm-test/CHANGELOG.md b/tests/devtools-evm-test/CHANGELOG.md index a99ea04da..9dc9e6876 100644 --- a/tests/devtools-evm-test/CHANGELOG.md +++ b/tests/devtools-evm-test/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/devtools-evm-test +## 0.3.2 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 0.3.1 ### Patch Changes diff --git a/tests/devtools-evm-test/package.json b/tests/devtools-evm-test/package.json index c47d38c8d..eb5270829 100644 --- a/tests/devtools-evm-test/package.json +++ b/tests/devtools-evm-test/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/devtools-evm-test", - "version": "0.3.1", + "version": "0.3.2", "private": true, "description": "Integration tests for ua-devtools-evm-hardhat for V2", "repository": { @@ -22,10 +22,10 @@ "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.2", - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", "@layerzerolabs/lz-definitions": "^3.0.27", - "@layerzerolabs/test-devtools": "~0.4.1", + "@layerzerolabs/test-devtools": "~0.4.2", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-ethers": "^2.2.3", "@swc/core": "^1.4.0", diff --git a/tests/test-setup-devtools-evm-hardhat/CHANGELOG.md b/tests/test-setup-devtools-evm-hardhat/CHANGELOG.md index 5ebdf52be..6f87429f7 100644 --- a/tests/test-setup-devtools-evm-hardhat/CHANGELOG.md +++ b/tests/test-setup-devtools-evm-hardhat/CHANGELOG.md @@ -1,5 +1,19 @@ # @layerzerolabs/test-setup-devtools-evm-hardhat +## 6.0.2 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions +- Updated dependencies [1d2abff] + - @layerzerolabs/protocol-devtools-evm@3.0.3 + - @layerzerolabs/devtools-evm-hardhat@2.0.4 + - @layerzerolabs/protocol-devtools@1.1.2 + - @layerzerolabs/ua-devtools-evm@5.0.3 + - @layerzerolabs/devtools-evm@1.0.2 + - @layerzerolabs/ua-devtools@3.0.2 + - @layerzerolabs/devtools@0.4.3 + ## 6.0.1 ### Patch Changes diff --git a/tests/test-setup-devtools-evm-hardhat/package.json b/tests/test-setup-devtools-evm-hardhat/package.json index 8a652e984..4219ebc0d 100644 --- a/tests/test-setup-devtools-evm-hardhat/package.json +++ b/tests/test-setup-devtools-evm-hardhat/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/test-setup-devtools-evm-hardhat", - "version": "6.0.1", + "version": "6.0.2", "private": true, "description": "Test setup utilities for hardhat E2E tests", "repository": { @@ -31,15 +31,15 @@ }, "devDependencies": { "@ethersproject/providers": "^5.7.2", - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", + "@layerzerolabs/devtools-evm-hardhat": "~2.0.4", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/protocol-devtools-evm": "~3.0.1", - "@layerzerolabs/ua-devtools": "~3.0.1", - "@layerzerolabs/ua-devtools-evm": "~5.0.1", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/protocol-devtools-evm": "~3.0.3", + "@layerzerolabs/ua-devtools": "~3.0.2", + "@layerzerolabs/ua-devtools-evm": "~5.0.3", "@types/jest": "^29.5.12", "ethers": "^5.7.2", "hardhat": "^2.22.10", @@ -51,14 +51,14 @@ }, "peerDependencies": { "@ethersproject/providers": "^5.7.2", - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", + "@layerzerolabs/devtools-evm-hardhat": "~2.0.4", "@layerzerolabs/lz-definitions": "^3.0.27", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/protocol-devtools-evm": "~3.0.1", - "@layerzerolabs/ua-devtools": "~3.0.1", - "@layerzerolabs/ua-devtools-evm": "~5.0.1", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/protocol-devtools-evm": "~3.0.3", + "@layerzerolabs/ua-devtools": "~3.0.2", + "@layerzerolabs/ua-devtools-evm": "~5.0.3", "ethers": "^5.7.2", "hardhat": "^2.22.10", "hardhat-deploy": "^0.12.1" diff --git a/tests/ua-devtools-evm-hardhat-test/CHANGELOG.md b/tests/ua-devtools-evm-hardhat-test/CHANGELOG.md index 34c5c25c8..cd657d5f9 100644 --- a/tests/ua-devtools-evm-hardhat-test/CHANGELOG.md +++ b/tests/ua-devtools-evm-hardhat-test/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/ua-devtools-evm-hardhat-test +## 0.7.3 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 0.7.2 ### Patch Changes diff --git a/tests/ua-devtools-evm-hardhat-test/package.json b/tests/ua-devtools-evm-hardhat-test/package.json index 065488ff9..09bea26fd 100644 --- a/tests/ua-devtools-evm-hardhat-test/package.json +++ b/tests/ua-devtools-evm-hardhat-test/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/ua-devtools-evm-hardhat-test", - "version": "0.7.2", + "version": "0.7.3", "private": true, "description": "Integration tests for ua-devtools-evm-hardhat for V2", "repository": { @@ -25,9 +25,9 @@ "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@ethersproject/wallet": "^5.7.0", - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", + "@layerzerolabs/devtools-evm-hardhat": "~2.0.4", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", @@ -36,16 +36,16 @@ "@layerzerolabs/lz-evm-sdk-v2": "^3.0.21", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/oapp-evm": "^0.3.0", - "@layerzerolabs/omnicounter-devtools": "~3.0.1", - "@layerzerolabs/omnicounter-devtools-evm": "~5.0.1", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/protocol-devtools-evm": "~3.0.2", + "@layerzerolabs/omnicounter-devtools": "~3.0.2", + "@layerzerolabs/omnicounter-devtools-evm": "~5.0.2", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/protocol-devtools-evm": "~3.0.3", "@layerzerolabs/test-devtools-evm-hardhat": "~0.5.0", - "@layerzerolabs/test-setup-devtools-evm-hardhat": "~6.0.1", - "@layerzerolabs/toolbox-hardhat": "~0.6.2", - "@layerzerolabs/ua-devtools": "~3.0.1", - "@layerzerolabs/ua-devtools-evm": "~5.0.1", - "@layerzerolabs/ua-devtools-evm-hardhat": "~6.0.4", + "@layerzerolabs/test-setup-devtools-evm-hardhat": "~6.0.2", + "@layerzerolabs/toolbox-hardhat": "~0.6.3", + "@layerzerolabs/ua-devtools": "~3.0.2", + "@layerzerolabs/ua-devtools-evm": "~5.0.3", + "@layerzerolabs/ua-devtools-evm-hardhat": "~6.0.5", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", diff --git a/tests/ua-devtools-evm-hardhat-v1-test/CHANGELOG.md b/tests/ua-devtools-evm-hardhat-v1-test/CHANGELOG.md index 9a8b9e203..689f5be7e 100644 --- a/tests/ua-devtools-evm-hardhat-v1-test/CHANGELOG.md +++ b/tests/ua-devtools-evm-hardhat-v1-test/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/ua-devtools-evm-hardhat-v1-test +## 0.3.3 + +### Patch Changes + +- 1d2abff: new SDK methods, tests in devtools-ton, upgraded lz-definitions + ## 0.3.2 ### Patch Changes diff --git a/tests/ua-devtools-evm-hardhat-v1-test/package.json b/tests/ua-devtools-evm-hardhat-v1-test/package.json index 9d7aed98e..29e708f62 100644 --- a/tests/ua-devtools-evm-hardhat-v1-test/package.json +++ b/tests/ua-devtools-evm-hardhat-v1-test/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/ua-devtools-evm-hardhat-v1-test", - "version": "0.3.2", + "version": "0.3.3", "private": true, "description": "Integration tests for ua-devtools-evm-hardhat for V1", "repository": { @@ -25,9 +25,9 @@ "@ethersproject/contracts": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@ethersproject/wallet": "^5.7.0", - "@layerzerolabs/devtools": "~0.4.2", - "@layerzerolabs/devtools-evm": "~1.0.1", - "@layerzerolabs/devtools-evm-hardhat": "~2.0.3", + "@layerzerolabs/devtools": "~0.4.3", + "@layerzerolabs/devtools-evm": "~1.0.2", + "@layerzerolabs/devtools-evm-hardhat": "~2.0.4", "@layerzerolabs/io-devtools": "~0.1.14", "@layerzerolabs/lz-definitions": "^3.0.27", "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", @@ -38,16 +38,16 @@ "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", "@layerzerolabs/lz-v2-utilities": "^3.0.12", "@layerzerolabs/oapp-evm": "^0.3.0", - "@layerzerolabs/omnicounter-devtools": "~3.0.1", - "@layerzerolabs/omnicounter-devtools-evm": "~5.0.1", - "@layerzerolabs/protocol-devtools": "~1.1.1", - "@layerzerolabs/protocol-devtools-evm": "~3.0.2", + "@layerzerolabs/omnicounter-devtools": "~3.0.2", + "@layerzerolabs/omnicounter-devtools-evm": "~5.0.2", + "@layerzerolabs/protocol-devtools": "~1.1.2", + "@layerzerolabs/protocol-devtools-evm": "~3.0.3", "@layerzerolabs/test-devtools-evm-hardhat": "~0.5.0", - "@layerzerolabs/test-setup-devtools-evm-hardhat": "~6.0.1", - "@layerzerolabs/toolbox-hardhat": "~0.6.2", - "@layerzerolabs/ua-devtools": "~3.0.1", - "@layerzerolabs/ua-devtools-evm": "~5.0.1", - "@layerzerolabs/ua-devtools-evm-hardhat": "~6.0.4", + "@layerzerolabs/test-setup-devtools-evm-hardhat": "~6.0.2", + "@layerzerolabs/toolbox-hardhat": "~0.6.3", + "@layerzerolabs/ua-devtools": "~3.0.2", + "@layerzerolabs/ua-devtools-evm": "~5.0.3", + "@layerzerolabs/ua-devtools-evm-hardhat": "~6.0.5", "@nomicfoundation/hardhat-ethers": "^3.0.5", "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", From 1d1272b19aaff7c9b49fbc4b440f2e90b172452a Mon Sep 17 00:00:00 2001 From: Matthew Krak Date: Fri, 13 Dec 2024 19:51:30 -0800 Subject: [PATCH 19/24] fix: add changeset for mint burn adapter (#1131) --- .changeset/cold-seas-draw.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/cold-seas-draw.md diff --git a/.changeset/cold-seas-draw.md b/.changeset/cold-seas-draw.md new file mode 100644 index 000000000..69e2d5970 --- /dev/null +++ b/.changeset/cold-seas-draw.md @@ -0,0 +1,5 @@ +--- +"create-lz-oapp": patch +--- + +Add mint-burn-oft-adapter From d45ac08b1c7ef387dd9c506b5637e55609f23e2b Mon Sep 17 00:00:00 2001 From: layerzero-bot <131946195+layerzero-bot@users.noreply.github.com> Date: Sat, 14 Dec 2024 17:57:14 +0000 Subject: [PATCH 20/24] =?UTF-8?q?=F0=9F=9A=80=20Version=20packages=20(#113?= =?UTF-8?q?2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: github-actions[bot] --- .changeset/cold-seas-draw.md | 5 ----- packages/create-lz-oapp/CHANGELOG.md | 6 ++++++ packages/create-lz-oapp/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/cold-seas-draw.md diff --git a/.changeset/cold-seas-draw.md b/.changeset/cold-seas-draw.md deleted file mode 100644 index 69e2d5970..000000000 --- a/.changeset/cold-seas-draw.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"create-lz-oapp": patch ---- - -Add mint-burn-oft-adapter diff --git a/packages/create-lz-oapp/CHANGELOG.md b/packages/create-lz-oapp/CHANGELOG.md index 00848ddbd..fd531d74a 100644 --- a/packages/create-lz-oapp/CHANGELOG.md +++ b/packages/create-lz-oapp/CHANGELOG.md @@ -1,5 +1,11 @@ # create-lz-oapp +## 0.4.1 + +### Patch Changes + +- 1d1272b: Add mint-burn-oft-adapter + ## 0.4.0 ### Minor Changes diff --git a/packages/create-lz-oapp/package.json b/packages/create-lz-oapp/package.json index e0fca7f52..f2ffd69cd 100644 --- a/packages/create-lz-oapp/package.json +++ b/packages/create-lz-oapp/package.json @@ -1,6 +1,6 @@ { "name": "create-lz-oapp", - "version": "0.4.0", + "version": "0.4.1", "description": "Create LayerZero OApp with one command", "keywords": [ "LayerZero", From 8015216911b8f52abb565e5d001fee92b33a9981 Mon Sep 17 00:00:00 2001 From: Nazreen Date: Mon, 16 Dec 2024 23:24:04 +0800 Subject: [PATCH 21/24] fix: update to refer to QuickNode dashboard (#1134) --- examples/oft-solana/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/oft-solana/README.md b/examples/oft-solana/README.md index 3743a997b..7e6ea041e 100644 --- a/examples/oft-solana/README.md +++ b/examples/oft-solana/README.md @@ -172,7 +172,7 @@ This section only applies if you are unable to land your deployment transaction sh -c "$(curl -sSfL https://release.solana.com/v1.18.26/install)" ``` -You can run `npx hardhat lz:solana:get-priority-fees --eid --address ` and use the `averageFeeExcludingZeros` value. +You can run refer QuickNode's [Solana Priority Fee Tracker](https://www.quicknode.com/gas-tracker/solana) to know what value you'd need to pass into the `--with-compute-unit-price` flag. :information_source: The average is calculated from getting the prioritization fees across recent blocks, but some blocks may have `0` as the prioritization fee. `averageFeeExcludingZeros` ignores blocks with `0` prioritization fees. From 108f4d698d7831c00ebffea972123aabd2a231a1 Mon Sep 17 00:00:00 2001 From: Ryan Goulding Date: Mon, 16 Dec 2024 12:20:20 -0500 Subject: [PATCH 22/24] update to the latest forge-std version (#1113) Signed-off-by: Ryan Goulding --- .changeset/clean-ads-pump.md | 5 +++++ packages/toolbox-foundry/src/forge-std | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/clean-ads-pump.md diff --git a/.changeset/clean-ads-pump.md b/.changeset/clean-ads-pump.md new file mode 100644 index 000000000..0c510554e --- /dev/null +++ b/.changeset/clean-ads-pump.md @@ -0,0 +1,5 @@ +--- +"@layerzerolabs/toolbox-foundry": patch +--- + +Bump to latest forge-std version diff --git a/packages/toolbox-foundry/src/forge-std b/packages/toolbox-foundry/src/forge-std index ae570fec0..051fb65fc 160000 --- a/packages/toolbox-foundry/src/forge-std +++ b/packages/toolbox-foundry/src/forge-std @@ -1 +1 @@ -Subproject commit ae570fec082bfe1c1f45b0acca4a2b4f84d345ce +Subproject commit 051fb65fc46013dff64e46ca410445d63ea5620a From f4060401765c83153d553a531f09b2d194388f69 Mon Sep 17 00:00:00 2001 From: layerzero-bot <131946195+layerzero-bot@users.noreply.github.com> Date: Tue, 17 Dec 2024 19:42:47 +0000 Subject: [PATCH 23/24] =?UTF-8?q?=F0=9F=9A=80=20Version=20packages=20(#113?= =?UTF-8?q?5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: github-actions[bot] --- .changeset/clean-ads-pump.md | 5 ----- packages/toolbox-foundry/CHANGELOG.md | 6 ++++++ packages/toolbox-foundry/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/clean-ads-pump.md diff --git a/.changeset/clean-ads-pump.md b/.changeset/clean-ads-pump.md deleted file mode 100644 index 0c510554e..000000000 --- a/.changeset/clean-ads-pump.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@layerzerolabs/toolbox-foundry": patch ---- - -Bump to latest forge-std version diff --git a/packages/toolbox-foundry/CHANGELOG.md b/packages/toolbox-foundry/CHANGELOG.md index 2307576d8..5e41ec956 100644 --- a/packages/toolbox-foundry/CHANGELOG.md +++ b/packages/toolbox-foundry/CHANGELOG.md @@ -1,5 +1,11 @@ # @layerzerolabs/toolbox-foundry +## 0.1.10 + +### Patch Changes + +- 108f4d6: Bump to latest forge-std version + ## 0.1.9 ### Patch Changes diff --git a/packages/toolbox-foundry/package.json b/packages/toolbox-foundry/package.json index f856cee02..20920e89c 100644 --- a/packages/toolbox-foundry/package.json +++ b/packages/toolbox-foundry/package.json @@ -1,6 +1,6 @@ { "name": "@layerzerolabs/toolbox-foundry", - "version": "0.1.9", + "version": "0.1.10", "description": "One-stop-shop for developing LayerZero applications using foundry", "repository": { "type": "git", From 1d11f163e60e96edc209b5e61af2b39ddcb28797 Mon Sep 17 00:00:00 2001 From: Ryan Goulding Date: Thu, 19 Dec 2024 11:44:38 -0500 Subject: [PATCH 24/24] fix CI pipeline (#1139) Signed-off-by: Ryan Goulding --- .../hardhat.config.with-valid-and-invalid-rpcs.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/devtools-evm-hardhat-test/hardhat.config.with-valid-and-invalid-rpcs.ts b/tests/devtools-evm-hardhat-test/hardhat.config.with-valid-and-invalid-rpcs.ts index b79e13c84..82f5629f9 100644 --- a/tests/devtools-evm-hardhat-test/hardhat.config.with-valid-and-invalid-rpcs.ts +++ b/tests/devtools-evm-hardhat-test/hardhat.config.with-valid-and-invalid-rpcs.ts @@ -24,7 +24,7 @@ const config: HardhatUserConfig = { }, arbSepolia: { eid: EndpointId.ARBSEP_V2_TESTNET, - url: 'https://arbitrum-sepolia.blockpi.network/v1/rpc/public', + url: 'https://sepolia-rollup.arbitrum.io/rpc', accounts: { mnemonic: MNEMONIC, initialIndex: 0,