Repository navigation
v0.3.0 Release - #73
Merged
Merged
Conversation
…axAnswer functions. Add functionality to MockV3Aggregator to change underlying aggregator
* feat: Add new changes to support CCIP v1.5 version * forge: Update ccip
…tnet lanes. Prepare for 0.2.2-beta.0 release (#21)
…hainAndRouteMessage function of CCIPLocalSimulatorFork (#23)
- Bump @chainlink/contracts-ccip to v1.5.0 - Delete DOCUMENTATION.md and related assets, and point to official documentation at README - Update CHANGELOG
* feat: Add mock data streams contracts * feat: smoke test data streams in local mode in Foundry with docs examples * feat: Add GMX-like test example * feat: Add DataStreamsLocalSimulatorFork implemented in both Solidity and JavaScript * feat: Add MockReportGenerator.js to support local mode in Hardhat; Support Forking mode in Hardhat * chore: Prepare for 0.2.4-beta release * chore: Generate docs artifacts
…er) with chainlink-local versioning (#31) Co-authored-by: emanherawy <eman.herawy@gmaail.com>
* chore: Bumped @chainlink/contracts to 1.3.0. Started returning raw report structs from generateReportV- functions which is handful for tests * chore: Generate docs artifacts for this adjustment
* chore: Bumped @chainlink/contracts to 1.3.0. Started returning raw report structs from generateReportV- functions which is handful for tests * chore: Generate docs artifacts for this adjustment * fix: Year should be 2025 instead of 2024
* fix: Fix incorrect import path * chore: Prepared changelog and package.json for v0.2.4-beta.1 release
g the commit.
* feat: Add support for CCIP v1.6 * chore: Removed lib/ccip and lib/chainlink-brownie-contracts dependencies * fix: Accept copilot's suggestions
…o v1.4.0 and @chainlink/contracts-ccip to v1.6.0
* fix: Refactored CCIPLocalSimulatorFork.sol so it can route all CCIP messages sent from a loop and not just the first one * fix: Correct loop variable k
* fix: Refactor switchChainAndRouteMessage to deliver more than 1 message to more than 1 chain in a same call * chore: Ran `npm run generate-docs` * fix: Correct offRamp index in executeSingleMessage call in CCIPLocalSimulatorFork
* feat: Implement fee manager toggle for on-chain and off-chain billing in DataStreamsLocalSimulator * feat: Add developer friendly error messages when wrong Data Streams billing mechanism is used * fix: Vendor Chainlink contracts that caused compilation issues with Hardhat 2 * chore: Merge publishing beta releases into a single workflow file
…ion consistency validation logic (#49)
* Added script to update Register.sol - Added script to query CCIP API and update Register.sol constructor - Updated Register.sol with latest contents * Added npm scripts - Added npm script to update the register contract - Added pre script that updates the register contract whenever generate-docs is called * Include both testnet and mainnet networks in ccip register.sol - Updated updateRegisterContract.js to include both mainnet and testnet networks in Register.sol - Updated Register.sol with latest contents for both mainnet and testnet networks - Updated package.json scripts to reflect the changes * chore: Prepare for 0.2.8-beta release --------- Co-authored-by: andrejrakic <andrej.rakic@smartcontract.com>
Modified the updateRegisterContract helper to use a base url from env variables. Includes new helper function to construct apiUrl from path and parameters. Base url can be set with: CCIP_API_BASE_URL=<base_url> Commit includes update to Register contract.
…lSimulatorFork (#59)
* fix: Use abi.encode for v1.6 message sender in CCIPLocalSimulatorFork
fix: Use abi.encode for v1.6 message sender in CCIPLocalSimulatorFork
`_executePostV1dot6` built `Internal.Any2EVMRampMessage.sender` with
`abi.encodePacked(address)` (20 bytes). Production v1.6 lanes with an EVM
source chain deliver it as `abi.encode(address)` (32-byte word), which is
what `Client.Any2EVMMessage.sender` documents ("abi.decode(sender) if
coming from an EVM chain") and what the OffRamp passes straight through to
the receiver.
The 20-byte form broke receivers two ways during fork testing: an
`abi.decode(message.sender, (address))` reverted, and a raw-bytes
comparison against `abi.encode(trustedRemote)` fell through to the
untrusted-sender branch.
This completes the 20-vs-32-byte encoding corrections made in 0.2.9 for
`receiver` and `destTokenAddress`, and restores parity with local mode,
where `MockCCIPRouter` already uses `abi.encode(msg.sender)`.
Adds a unit regression test that drives `_executePostV1dot6` against a
recording OffRamp mock and asserts the delivered `sender` is 32 bytes and
decodes back to the original address. Verified non-vacuous: it fails with
`20 != 32` without the fix.
Closes #62
* test: Assert v1.6 sender matches an encoded trusted remote
Receivers consume `Client.Any2EVMMessage.sender` in two ways, and they fail
differently when it arrives as 20 packed bytes instead of a 32-byte ABI word:
- `abi.decode(sender, (address))` reverts, so the message is never delivered.
- `keccak256(sender) == keccak256(abi.encode(trustedRemote))` returns false,
so the receiver runs without error and silently takes its untrusted-sender
branch
The existing assertions covered only the first. This pins the raw-bytes
comparison as well, so both documented consumption patterns are checked
against the bytes `_executePostV1dot6` actually produces.
* DEVREL 147: Migrate to HH3 (#53) * refactor: Migrate to HH3, update dependencies, delete vendor folder * feat: Add ExtraArgsV3 test * feat: Adapt CCIPLocalSimulatorFork to be backwards compatible with all CCIP versions * feat: Add tests for scenarios around ExtraArgsV3 * chore: Use MockVerifier in CCVs tests; Fix LooperFork test * feat: Add CCT related tests * devrel-207: fix publishing beta release workflow * chore: Improve generate-docs script by removing external rimraf and solidity-docgen dependencies and relying on forge docs instead plus some scripts to keep the formatting bacwards compatible * devrel-206: Create AGENTS.md file * fix: Remove --no-commit flag from AGENTS.md * refactor: Replace requireFinality bool with setMinBlockDepth * chore: Extract release workflow into .agent/playbooks * feat: route CCIP 2.0 messages with OffRamp-derived CCV selection Adds V2VerificationMode.OFFRAMP_DERIVED: the required CCV list comes from the destination OffRamp (getCCVsForMessage) and the raw encoded message is executed through the permissionless execute entrypoint, so fork routing does not depend on the local MessageV1 codec. Keeps V2 fork tests working when the on-chain wire format moves ahead of the pinned chainlink-ccip (today: finality uint16 -> bytes4, chainlink-ccip #1898). - CCIPLocalSimulatorFork: new mode + _routeV2MessageOffRampDerived / _executeOffRampDerivedV2; destination chain resolved from the event topics with no MessageV1 decode; falls back across candidate OffRamps and marks processed only on success. - Fork-only test helpers ported onto V3: getOffRampForLane, setLaneDefaultCCVs, IOffRampSourceConfigV2Fork, plus the CCVNoOpVerifier test double. - IOffRampExecuteV2 gains the bytes-based execute entrypoint. - New e2e: test/e2e/ccip/CCIPv2Fork.t.sol (Sepolia -> Arb Sepolia message and token transfer over the live 2.0 lane with a no-op default CCV). - Unit 42/42; live e2e 2/2 with public RPCs. * feat!: support CCIP 2.0 in Chainlink Local (V3) - Pin chainlink-ccip to contracts-ccip-v2.0.0 and @chainlink/contracts-ccip to 2.0.0; migrate finality to bytes4 FinalityCodec (extraArgs V3, receivers, pools, test helpers). - CCIPLocalSimulatorFork: make OFFRAMP_DERIVED (magiodev-cll#3) the default V2 mode; mark processed only on SUCCESS, execute only the lane OffRamp, honour the NO_EXEC queue, synthetic results for resolver CCVs. - Fix the OffRamp lookup reverting on mixed-era router lists: dispatch on typeAndVersion, isolate every decode, skip unknown shapes. - Route dedicated CCIP 2.0 routers (getCCIPV2RouterAddress / setCCIPV2RouterAddress; Sepolia and Fuji seeded). - Local mode: CCIPLocalRouter enforces CCIP 2.0 receiver finality for Fast Transfers. - Hardhat 3 JS helpers: CCIP (all eras) and Data Streams rebuilt as ESM taking a network connection; fix npm files casing. - Remove dead code: abi/*.json (no longer shipped), Hardhat 2 examples and .spec.ts tests, duplicate IRouterFork.OffRamp and _decodeEVMAddress. - evm_version = cancun; version 0.3.0-beta.0. - Tests: unit tests for lookup, V2 routing and local finality; fork suites for Sepolia<->Fuji 2.0, mainnet 2.0, pinned-block 1.6; Hardhat 3 JS tests. - Docs: CHANGELOG (breaking changes, support matrix, migration, known limitations), README, AGENTS.md, api_reference. BREAKING CHANGE: see CHANGELOG.md "Breaking changes", "Removed" and "Migration guide". * chore: forge fmt * feat: harden CCIP 2.0 routing, JS helper and packaging for 0.3.0-beta - Fork routing: CCV quorum selection, 1.6 destination filter, strict routing with getMessageStatus, per-destination routing (QUEUED until its fork is routed), stamped OffRamp preference, resolver re-check after fork resets, zero token gas overrides, destination fork selected after routing - Register data generated into code; simulator deploys in ~14.4M gas - Register regenerated from the CCIP directory API (134 chains); wrapped native token selection fixed (was GHO on Ethereum, Sepolia, Arbitrum, Base) - Local router: CCIP 2.0 OnRamp/OffRamp rules, unique messageIds, MessageGasLimitTooHigh above uint32 - Hardhat 3 JS helper: 1.6 destination check, decoded execution errors, TypeScript declarations, offline unit tests - npm packaging for Hardhat 3 / Foundry consumers; chainlink-ccip pinned to contracts-ccip-v2.0.0 - CI workflow with tarball consumer smoke test BREAKING CHANGE: see CHANGELOG "Breaking changes" and migration guide. * fix: widen MessageV1 onRamp length before offset arithmetic * chore: release 0.3.0-beta changelog --------- Co-authored-by: Stefano Magini <265085634+magiodev-cll@users.noreply.github.com>
#69) * fix: split Register network details into data shards (EIP-170) Register's built-in network details are generated into readable RegisterData0..N shards placed with vm.etch, so every generated contract runtime stays under the EIP-170 limit for consumers that size-gate artifacts. Register keeps the override storage and dispatches lookups to the shards. * refactor: enforce IRegisterDataShard in generated shards Also drop the unused buildShards export and fold the built-in details unit test into the multi-shard decode test.
chore: prepare repo for v0.3.0 release
|
👋 andrejrakic, thanks for creating this pull request! To help reviewers, please consider creating future PRs as drafts first. This allows you to self-review and make any final changes before notifying the team. Once you're ready, you can mark it as "Ready for review" to request feedback. Thanks! |
andrejrakic
marked this pull request as draft
October 5, 2026 15:34
ci: pin foundry-toolchain to a commit SHA
andrejrakic
marked this pull request as ready for review
October 5, 2026 15:42
thodges-gh
approved these changes
Oct 5, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Promotes
developtomainfor the v0.3.0 stable release (Chainlink Local V3).0.3.0-beta.0was published and tested; no code changes since, only the release prep from #72 (version bump, CHANGELOG0.3.0entry, README install instructions andGenericExtraArgsV3example).See the
0.3.0and0.3.0-betaentries inCHANGELOG.mdfor the full list of changes and the 0.2.x -> 0.3.0 migration guide. Hardhat 2 users stay on0.2.x.Merge instructions
main/developdivergence that caused conflicts for this release.After merge: GitHub release
v0.3.0targetingmain(pre-release off) triggers the npm publish (latest->0.3.0).