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
IntentSourceinto a modularsource/architecture (BaseSource,EvmSource,UniversalSource) with a newUniversalIntentSourcethat usesbytes32addresses throughout for EVM (20-byte) ↔ Solana (32-byte) compatibility. - Added
AddressConverter/Endian/typeCastsutilities and converted theWhitelistsystem and all message-bridge provers (MessageBridgeProver,HyperProver,MetaProver) tobytes32addressing. - 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/BaseDepositFactoryplus 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). createIntentWithApprovallets 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
LocalProverTronvariant. - LayerZeroProver + permissionless Base↔Tron deployment (#382) — deterministic CREATE3/CREATE2 deploy tooling, Tron LZ endpoint support, and corrected
bytes32address alignment across the Tron boundary. - PolymerProver updated for the new routes/
bytes32model (#335).
Vault restructure
- Moved to
contracts/vault/(Vault,VaultTron,Proxy,Clones), withExecutorextracted into a standalone contract.
Automated releases (#410)
- Adopted solver-style semantic-release on
main: computes the next version from conventional commits, rewrites contractversion()functions andpackage.json, updatesCHANGELOG.md, and tags a GitHub release. CI gates releases onforge testand 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 markedWithdrawnwith 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'sforceSafeTransferETHinVault.withdraw/refundandLocalProver.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.mdnow tracked.
🧹 Housekeeping
- Migrated from
CODEOWNERSto auto-request-review (#378), added CODEOWNERS (#355), added audit reports (#386), README updates (#342), and PR reconciliation into main (#387, #388). - Removed the earlier
GatewayDepositcontracts in favor of the CCTP dual-intent flow (#375). - Renamed
Whitelistfromtools/tolibs/; removedICreateX.
🧪 Testing
- Large migration toward Foundry: new
.t.solsuites for Inbox, Vault, IntentSource, Executor, every prover, deposit variants, and libs (~15k lines of new tests).
Full changelog: v2.8.17...1d660301