Skip to content

v2.9.0

Latest

Choose a tag to compare

@MSevey MSevey released this 11 Jul 00:09
1d66030

Release Notes

Range: v2.8.17...v2.9.0  ·  22 commits  ·  222 files changed (+39,061 / −15,833)

This release is a major architectural overhaul of Eco Routes: a cross-VM "Universal" intent model, a new deposit-address product line, three new provers, a restructured vault, and an automated semantic-release pipeline.

🚀 Highlights

Universal (cross-VM) Intent Source (#237)

  • Reworked IntentSource into a modular source/ architecture (BaseSource, EvmSource, UniversalSource) with a new UniversalIntentSource that uses bytes32 addresses throughout for EVM (20-byte) ↔ Solana (32-byte) compatibility.
  • Added AddressConverter / Endian / typeCasts utilities and converted the Whitelist system and all message-bridge provers (MessageBridgeProver, HyperProver, MetaProver) to bytes32 addressing.
  • Guarantees intent-hash and CREATE2 vault-address consistency across address encodings.

Deposit Addresses — deterministic funding addresses (#366, #367, #368, #374, #375, #381)

  • New contracts/deposit/ module: BaseDepositAddress / BaseDepositFactory plus three variants:
    • DepositAddress_CCTPMint_Arc — dual-intent CCTP burn + Gateway deposit for chains where USDC is native (Arc).
    • DepositAddress_CCTPMint_GatewayERC20 — same flow for chains where USDC is a standard ERC20 (Base, Optimism, Arbitrum, Polygon).
    • DepositAddress_USDCTransfer_Solana — direct USDC transfer path.
  • CCTP V2 fast-deposit with a configurable maxFeeBps, and a per-deployment flat protocol fee baked into the intent spread (solver profit).
  • createIntentWithApproval lets users approve the deterministic deposit contract directly (trustless) instead of a mutable operator wallet.

New provers

  • CCIPProver (#347) — Chainlink CCIP integration (IAny2EVMMessageReceiver), native fee token, configurable gas limits.
  • LocalProver with flash-fulfill (#354) — atomic same-chain fulfillment with rewards conditional on a secondary intent, plus permissionless release/refund and a LocalProverTron variant.
  • LayerZeroProver + permissionless Base↔Tron deployment (#382) — deterministic CREATE3/CREATE2 deploy tooling, Tron LZ endpoint support, and corrected bytes32 address alignment across the Tron boundary.
  • PolymerProver updated for the new routes/bytes32 model (#335).

Vault restructure

  • Moved to contracts/vault/ (Vault, VaultTron, Proxy, Clones), with Executor extracted into a standalone contract.

Automated releases (#410)

  • Adopted solver-style semantic-release on main: computes the next version from conventional commits, rewrites contract version() functions and package.json, updates CHANGELOG.md, and tags a GitHub release. CI gates releases on forge test and a version-baseline guard (requires a reachable stable tag ≥ v2.8.17).

🔒 Security & Fixes

  • fix(vault): revert on failed native transfer in withdraw (#394) — a discarded return value previously left intents marked Withdrawn with no refund path, silently losing the claimant's reward. refund() intentionally keeps fire-and-forget behavior.
  • Withdrawal/refund griefing fix (#387, #360) — replaced revertible call{value} with Solady's forceSafeTransferETH in Vault.withdraw/refund and LocalProver.flashFulfill, so a malicious reverting claimant can't grief settlement.
  • Handle non-standard ERC20 transfer return values in Vault and LocalProver (#382).
  • Added a formal security disclosure policy (#389): SECURITY.md, AGENTS.md, PR-template attestation, and private-advisory routing for deployed-contract vulnerabilities; CLAUDE.md now tracked.

🧹 Housekeeping

  • Migrated from CODEOWNERS to auto-request-review (#378), added CODEOWNERS (#355), added audit reports (#386), README updates (#342), and PR reconciliation into main (#387, #388).
  • Removed the earlier GatewayDeposit contracts in favor of the CCTP dual-intent flow (#375).
  • Renamed Whitelist from tools/ to libs/; removed ICreateX.

🧪 Testing

  • Large migration toward Foundry: new .t.sol suites for Inbox, Vault, IntentSource, Executor, every prover, deposit variants, and libs (~15k lines of new tests).

Full changelog: v2.8.17...1d660301