From d35d3b1d09ae7281ea76b3a0ec92b666b61e2d88 Mon Sep 17 00:00:00 2001 From: aelmanaa Date: Thu, 26 Sep 2024 10:43:34 +0100 Subject: [PATCH 01/20] rel2 update --- hardhat.config.ts | 1 + package-lock.json | 81 ++++++++----- package.json | 2 +- public/samples/CCIP/Acknowledger.sol | 2 +- public/samples/CCIP/MessageTracker.sol | 2 +- public/samples/CCIP/Messenger.sol | 2 +- .../ProgrammableDefensiveTokenTransfers.sol | 2 +- .../CCIP/ProgrammableTokenTransfers.sol | 2 +- .../ProgrammableTokenTransfersLowGasLimit.sol | 2 +- public/samples/CCIP/Receiver.sol | 2 +- public/samples/CCIP/Sender.sol | 2 +- .../samples/CCIP/TestCCIPLocalSimulator.sol | 2 +- public/samples/CCIP/TokenTransferor.sol | 2 +- public/samples/CCIP/usdc/Receiver.sol | 2 +- .../ccip/api-reference/ccip-receiver.mdx | 2 +- src/content/ccip/api-reference/client.mdx | 110 +++++++++++++++--- .../ccip/api-reference/i-router-client.mdx | 2 +- src/features/ccip/ImportCCIPPackage.mdx | 29 +++-- 18 files changed, 185 insertions(+), 64 deletions(-) diff --git a/hardhat.config.ts b/hardhat.config.ts index b5f2141bddd..64d86908e90 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -21,6 +21,7 @@ const config: HardhatUserConfig = { { version: "0.8.16" }, { version: "0.8.19" }, { version: "0.8.20" }, + { version: "0.8.24" }, ], }, } diff --git a/package-lock.json b/package-lock.json index ba5d5282e8f..ff527a8de48 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "@astrojs/sitemap": "^3.1.5", "@chainlink/components": "^0.4.18", "@chainlink/contracts": "1.2.0", - "@chainlink/contracts-ccip": "1.4.0", + "@chainlink/contracts-ccip": "1.5.0-beta.0", "@chainlink/design-system": "^0.2.8", "@chainlink/local": "^0.2.1", "@chainlink/solana-sdk": "^0.2.2", @@ -1302,30 +1302,24 @@ } }, "node_modules/@chainlink/contracts-ccip": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@chainlink/contracts-ccip/-/contracts-ccip-1.4.0.tgz", - "integrity": "sha512-8F0OpmXy73vSbOvnKPL0DcYLA6FTiwQSKw1+DQzKyBYVbFk4vtijzs+5Ts/Beu6EIPqXlmLq7WVFZFHiDOBjCg==", + "version": "1.5.0-beta.0", + "resolved": "https://registry.npmjs.org/@chainlink/contracts-ccip/-/contracts-ccip-1.5.0-beta.0.tgz", + "integrity": "sha512-SOL6DoMSTKbQu7OiXD+H0OFyHfqGGintqYA1/9e6kVmkSV5tPP2RXjtAudntIbSmCpLIjegZoTcdulwi/LA7kw==", "license": "BUSL-1.1", "dependencies": { "@arbitrum/nitro-contracts": "1.1.1", "@arbitrum/token-bridge-contracts": "1.1.2", + "@changesets/changelog-github": "^0.5.0", + "@changesets/cli": "~2.27.3", "@eth-optimism/contracts": "0.6.0", "@openzeppelin/contracts": "4.9.3", "@openzeppelin/contracts-upgradeable": "4.9.3", - "@scroll-tech/contracts": "0.1.0" - } - }, - "node_modules/@chainlink/contracts-ccip/node_modules/@eth-optimism/contracts": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.6.0.tgz", - "integrity": "sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==", - "dependencies": { - "@eth-optimism/core-utils": "0.12.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0" + "@scroll-tech/contracts": "0.1.0", + "semver": "^7.6.2" }, - "peerDependencies": { - "ethers": "^5" + "engines": { + "node": ">=18", + "pnpm": ">=9" } }, "node_modules/@chainlink/contracts-ccip/node_modules/@openzeppelin/contracts": { @@ -1333,17 +1327,16 @@ "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==" }, - "node_modules/@chainlink/contracts/node_modules/@eth-optimism/contracts": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.6.0.tgz", - "integrity": "sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==", - "dependencies": { - "@eth-optimism/core-utils": "0.12.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0" + "node_modules/@chainlink/contracts-ccip/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "peerDependencies": { - "ethers": "^5" + "engines": { + "node": ">=10" } }, "node_modules/@chainlink/contracts/node_modules/@openzeppelin/contracts": { @@ -1383,6 +1376,26 @@ "@chainlink/contracts-ccip": "^1.4.0" } }, + "node_modules/@chainlink/local/node_modules/@chainlink/contracts-ccip": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@chainlink/contracts-ccip/-/contracts-ccip-1.4.0.tgz", + "integrity": "sha512-8F0OpmXy73vSbOvnKPL0DcYLA6FTiwQSKw1+DQzKyBYVbFk4vtijzs+5Ts/Beu6EIPqXlmLq7WVFZFHiDOBjCg==", + "license": "BUSL-1.1", + "dependencies": { + "@arbitrum/nitro-contracts": "1.1.1", + "@arbitrum/token-bridge-contracts": "1.1.2", + "@eth-optimism/contracts": "0.6.0", + "@openzeppelin/contracts": "4.9.3", + "@openzeppelin/contracts-upgradeable": "4.9.3", + "@scroll-tech/contracts": "0.1.0" + } + }, + "node_modules/@chainlink/local/node_modules/@openzeppelin/contracts": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", + "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==", + "license": "MIT" + }, "node_modules/@chainlink/solana-sdk": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/@chainlink/solana-sdk/-/solana-sdk-0.2.2.tgz", @@ -2421,6 +2434,20 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@eth-optimism/contracts": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.6.0.tgz", + "integrity": "sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==", + "license": "MIT", + "dependencies": { + "@eth-optimism/core-utils": "0.12.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0" + }, + "peerDependencies": { + "ethers": "^5" + } + }, "node_modules/@eth-optimism/core-utils": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz", diff --git a/package.json b/package.json index 8159e94fc46..cfca4c252f0 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@astrojs/sitemap": "^3.1.5", "@chainlink/components": "^0.4.18", "@chainlink/contracts": "1.2.0", - "@chainlink/contracts-ccip": "1.4.0", + "@chainlink/contracts-ccip": "1.5.0-beta.0", "@chainlink/design-system": "^0.2.8", "@chainlink/local": "^0.2.1", "@chainlink/solana-sdk": "^0.2.2", diff --git a/public/samples/CCIP/Acknowledger.sol b/public/samples/CCIP/Acknowledger.sol index a208f4f087b..71cd32dec7a 100644 --- a/public/samples/CCIP/Acknowledger.sol +++ b/public/samples/CCIP/Acknowledger.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.19; +pragma solidity 0.8.24; import {IRouterClient} from "@chainlink/contracts-ccip/src/v0.8/ccip/interfaces/IRouterClient.sol"; import {OwnerIsCreator} from "@chainlink/contracts-ccip/src/v0.8/shared/access/OwnerIsCreator.sol"; diff --git a/public/samples/CCIP/MessageTracker.sol b/public/samples/CCIP/MessageTracker.sol index 86b89fbaf7d..b51927c0eeb 100644 --- a/public/samples/CCIP/MessageTracker.sol +++ b/public/samples/CCIP/MessageTracker.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.19; +pragma solidity 0.8.24; import {IRouterClient} from "@chainlink/contracts-ccip/src/v0.8/ccip/interfaces/IRouterClient.sol"; import {OwnerIsCreator} from "@chainlink/contracts-ccip/src/v0.8/shared/access/OwnerIsCreator.sol"; diff --git a/public/samples/CCIP/Messenger.sol b/public/samples/CCIP/Messenger.sol index 5877900408c..ec70d5de0cc 100644 --- a/public/samples/CCIP/Messenger.sol +++ b/public/samples/CCIP/Messenger.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.19; +pragma solidity 0.8.24; import {IRouterClient} from "@chainlink/contracts-ccip/src/v0.8/ccip/interfaces/IRouterClient.sol"; import {OwnerIsCreator} from "@chainlink/contracts-ccip/src/v0.8/shared/access/OwnerIsCreator.sol"; diff --git a/public/samples/CCIP/ProgrammableDefensiveTokenTransfers.sol b/public/samples/CCIP/ProgrammableDefensiveTokenTransfers.sol index fbbe8e35394..74b1b57f5ca 100644 --- a/public/samples/CCIP/ProgrammableDefensiveTokenTransfers.sol +++ b/public/samples/CCIP/ProgrammableDefensiveTokenTransfers.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.19; +pragma solidity 0.8.24; import {IRouterClient} from "@chainlink/contracts-ccip/src/v0.8/ccip/interfaces/IRouterClient.sol"; import {OwnerIsCreator} from "@chainlink/contracts-ccip/src/v0.8/shared/access/OwnerIsCreator.sol"; diff --git a/public/samples/CCIP/ProgrammableTokenTransfers.sol b/public/samples/CCIP/ProgrammableTokenTransfers.sol index 8008b3cab4b..5d78ad748a2 100644 --- a/public/samples/CCIP/ProgrammableTokenTransfers.sol +++ b/public/samples/CCIP/ProgrammableTokenTransfers.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.19; +pragma solidity 0.8.24; import {IRouterClient} from "@chainlink/contracts-ccip/src/v0.8/ccip/interfaces/IRouterClient.sol"; import {OwnerIsCreator} from "@chainlink/contracts-ccip/src/v0.8/shared/access/OwnerIsCreator.sol"; diff --git a/public/samples/CCIP/ProgrammableTokenTransfersLowGasLimit.sol b/public/samples/CCIP/ProgrammableTokenTransfersLowGasLimit.sol index d68a0fe5f31..47087999e5a 100644 --- a/public/samples/CCIP/ProgrammableTokenTransfersLowGasLimit.sol +++ b/public/samples/CCIP/ProgrammableTokenTransfersLowGasLimit.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.19; +pragma solidity 0.8.24; import {IRouterClient} from "@chainlink/contracts-ccip/src/v0.8/ccip/interfaces/IRouterClient.sol"; import {OwnerIsCreator} from "@chainlink/contracts-ccip/src/v0.8/shared/access/OwnerIsCreator.sol"; diff --git a/public/samples/CCIP/Receiver.sol b/public/samples/CCIP/Receiver.sol index e5017b79114..2dbd6006058 100644 --- a/public/samples/CCIP/Receiver.sol +++ b/public/samples/CCIP/Receiver.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.19; +pragma solidity 0.8.24; import {Client} from "@chainlink/contracts-ccip/src/v0.8/ccip/libraries/Client.sol"; import {CCIPReceiver} from "@chainlink/contracts-ccip/src/v0.8/ccip/applications/CCIPReceiver.sol"; diff --git a/public/samples/CCIP/Sender.sol b/public/samples/CCIP/Sender.sol index dda6a7ec53e..f08206dc6cc 100644 --- a/public/samples/CCIP/Sender.sol +++ b/public/samples/CCIP/Sender.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.19; +pragma solidity 0.8.24; import {IRouterClient} from "@chainlink/contracts-ccip/src/v0.8/ccip/interfaces/IRouterClient.sol"; import {OwnerIsCreator} from "@chainlink/contracts-ccip/src/v0.8/shared/access/OwnerIsCreator.sol"; diff --git a/public/samples/CCIP/TestCCIPLocalSimulator.sol b/public/samples/CCIP/TestCCIPLocalSimulator.sol index b695cfc82ba..1c02d6086ed 100644 --- a/public/samples/CCIP/TestCCIPLocalSimulator.sol +++ b/public/samples/CCIP/TestCCIPLocalSimulator.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.19; +pragma solidity 0.8.24; // solhint-disable no-unused-import import {CCIPLocalSimulator} from "@chainlink/local/src/ccip/CCIPLocalSimulator.sol"; diff --git a/public/samples/CCIP/TokenTransferor.sol b/public/samples/CCIP/TokenTransferor.sol index 36cdb8fdaca..7e36cff9971 100644 --- a/public/samples/CCIP/TokenTransferor.sol +++ b/public/samples/CCIP/TokenTransferor.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.19; +pragma solidity 0.8.24; import {IRouterClient} from "@chainlink/contracts-ccip/src/v0.8/ccip/interfaces/IRouterClient.sol"; import {OwnerIsCreator} from "@chainlink/contracts-ccip/src/v0.8/shared/access/OwnerIsCreator.sol"; diff --git a/public/samples/CCIP/usdc/Receiver.sol b/public/samples/CCIP/usdc/Receiver.sol index f03b527c149..8ef20005bb4 100644 --- a/public/samples/CCIP/usdc/Receiver.sol +++ b/public/samples/CCIP/usdc/Receiver.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.19; +pragma solidity 0.8.24; import {OwnerIsCreator} from "@chainlink/contracts-ccip/src/v0.8/shared/access/OwnerIsCreator.sol"; import {Client} from "@chainlink/contracts-ccip/src/v0.8/ccip/libraries/Client.sol"; diff --git a/src/content/ccip/api-reference/ccip-receiver.mdx b/src/content/ccip/api-reference/ccip-receiver.mdx index 98afbc33f5f..625d8bd419d 100644 --- a/src/content/ccip/api-reference/ccip-receiver.mdx +++ b/src/content/ccip/api-reference/ccip-receiver.mdx @@ -8,7 +8,7 @@ import CcipCommon from "@features/ccip/CcipCommon.astro" -CCIP receiver contracts inherit from _CCIPReceiver_. +CCIP receiver contracts inherit from [`CCIPReceiver`](https://github.com/smartcontractkit/ccip/blob/ccip-develop/contracts/src/v0.8/ccip/applications/CCIPReceiver.sol). ```solidity import {CCIPReceiver} from "@chainlink/contracts-ccip/src/v0.8/ccip/applications/CCIPReceiver.sol"; diff --git a/src/content/ccip/api-reference/client.mdx b/src/content/ccip/api-reference/client.mdx index 6fd9da87ce1..e037817aab6 100644 --- a/src/content/ccip/api-reference/client.mdx +++ b/src/content/ccip/api-reference/client.mdx @@ -4,11 +4,12 @@ date: Last Modified title: "Client Library API Reference" --- +import { Aside } from "@components" import CcipCommon from "@features/ccip/CcipCommon.astro" -CCIP senders and receivers use the _CCIP Client Library_ to build CCIP messages. +CCIP senders and receivers use the CCIP [`Client`](https://github.com/smartcontractkit/ccip/blob/ccip-develop/contracts/src/v0.8/ccip/libraries/Client.sol) library to build CCIP messages. ```solidity import { Client } from "@chainlink/contracts-ccip/src/v0.8/ccip/libraries/Client.sol"; @@ -68,21 +69,48 @@ struct EVM2AnyMessage { } ``` -| Name | Type | Description | -| ------------ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| receiver | bytes | Receiver address. Use `abi.encode(sender)` to encode the address to _bytes_. | -| data | bytes | Payload sent within the CCIP message. | -| tokenAmounts | Client.EVMTokenAmount[] | Tokens and their amounts in the source chain representation. | -| feeToken | address | Address of feeToken. Set `address(0)` to pay in native gas tokens such as ETH on Ethereum or POL on Polygon. | -| extraArgs | bytes | Users fill in the [EVMExtraArgsV1 struct](#evmextraargsv1) then encode it to bytes using the [\_argsToBytes function](#_argstobytes) | +| Name | Type | Description | +| ------------ | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| receiver | bytes | Receiver address. Use `abi.encode(sender)` to encode the address to _bytes_. | +| data | bytes | Payload sent within the CCIP message. | +| tokenAmounts | Client.EVMTokenAmount[] | Tokens and their amounts in the source chain representation. | +| feeToken | address | Address of feeToken. Set `address(0)` to pay in native gas tokens such as ETH on Ethereum or POL on Polygon. | +| extraArgs | bytes | Users fill in the [EVMExtraArgs struct](#evmextraargs) then encode it to bytes using the [\_argsToBytes function](#_argstobytes) | -### EVM_EXTRA_ARGS_V1_TAG +### EVM_EXTRA_ARGS_TAG + +#### EVM_EXTRA_ARGS_V1_TAG + + ```solidity bytes4 EVM_EXTRA_ARGS_V1_TAG ``` -### EVMExtraArgsV1 +#### EVM_EXTRA_ARGS_V2_TAG + + + +```solidity +bytes4 EVM_EXTRA_ARGS_V2_TAG +``` + +### EVMExtraArgs + +#### EVMExtraArgsV1 + + ```solidity struct EVMExtraArgsV1 { @@ -94,23 +122,75 @@ struct EVMExtraArgsV1 { | -------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | gasLimit | uint256 | specifies the maximum amount of gas CCIP can consume to execute `ccipReceive()` on the contract located on the destination blockchain. Read [Setting gasLimit](/ccip/best-practices#setting-gaslimit) for more details. | +#### EVMExtraArgsV2 + + + +```solidity +struct EVMExtraArgsV2 { + uint256 gasLimit; + bool allowOutOfOrderExecution; +} +``` + +| Name | Type | Description | +| ------------------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| gasLimit | uint256 | specifies the maximum amount of gas CCIP can consume to execute `ccipReceive()` on the contract located on the destination blockchain. Read [Setting gasLimit](/ccip/best-practices#setting-gaslimit) for more details. | +| allowOutOfOrderExecution | bool | if true, it indicates that the message can be executed in any order relative to other messages from the same sender. This value's default varies by chain. On some chains, a particular value is enforced, meaning if the expected value is not set, the message request will revert. | + ## Functions ### \_argsToBytes +#### \_argsToBytes (v1) + + + ```solidity function _argsToBytes(struct Client.EVMExtraArgsV1 extraArgs) internal pure returns (bytes bts) ``` It is used to convert the arguments to bytes. -#### Parameters +##### Parameters + +| Name | Type | Description | +| --------- | ---------------------------------------- | ---------------- | +| extraArgs | [Client.EVMExtraArgsV1](#evmextraargsv1) | Extra arguments. | + +##### Return Values + +| Name | Type | Description | +| ---- | ----- | ----------------------------------- | +| bts | bytes | Encoded extra arguments in _bytes_. | + +#### \_argsToBytes (v2) + + + +```solidity +function _argsToBytes(struct Client.EVMExtraArgsV2 extraArgs) internal pure returns (bytes bts) +``` + +It is used to convert the arguments to bytes. + +##### Parameters -| Name | Type | Description | -| --------- | --------------------- | ---------------- | -| extraArgs | Client.EVMExtraArgsV1 | Extra arguments. | +| Name | Type | Description | +| --------- | ---------------------------------------- | ---------------- | +| extraArgs | [Client.EVMExtraArgsV2](#evmextraargsv2) | Extra arguments. | -#### Return Values +##### Return Values | Name | Type | Description | | ---- | ----- | ----------------------------------- | diff --git a/src/content/ccip/api-reference/i-router-client.mdx b/src/content/ccip/api-reference/i-router-client.mdx index 97b40598414..f3f0bc14ac3 100644 --- a/src/content/ccip/api-reference/i-router-client.mdx +++ b/src/content/ccip/api-reference/i-router-client.mdx @@ -9,7 +9,7 @@ import CcipCommon from "@features/ccip/CcipCommon.astro" -To send messages through CCIP, users must interact with the `IRouterClient` interface. +To send messages through CCIP, users must interact with the []`IRouterClient`](https://github.com/smartcontractkit/ccip/blob/ccip-develop/contracts/src/v0.8/ccip/interfaces/IRouterClient.sol) interface. After you import `IRouterClient.sol`, you can initialize a router client instance: ```solidity diff --git a/src/features/ccip/ImportCCIPPackage.mdx b/src/features/ccip/ImportCCIPPackage.mdx index 2bf471d1757..dc45581a53e 100644 --- a/src/features/ccip/ImportCCIPPackage.mdx +++ b/src/features/ccip/ImportCCIPPackage.mdx @@ -6,34 +6,47 @@ import { Tabs } from "@components/Tabs" npm yarn foundry + + If you use [NPM](https://www.npmjs.com/), install the [@chainlink/contracts-ccip NPM package](https://www.npmjs.com/package/@chainlink/contracts-ccip). - If you use [NPM](https://www.npmjs.com/), install the [@chainlink/contracts-ccip NPM - package](https://www.npmjs.com/package/@chainlink/contracts-ccip) and set it to the v1.4.0 release: + - **For lanes where "Out of Order Execution" property is set to Optional or Required:** Use version `1.5.0`: + ```shell + npm install @chainlink/contracts-ccip@1.5.0-beta.0 + ``` + - **For lanes where "Out of Order Execution" property is not set:** Use version `1.4.0`: ```shell npm install @chainlink/contracts-ccip@1.4.0 ``` - + + If you use [Yarn](https://yarnpkg.com/), install the [@chainlink/contracts-ccip NPM package](https://www.npmjs.com/package/@chainlink/contracts-ccip). - If you use [Yarn](https://yarnpkg.com/), install the [@chainlink/contracts-ccip NPM - package](https://www.npmjs.com/package/@chainlink/contracts-ccip) and set it to the v1.4.0 release: + - **For lanes where "Out of Order Execution" property is set to Optional or Required:** Use version `1.5.0`: + ```shell + yarn add @chainlink/contracts-ccip@1.5.0-beta.0 + ``` + - **For lanes where "Out of Order Execution" property is not set:** Use version `1.4.0`: ```shell yarn add @chainlink/contracts-ccip@1.4.0 ``` - + + If you use [Foundry](https://book.getfoundry.sh/), install the relevant release based on your environment. - If you use [Foundry](https://book.getfoundry.sh/), install the v1.4.0 release: + - **For lanes where "Out of Order Execution" property is set to Optional or Required:** Install version `5c711214167b7e6f05cf6de74bdab9f6e26763b2`: + ```shell + forge install smartcontractkit/ccip@5c711214167b7e6f05cf6de74bdab9f6e26763b2 + ``` + - **For lanes where "Out of Order Execution" property is not set:** Install version `b06a3c2eecb9892ec6f76a015624413fffa1a122`: ```shell forge install smartcontractkit/ccip@b06a3c2eecb9892ec6f76a015624413fffa1a122 ``` - From b0447a0a7d8b2bf366e0ee40370e73214372f1f7 Mon Sep 17 00:00:00 2001 From: aelmanaa Date: Thu, 26 Sep 2024 10:52:05 +0100 Subject: [PATCH 02/20] rel2 update --- src/features/ccip/ImportCCIPPackage.mdx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/features/ccip/ImportCCIPPackage.mdx b/src/features/ccip/ImportCCIPPackage.mdx index dc45581a53e..f1a46102356 100644 --- a/src/features/ccip/ImportCCIPPackage.mdx +++ b/src/features/ccip/ImportCCIPPackage.mdx @@ -10,12 +10,12 @@ import { Tabs } from "@components/Tabs" If you use [NPM](https://www.npmjs.com/), install the [@chainlink/contracts-ccip NPM package](https://www.npmjs.com/package/@chainlink/contracts-ccip). - - **For lanes where "Out of Order Execution" property is set to Optional or Required:** Use version `1.5.0`: + - **For lanes where "Out of Order Execution" property is set to Optional or Required** (see the [supported networks page](/ccip/supported-networks)): Use version `1.5.0`: ```shell npm install @chainlink/contracts-ccip@1.5.0-beta.0 ``` - - **For lanes where "Out of Order Execution" property is not set:** Use version `1.4.0`: + - **For lanes where "Out of Order Execution" property is not set** (see the [supported networks page](/ccip/supported-networks)): Use version `1.4.0`: ```shell npm install @chainlink/contracts-ccip@1.4.0 ``` @@ -24,12 +24,12 @@ import { Tabs } from "@components/Tabs" If you use [Yarn](https://yarnpkg.com/), install the [@chainlink/contracts-ccip NPM package](https://www.npmjs.com/package/@chainlink/contracts-ccip). - - **For lanes where "Out of Order Execution" property is set to Optional or Required:** Use version `1.5.0`: + - **For lanes where "Out of Order Execution" property is set to Optional or Required** (see the [supported networks page](/ccip/supported-networks)): Use version `1.5.0`: ```shell yarn add @chainlink/contracts-ccip@1.5.0-beta.0 ``` - - **For lanes where "Out of Order Execution" property is not set:** Use version `1.4.0`: + - **For lanes where "Out of Order Execution" property is not set** (see the [supported networks page](/ccip/supported-networks)): Use version `1.4.0`: ```shell yarn add @chainlink/contracts-ccip@1.4.0 ``` @@ -38,12 +38,12 @@ import { Tabs } from "@components/Tabs" If you use [Foundry](https://book.getfoundry.sh/), install the relevant release based on your environment. - - **For lanes where "Out of Order Execution" property is set to Optional or Required:** Install version `5c711214167b7e6f05cf6de74bdab9f6e26763b2`: + - **For lanes where "Out of Order Execution" property is set to Optional or Required** (see the [supported networks page](/ccip/supported-networks)): Install version `5c711214167b7e6f05cf6de74bdab9f6e26763b2`: ```shell forge install smartcontractkit/ccip@5c711214167b7e6f05cf6de74bdab9f6e26763b2 ``` - - **For lanes where "Out of Order Execution" property is not set:** Install version `b06a3c2eecb9892ec6f76a015624413fffa1a122`: + - **For lanes where "Out of Order Execution" property is not set** (see the [supported networks page](/ccip/supported-networks)): Install version `b06a3c2eecb9892ec6f76a015624413fffa1a122`: ```shell forge install smartcontractkit/ccip@b06a3c2eecb9892ec6f76a015624413fffa1a122 ``` From e961f7bce5b2f7b29301afeec37014985b98c981 Mon Sep 17 00:00:00 2001 From: aelmanaa Date: Thu, 26 Sep 2024 11:15:45 +0100 Subject: [PATCH 03/20] rel2 update --- src/content/ccip/architecture.mdx | 3 +++ src/content/ccip/concepts/index.mdx | 8 ++++++++ src/features/ccip/CcipCommon.astro | 4 ++++ src/features/ccip/RMNCaution.mdx | 10 ++++++++++ 4 files changed, 25 insertions(+) create mode 100644 src/features/ccip/RMNCaution.mdx diff --git a/src/content/ccip/architecture.mdx b/src/content/ccip/architecture.mdx index c7bc6bf4bde..afb09430420 100644 --- a/src/content/ccip/architecture.mdx +++ b/src/content/ccip/architecture.mdx @@ -11,12 +11,15 @@ whatsnext: --- import { Aside, ClickToZoom } from "@components" +import CcipCommon from "@features/ccip/CcipCommon.astro" + + ## High-level architecture Below is a diagram displaying the basic architecture of CCIP. Routers are smart contracts that provide a simple and consistent interface for users. Users can interact with routers to: diff --git a/src/content/ccip/concepts/index.mdx b/src/content/ccip/concepts/index.mdx index 5440a2efa65..8aa168e272a 100644 --- a/src/content/ccip/concepts/index.mdx +++ b/src/content/ccip/concepts/index.mdx @@ -6,6 +6,8 @@ isIndex: true whatsnext: { "CCIP Architecture": "/ccip/architecture", "Learn CCIP best practices": "/ccip/best-practices" } --- +import CcipCommon from "@features/ccip/CcipCommon.astro" + Before you explore how Chainlink CCIP works in the [architecture guide](/ccip/architecture), it is best to understand the core concepts. ## Prerequisites @@ -50,6 +52,8 @@ Chainlink Decentralized Oracle Networks, or **DONs**, run [Chainlink OCR2](/arch ## Risk Management Network + + The Risk Management Network is built using offchain and onchain components: - **[Offchain](#offchain-risk-management-node):** Several Risk Management nodes continually monitor all supported chains against abnormal activities @@ -57,6 +61,8 @@ The Risk Management Network is built using offchain and onchain components: ### Offchain Risk Management node + + The Risk Management Network is a secondary validation service parallel to the primary CCIP system. It doesn't run the same codebase as the [DON](#decentralized-oracle-network-don) to mitigate against security vulnerabilities that might affect the DON's codebase. The Risk Management Network has two main modes of operation: @@ -70,6 +76,8 @@ The Risk Management Network has two main modes of operation: ### Onchain Risk Management contract + + There is one Risk Management contract for each supported destination chain. The Risk Management contract maintains a group of nodes authorized to participate in the Risk Management blessing/cursing. Each Risk Management node has five components: diff --git a/src/features/ccip/CcipCommon.astro b/src/features/ccip/CcipCommon.astro index 30259105669..d90028cf508 100644 --- a/src/features/ccip/CcipCommon.astro +++ b/src/features/ccip/CcipCommon.astro @@ -11,6 +11,8 @@ const TalkToExpert = await Astro.glob("./Talk-Expert.mdx") const TalkToExpertComponent = TalkToExpert[0].Content const UseSimulator = await Astro.glob("./Use-Simulator.mdx") const UseSimulatorComponent = UseSimulator[0].Content +const RMNCaution = await Astro.glob("./RMN-Caution.mdx") +const RMNCautionComponent = RMNCaution[0].Content export type Props = { callout?: | "extraArgsCallout" @@ -19,6 +21,7 @@ export type Props = { | "importCCIPPackage" | "talkToExpert" | "useSimulator" + | "rmnCaution" } const { callout } = Astro.props as Props --- @@ -29,3 +32,4 @@ const { callout } = Astro.props as Props {callout === "importCCIPPackage" && } {callout === "talkToExpert" && } {callout === "useSimulator" && } +{callout === "rmnCaution" && } diff --git a/src/features/ccip/RMNCaution.mdx b/src/features/ccip/RMNCaution.mdx new file mode 100644 index 00000000000..438789febc9 --- /dev/null +++ b/src/features/ccip/RMNCaution.mdx @@ -0,0 +1,10 @@ +import { Aside } from "@components" + + From 0a12ca9d526008001517b71cd49b678989980c7d Mon Sep 17 00:00:00 2001 From: aelmanaa Date: Thu, 26 Sep 2024 11:30:33 +0100 Subject: [PATCH 04/20] fix --- src/features/ccip/CcipCommon.astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/ccip/CcipCommon.astro b/src/features/ccip/CcipCommon.astro index d90028cf508..32abe04f25a 100644 --- a/src/features/ccip/CcipCommon.astro +++ b/src/features/ccip/CcipCommon.astro @@ -11,7 +11,7 @@ const TalkToExpert = await Astro.glob("./Talk-Expert.mdx") const TalkToExpertComponent = TalkToExpert[0].Content const UseSimulator = await Astro.glob("./Use-Simulator.mdx") const UseSimulatorComponent = UseSimulator[0].Content -const RMNCaution = await Astro.glob("./RMN-Caution.mdx") +const RMNCaution = await Astro.glob("./RMNCaution.mdx") const RMNCautionComponent = RMNCaution[0].Content export type Props = { callout?: From 24a42aac3dc6cbd42bb3f35b24c0b490dc28242e Mon Sep 17 00:00:00 2001 From: aelmanaa Date: Thu, 26 Sep 2024 12:11:39 +0100 Subject: [PATCH 05/20] OoO --- src/content/ccip/api-reference/client.mdx | 6 +++--- src/content/ccip/best-practices.mdx | 24 +++++++++++++++++++---- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/content/ccip/api-reference/client.mdx b/src/content/ccip/api-reference/client.mdx index e037817aab6..8b72ee852f8 100644 --- a/src/content/ccip/api-reference/client.mdx +++ b/src/content/ccip/api-reference/client.mdx @@ -94,7 +94,7 @@ bytes4 EVM_EXTRA_ARGS_V1_TAG #### EVM_EXTRA_ARGS_V2_TAG @@ -125,7 +125,7 @@ struct EVMExtraArgsV1 { #### EVMExtraArgsV2 @@ -174,7 +174,7 @@ It is used to convert the arguments to bytes. #### \_argsToBytes (v2) diff --git a/src/content/ccip/best-practices.mdx b/src/content/ccip/best-practices.mdx index 0db15079c0c..503d435775d 100644 --- a/src/content/ccip/best-practices.mdx +++ b/src/content/ccip/best-practices.mdx @@ -45,7 +45,13 @@ When you implement the `ccipReceive` [method](/ccip/api-reference/ccip-receiver# **Example**: For an example of how to verify the router, refer to the [Transfer Tokens with Data - Defensive](/ccip/tutorials/programmable-token-transfers-defensive#tutorial) example. -## Setting `gasLimit` +## Using `extraArgs` + +The purpose of [`extraArgs`](/ccip/api-reference/client###evmextraargs) is to allow compatibility with future CCIP upgrades. To get this benefit, make sure that `extraArgs` is mutable in production deployments. This allows you to build it offchain and pass it in a call to a function or store it in a variable that you can update on-demand. + +If `extraArgs` are left empty, a default of _200000_ `gasLimit` will be set. + +### Setting `gasLimit` The `gasLimit` specifies the maximum amount of gas CCIP can consume to execute `ccipReceive()` on the contract located on the destination blockchain. It is the main factor in determining the fee to send a message. Unspent gas is not refunded. @@ -60,11 +66,21 @@ To estimate the accurate gas limit for your destination contract, consider the f **Example**: For an example of how to estimate the gas limit, refer to the [Optimizing Gas Limit Settings in CCIP Messages](/ccip/tutorials/ccipreceive-gaslimit) guide. -## Using `extraArgs` +### Setting `allowOutOfOrderExecution` -The purpose of `extraArgs` is to allow compatibility with future CCIP upgrades. To get this benefit, make sure that `extraArgs` is mutable in production deployments. This allows you to build it offchain and pass it in a call to a function or store it in a variable that you can update on-demand. +The `allowOutOfOrderExecution` parameter enables you to control the execution order of your messages on the destination blockchain. This parameter is part of [`EVMExtraArgsV2`](/ccip/api-reference/client###evmextraargsv2) and is available only on lanes where the **Out of Order Execution** property is set to **Optional** or **Required**. Refer to the [Supported Networks page](/ccip/supported-networks) to determine if your target lane supports this feature. -If `extraArgs` are left empty, a default of _200000_ `gasLimit` will be set. +#### Best Practices + +- **When `allowOutOfOrderExecution` is Optional:** + + - You can set `allowOutOfOrderExecution` to either `true` or `false`, depending on your application's requirements. + - **`true`:** Messages can be executed in any order relative to other messages from the same sender. If a previous message has not yet been executed on the destination chain, it does not block the execution of subsequent messages. + - **`false`:** Messages are executed in order. CCIP ensures that preceding messages are processed before executing the current message. + +- **When `allowOutOfOrderExecution` is Required:** + - You **must** set `allowOutOfOrderExecution` to `true`. This setting acknowledges that messages may be executed out of order. If set to `false`, the message will revert and will not be processed. + - This requirement is enforced on lanes where technical constraints necessitate out-of-order execution, such as mitigating issues related to zero-knowledge proof limitations. For more information, see the [proof overflow problem](https://community.scroll.io/t/the-proof-overflow-problem/841). ## Decoupling CCIP Message Reception and Business Logic From 302214bc58ba6d9ef22d7a9f1d071ea5fc21e0b6 Mon Sep 17 00:00:00 2001 From: aelmanaa Date: Thu, 26 Sep 2024 12:17:21 +0100 Subject: [PATCH 06/20] fix --- src/content/ccip/concepts/index.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/ccip/concepts/index.mdx b/src/content/ccip/concepts/index.mdx index 8aa168e272a..958a0edb1dd 100644 --- a/src/content/ccip/concepts/index.mdx +++ b/src/content/ccip/concepts/index.mdx @@ -6,7 +6,7 @@ isIndex: true whatsnext: { "CCIP Architecture": "/ccip/architecture", "Learn CCIP best practices": "/ccip/best-practices" } --- -import CcipCommon from "@features/ccip/CcipCommon.astro" +import CCIPCommon from "@features/ccip/CcipCommon.astro" Before you explore how Chainlink CCIP works in the [architecture guide](/ccip/architecture), it is best to understand the core concepts. From a0e21630fa149d42e241e0a7ffb6893b24c05bb7 Mon Sep 17 00:00:00 2001 From: aelmanaa Date: Thu, 26 Sep 2024 12:24:04 +0100 Subject: [PATCH 07/20] nit --- src/config/sidebar.ts | 8 ++++---- src/content/ccip/concepts/ccip-execution-latency.mdx | 2 +- src/content/ccip/concepts/index.mdx | 2 +- src/content/ccip/supported-networks/index.mdx | 2 ++ 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/config/sidebar.ts b/src/config/sidebar.ts index 05dcb0b00c0..fc6fba55002 100644 --- a/src/config/sidebar.ts +++ b/src/config/sidebar.ts @@ -960,6 +960,10 @@ export const SIDEBAR: Partial> = { title: "Service Responsibility", url: "ccip/service-responsibility", }, + { + title: "Execution Latency", + url: "ccip/concepts/ccip-execution-latency", + }, { title: "Billing", url: "ccip/billing", @@ -1040,10 +1044,6 @@ export const SIDEBAR: Partial> = { title: "Architecture", url: "ccip/architecture", }, - { - title: "Understanding CCIP Execution Latency", - url: "ccip/concepts/ccip-execution-latency", - }, { title: "Manual execution", url: "ccip/concepts/manual-execution", diff --git a/src/content/ccip/concepts/ccip-execution-latency.mdx b/src/content/ccip/concepts/ccip-execution-latency.mdx index 8347cfc6213..a8e1db9fddc 100644 --- a/src/content/ccip/concepts/ccip-execution-latency.mdx +++ b/src/content/ccip/concepts/ccip-execution-latency.mdx @@ -1,7 +1,7 @@ --- section: ccip date: Last Modified -title: "Understanding CCIP Execution Latency" +title: "CCIP Execution Latency" --- import { Aside } from "@components" diff --git a/src/content/ccip/concepts/index.mdx b/src/content/ccip/concepts/index.mdx index 958a0edb1dd..3716e31f593 100644 --- a/src/content/ccip/concepts/index.mdx +++ b/src/content/ccip/concepts/index.mdx @@ -40,7 +40,7 @@ To learn more, read about [blockchain interoperability](https://chain.link/educa Finality varies across different networks. Some networks offer instant finality and others require multiple confirmations. These time differences are set to ensure the security of CCIP and its users. Finality is crucial for token transfers because funds are locked and not reorganized once they are released onto the destination chain. In this scenario, finality ensures that funds on the destination chain are available only after they have been successfully committed on the source chain. -To learn more about finality, read the [Understanding CCIP Execution Latency](/ccip/concepts/ccip-execution-latency) conceptual guide. +To learn more about finality, read the [CCIP Execution Latency](/ccip/concepts/ccip-execution-latency) conceptual guide. ## Lane diff --git a/src/content/ccip/supported-networks/index.mdx b/src/content/ccip/supported-networks/index.mdx index bbdb655233f..005e26690d3 100644 --- a/src/content/ccip/supported-networks/index.mdx +++ b/src/content/ccip/supported-networks/index.mdx @@ -9,3 +9,5 @@ isIndex: true - [Testnet](/ccip/supported-networks/v1_2_0/testnet) To learn about tokens, token pools, and the token onboarding process, see the [CCIP Architecture](/ccip/architecture#token-pools) page. + +To learn about execution latency, see the [CCIP Execution Latency](/ccip/concepts/ccip-execution-latency) page. From 85be6e15d7c42c208ea88a3f47ceb3918061dc6e Mon Sep 17 00:00:00 2001 From: aelmanaa Date: Thu, 26 Sep 2024 12:29:50 +0100 Subject: [PATCH 08/20] nit --- src/content/ccip/best-practices.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/ccip/best-practices.mdx b/src/content/ccip/best-practices.mdx index 503d435775d..ccccea4a764 100644 --- a/src/content/ccip/best-practices.mdx +++ b/src/content/ccip/best-practices.mdx @@ -47,7 +47,7 @@ When you implement the `ccipReceive` [method](/ccip/api-reference/ccip-receiver# ## Using `extraArgs` -The purpose of [`extraArgs`](/ccip/api-reference/client###evmextraargs) is to allow compatibility with future CCIP upgrades. To get this benefit, make sure that `extraArgs` is mutable in production deployments. This allows you to build it offchain and pass it in a call to a function or store it in a variable that you can update on-demand. +The purpose of [`extraArgs`](/ccip/api-reference/client#evmextraargs) is to allow compatibility with future CCIP upgrades. To get this benefit, make sure that `extraArgs` is mutable in production deployments. This allows you to build it offchain and pass it in a call to a function or store it in a variable that you can update on-demand. If `extraArgs` are left empty, a default of _200000_ `gasLimit` will be set. @@ -68,7 +68,7 @@ To estimate the accurate gas limit for your destination contract, consider the f ### Setting `allowOutOfOrderExecution` -The `allowOutOfOrderExecution` parameter enables you to control the execution order of your messages on the destination blockchain. This parameter is part of [`EVMExtraArgsV2`](/ccip/api-reference/client###evmextraargsv2) and is available only on lanes where the **Out of Order Execution** property is set to **Optional** or **Required**. Refer to the [Supported Networks page](/ccip/supported-networks) to determine if your target lane supports this feature. +The `allowOutOfOrderExecution` parameter enables you to control the execution order of your messages on the destination blockchain. This parameter is part of [`EVMExtraArgsV2`](/ccip/api-reference/client#evmextraargsv2) and is available only on lanes where the **Out of Order Execution** property is set to **Optional** or **Required**. Refer to the [Supported Networks page](/ccip/supported-networks) to determine if your target lane supports this feature. #### Best Practices From 7af2592d3c1dbdf8fba9ebd315de9d801ef4ae59 Mon Sep 17 00:00:00 2001 From: aelmanaa Date: Thu, 26 Sep 2024 12:48:28 +0100 Subject: [PATCH 09/20] update page --- src/config/data/ccip/types.ts | 1 + .../supported-networks/LaneConfig.astro | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/config/data/ccip/types.ts b/src/config/data/ccip/types.ts index 2eff3b360fa..9a960c181e8 100644 --- a/src/config/data/ccip/types.ts +++ b/src/config/data/ccip/types.ts @@ -17,6 +17,7 @@ export type LaneConfig = { onRamp: { address: string version: string + enforceOutOfOrder?: boolean } offRamp: { address: string diff --git a/src/features/ccip/components/supported-networks/LaneConfig.astro b/src/features/ccip/components/supported-networks/LaneConfig.astro index 10c3dfd1253..25d961cdfc1 100644 --- a/src/features/ccip/components/supported-networks/LaneConfig.astro +++ b/src/features/ccip/components/supported-networks/LaneConfig.astro @@ -100,6 +100,8 @@ const explorerUrl = getExplorer(sourceChain) if (!explorerUrl) throw Error(`Explorer url not found for ${sourceChain}`) const onRampExplorerUrl = getExplorerAddressUrl(explorerUrl)(onRamp.address) +const enforceOutOfOrder = onRamp.enforceOutOfOrder +const enforceOutOfOrderText = enforceOutOfOrder === undefined ? "" : enforceOutOfOrder ? "Required" : "Optional" let tokensWithExtraInfo: TokenExtraInfo[] = [] @@ -200,6 +202,40 @@ if (supportedTokens) {
+{ + enforceOutOfOrder !== undefined && ( + + <> + + + <> + + + + + + + <> + + <> + + + + + + + +
PropertyValue
+ + {enforceOutOfOrderText}
+ ) +} +
{ tokensWithExtraInfo.length > 0 ? ( <> From 2bd54f8cd754ebf9c5ad397bf61e7c6f08a1d69a Mon Sep 17 00:00:00 2001 From: aelmanaa Date: Thu, 26 Sep 2024 13:28:22 +0100 Subject: [PATCH 10/20] update page --- .../ccip/components/supported-networks/LaneConfig.astro | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/features/ccip/components/supported-networks/LaneConfig.astro b/src/features/ccip/components/supported-networks/LaneConfig.astro index 25d961cdfc1..92e895402c3 100644 --- a/src/features/ccip/components/supported-networks/LaneConfig.astro +++ b/src/features/ccip/components/supported-networks/LaneConfig.astro @@ -220,10 +220,10 @@ if (supportedTokens) { <> {enforceOutOfOrderText} From 9eae2a0cef5d3d23382a43fe15c68b74c994f267 Mon Sep 17 00:00:00 2001 From: aelmanaa Date: Thu, 26 Sep 2024 13:35:06 +0100 Subject: [PATCH 11/20] update page --- .../ccip/components/supported-networks/LaneConfig.astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/ccip/components/supported-networks/LaneConfig.astro b/src/features/ccip/components/supported-networks/LaneConfig.astro index 92e895402c3..f803f7ff5c5 100644 --- a/src/features/ccip/components/supported-networks/LaneConfig.astro +++ b/src/features/ccip/components/supported-networks/LaneConfig.astro @@ -220,7 +220,7 @@ if (supportedTokens) { <> Date: Thu, 26 Sep 2024 13:43:52 +0100 Subject: [PATCH 12/20] update page --- src/features/ccip/RMNCaution.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/ccip/RMNCaution.mdx b/src/features/ccip/RMNCaution.mdx index 438789febc9..9450d9ea38b 100644 --- a/src/features/ccip/RMNCaution.mdx +++ b/src/features/ccip/RMNCaution.mdx @@ -1,6 +1,6 @@ import { Aside } from "@components" -