You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
CCIPLocalSimulatorFork.switchChainAndRouteMessage now pairs the destination OffRamp with the source OnRamp by reading getSourceChainConfig (v1.6+) and getStaticConfig (pre-v1.6), and falls back to trying other OffRamps with the same sourceChainSelector when execution fails or no deterministic match is found.
CCIPLocalSimulatorFork.switchChainAndRouteMessage now correctly decodes destTokenAddress for v1.6 token transfers. The 32-byte abi.encode(address) value was previously truncated via a bytes20 cast, yielding a garbage address and causing the destination OffRamp's TokenAdminRegistry.getPool lookup to revert. Decoding now handles both 32-byte ABI-encoded and 20-byte packed forms, matching production OffRamp behavior, and is shared with receiver decoding via a single internal _decodeEVMAddress helper.
For v1.6 token transfers, sourcePoolAddress is now passed to Internal.Any2EVMTokenTransfer as abi.encode(address) (32-byte word), matching production OnRamp output and destination pool validation. The simulator previously used abi.encodePacked(address) (20 bytes), which caused compatible pools to revert with InvalidSourcePoolAddress during fork testing.
CCIPLocalSimulatorFork.switchChainAndRouteMessage now correctly decodes destTokenAddress for v1.6 token transfers. The 32-byte abi.encode(address) value was previously truncated via a bytes20 cast, yielding a garbage address and causing the destination OffRamp's TokenAdminRegistry.getPool lookup to revert. Decoding now handles both 32-byte ABI-encoded and 20-byte packed forms, matching production OffRamp behavior, and is shared with receiver decoding via a single internal _decodeEVMAddress helper.
For v1.6 token transfers, sourcePoolAddress is now passed to Internal.Any2EVMTokenTransfer as abi.encode(address) (32-byte word), matching production OnRamp output and destination pool validation. The simulator previously used abi.encodePacked(address) (20 bytes), which caused compatible pools to revert with InvalidSourcePoolAddress during fork testing.
CCIPLocalSimulatorFork.switchChainAndRouteMessage now pairs the destination OffRamp with the source OnRamp by reading getSourceChainConfig (v1.6+) and getStaticConfig (pre-v1.6), and falls back to trying other OffRamps with the same sourceChainSelector when execution fails or no deterministic match is found.
Added switchChainAndRouteMessage(uint256[] memory chainIds) function which is an overlap of already existing switchChainAndRouteMessage(chainId) in the CCIPLocalSimulatorFork.sol contract. This new function can be used to route multiple CCIP messages to multiple chains in a single call.
Changed
Refactored CCIPLocalSimulatorFork.sol so it can route all CCIP messages sent from a loop and not just the first one
Added full support for Data Streams by adding DataStreamsLocalSimulator.sol
(Foundry/Hardhat/Remix IDE local mode), DataStreamsLocalSimulatorFork.sol
(Foundry forked mode), DataStreamsLocalSimulatorFork.js (Hardhat forked
mode) and MockReportGenerator.sol & MockReportGenerator.js to mock
generating unverified reports by Data Streams DON for local modes in Foundry
and Hardhat respectively.
Instructions to install Chainlink Local using Soldeer
Changed
Bumped @chainlink/contracts to 1.3.0 version
Started returning raw Report structs from generateReportV2,
generateReportV3 andgenerateReportV4 functions alongside the
signedReport bytes blob which is already returned
Instructions to install Chainlink Local using Soldeer
Changed
Bumped @chainlink/contracts to 1.3.0 version
Started returning raw Report structs from generateReportV2,
generateReportV3 andgenerateReportV4 functions alongside the
signedReport bytes blob which is already returned
Added full support for Data Streams by adding DataStreamsLocalSimulator.sol
(Foundry/Hardhat/Remix IDE local mode), DataStreamsLocalSimulatorFork.sol
(Foundry forked mode), DataStreamsLocalSimulatorFork.js (Hardhat forked
mode) and MockReportGenerator.sol & MockReportGenerator.js to mock
generating unverified reports by Data Streams DON for local modes in Foundry
and Hardhat respectively.
Support for Chainlink CCIP v1.5 (bumped @chainlink/contracts-ccip to
1.5.0)
Added CCIP v1.5 config details to Register.sol for all available testnet
lanes
Set EVM Version strictly to paris for all contracts
Added supportNewTokenViaOwner and supportNewTokenViaGetCCIPAdmin functions
to CCIPLocalSimulator.sol instead of supportNewToken function
Added rmnProxyAddress, tokenAdminRegistryAddress and
registryModuleOwnerCustomAddress to the NetworkDetails struct of the
Register.sol smart contract
Added unit tests for new functions in the CCIPLocalSimulator.sol contract
Added e2e test for new changes in the CCIPLocalSimulatorFork.sol contract.
There is a test with ERC-20 token with an owner() function implemented and
Burn & Mint Pool, and test with ERC-20 token with a getCCIPAdmin() function
implemented and Lock & Release Pool
Genereted new docs artifacts
Changed
Bumped Solidity compiler version from 0.8.19 to 0.8.24
The getSupportedTokens() function now only exists in the
CCIPLocalSimulator.sol contract, it has been removed from the CCIP's
Router.sol contract. Calling that function from the Router.sol contract in
the Forking mode will now revert
Added uint32[] memory tokenGasOverrides as function parameter to the
executeSingleMessage function in the CCIPLocalSimulatorFork.sol contract
to reflect new changes in the CCIP's EVM2EVMOffRamp.sol smart contract
Bumped pragma solidity version of BasicTokenSender.sol,
CCIPReceiver_Unsafe.sol, ProgrammableTokenTransfers and
ProgrammableDefensiveTokenTransfers.sol contracts from the src/test folder
from 0.8.19 to 0.8.24
Removed
Removed supportNewToken function from CCIPLocalSimulator.sol
Removed CCIPLocalSimulatorV0.sol and MockEvm2EvmOffRamp.sol contracts as
they have not being used for a while
Support for Chainlink CCIP v1.5 (bumped @chainlink/contracts-ccip to
1.5.0-beta.0)
Set EVM Version strictly to paris for all contracts
Added supportNewTokenViaOwner and supportNewTokenViaGetCCIPAdmin functions
to CCIPLocalSimulator.sol instead of supportNewToken function
Added rmnProxyAddress, tokenAdminRegistryAddress and
registryModuleOwnerCustomAddress to the NetworkDetails struct of the
Register.sol smart contract
Added unit tests for new functions in the CCIPLocalSimulator.sol contract
Added e2e test for new changes in the CCIPLocalSimulatorFork.sol contract.
There is a test with ERC-20 token with an owner() function implemented and
Burn & Mint Pool, and test with ERC-20 token with a getCCIPAdmin() function
implemented and Lock & Release Pool
Changed
Bumped Solidity compiler version from 0.8.19 to 0.8.24
The getSupportedTokens() function now only exists in the
CCIPLocalSimulator.sol contract, it has been removed from the CCIP's
Router.sol contract. Calling that function from the Router.sol contract in
the Forking mode will now revert
Added uint32[] memory tokenGasOverrides as function parameter to the
executeSingleMessage function in the CCIPLocalSimulatorFork.sol contract
to reflect new changes in the CCIP's EVM2EVMOffRamp.sol smart contract
Bumped pragma solidity version of BasicTokenSender.sol,
CCIPReceiver_Unsafe.sol, ProgrammableTokenTransfers and
ProgrammableDefensiveTokenTransfers.sol contracts from the src/test folder
from 0.8.19 to 0.8.24
Removed
Removed supportNewToken function from CCIPLocalSimulator.sol
Removed CCIPLocalSimulatorV0.sol and MockEvm2EvmOffRamp.sol contracts as
they have not being used for a while