Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 19 additions & 19 deletions verify/1.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,7 @@ Chain ID: 1 · Bytecode-proven: **20/21** · Canonical: 1

Verification = on-chain runtime bytecode ≡ compile(repo@commit, profile), metadata stripped, immutables masked, embedded child-metadata digests zeroed. The block explorer is never in the trust path. Each proven pin is then diffed against its component's audited baseline — the fixes-included state of the component's most recent audit — so every deployed source delta beyond audited code is shown below as a real diff. Re-run: see the repository README.

## ⚠️ Requires attention

- **eulerSwapV2ProtocolFeeConfig** — post-audit functionality change ([diff below](#component-euler-swap-v2)):
> **Assessment**
> The deployed V2 release (tag eulerswap-2.0) post-dates the September 2025 Cantina review baseline. Within that delta, protocol-fee handling was redesigned: the reviewed model (fee parameters fixed into each pool at install, 10–25% bounds, permissionless enablement after one year) was replaced by the EulerSwapProtocolFeeConfig singleton, which pools query live on every swap. The fee-config admin can set a default fee and per-pool overrides taking effect immediately, up to MAX_PROTOCOL_FEE = 15% of the LP fee amount (lower than the previously reviewed 25% maximum); zero is allowed. Pre-release hardening is included: the admin and fee recipients may not be known EVC sub-accounts, and configuration events are emitted. Curve and quote math are unchanged by this mechanism. It post-dates the September 2025 review and is not yet listed in the audit registry.
**All contracts on this chain are bytecode-proven against their pinned commits.**

## Core lending protocol

Expand All @@ -17,34 +13,38 @@ Verification = on-chain runtime bytecode ≡ compile(repo@commit, profile), meta
| balanceTracker | [`0x0D52d06c…`](https://etherscan.io/address/0x0D52d06ceB8Dcdeeb40Cfd9f17489B350dD7F8a3) | [`reward-streams@9eb7b8a7`](https://github.com/euler-xyz/reward-streams/tree/9eb7b8a7fa31c275d688063c4abd07165b50b89f) | ✅ `48762e01` | +55/−13 vs baseline | claim return values + isRewardEnabled view |
| EUL | [`0xd9Fcd98c…`](https://etherscan.io/address/0xd9Fcd98c322942075A5C3860693e9f4f03AAE07b) | [`euler-governance`](https://github.com/euler-xyz/euler-governance) | 🏛 canonical | long-established (see note) | canonical 2021 token |
| eulOFTAdapter | [`0x3Bf1bD5D…`](https://etherscan.io/address/0x3Bf1bD5DB4457d22A85d45791B6291b98D0fC5b5) | [`evk-periphery@ccd2debc`](https://github.com/euler-xyz/evk-periphery/tree/ccd2debce48ed857c7766bb1955591cfac996d91) | ✅ `e74a0c71` | ≡ baseline | — |
| eVaultFactory | [`0x29a56a1b…`](https://etherscan.io/address/0x29a56a1b8214D9Cf7c5561811750D5cBDb45CC8e) | [`euler-vault-kit@9e3c760e`](https://github.com/euler-xyz/euler-vault-kit/tree/9e3c760e051f5d769f7c6edb9be30198a55117d4) | ✅ `3971bde2` | +1/−1 vs baseline | one fee-share default parameter |
| eVaultImplementation | [`0x8Ff1C814…`](https://etherscan.io/address/0x8Ff1C814719096b61aBf00Bb46EAd0c9A529Dd7D) | [`euler-vault-kit@9e3c760e`](https://github.com/euler-xyz/euler-vault-kit/tree/9e3c760e051f5d769f7c6edb9be30198a55117d4) | ✅ `8c001272` | +1/−1 vs baseline | one fee-share default parameter |
| eVaultFactory | [`0x29a56a1b…`](https://etherscan.io/address/0x29a56a1b8214D9Cf7c5561811750D5cBDb45CC8e) | [`euler-vault-kit@9e3c760e`](https://github.com/euler-xyz/euler-vault-kit/tree/9e3c760e051f5d769f7c6edb9be30198a55117d4) | ✅ `3971bde2` | baseline (unit) | — |
| eVaultImplementation | [`0x8Ff1C814…`](https://etherscan.io/address/0x8Ff1C814719096b61aBf00Bb46EAd0c9A529Dd7D) | [`euler-vault-kit@9e3c760e`](https://github.com/euler-xyz/euler-vault-kit/tree/9e3c760e051f5d769f7c6edb9be30198a55117d4) | ✅ `8c001272` | baseline (unit) | — |
| evc | [`0x0C9a3dd6…`](https://etherscan.io/address/0x0C9a3dd6b8F28529d72d7f9cE918D493519EE383) | [`ethereum-vault-connector@084b3228`](https://github.com/euler-xyz/ethereum-vault-connector/tree/084b32284ba643921f8d21bff3ddaf0c4e08d754) | ✅ `5b470906` | ≡ baseline | — |
| oracleRouterFactory | [`0x70B3f6F6…`](https://etherscan.io/address/0x70B3f6F61b7Bf237DF04589DdAA842121072326A) | [`evk-periphery@05b0acb8`](https://github.com/euler-xyz/evk-periphery/tree/05b0acb8bfb64e663293ab8b236c72c6b3df86ae) | ✅ `fd6ae566` | +10/−1 vs baseline | EVC constructor pass-through |
| protocolConfig | [`0x4cD6BF1D…`](https://etherscan.io/address/0x4cD6BF1D183264c02Be7748Cb5cd3A47d013351b) | [`euler-vault-kit@9e3c760e`](https://github.com/euler-xyz/euler-vault-kit/tree/9e3c760e051f5d769f7c6edb9be30198a55117d4) | ✅ `844a4ed8` | +1/−1 vs baseline | one fee-share default parameter |
| rEUL | [`0xf3e62139…`](https://etherscan.io/address/0xf3e621395fc714B90dA337AA9108771597b4E696) | [`evk-periphery@7a233058`](https://github.com/euler-xyz/evk-periphery/tree/7a23305815ccb4198c117c2d6fcfe8421fe336e3) | ✅ `8d4a5058` | ≡ baseline | — |
| sequenceRegistry | [`0xEADDD216…`](https://etherscan.io/address/0xEADDD21618ad5Deb412D3fD23580FD461c106B54) | [`euler-vault-kit@9e3c760e`](https://github.com/euler-xyz/euler-vault-kit/tree/9e3c760e051f5d769f7c6edb9be30198a55117d4) | ✅ `83359e00` | +1/−1 vs baseline | one fee-share default parameter |
| sequenceRegistry | [`0xEADDD216…`](https://etherscan.io/address/0xEADDD21618ad5Deb412D3fD23580FD461c106B54) | [`euler-vault-kit@9e3c760e`](https://github.com/euler-xyz/euler-vault-kit/tree/9e3c760e051f5d769f7c6edb9be30198a55117d4) | ✅ `83359e00` | baseline (unit) | — |
| swapVerifier | [`0xB1C777BE…`](https://etherscan.io/address/0xB1C777BE7965dCdE810645497CC1e6e5997BD6C5) | [`evk-periphery@edaf96e3`](https://github.com/euler-xyz/evk-periphery/tree/edaf96e32ebe6cb96ae30add934d74fa1d092ff6) | ✅ `2fc2cdd1` | +3/−5 vs baseline | formatting only |

## Euler Earn

| Contract | Address | Source | Bytecode | vs audited baseline | What changed |
|----------|---------|--------|----------|---------------------|--------------|
| eulerEarnFactory | [`0x59709B02…`](https://etherscan.io/address/0x59709B029B140C853FE28d277f83C3a65e308aF4) | [`euler-earn@b2fd6e69`](https://github.com/euler-xyz/euler-earn/tree/b2fd6e699ee20bcfe7459f375b3cee5d2fa53345) | ✅ `c9ee150e` | +18/−18 vs baseline | import-path style only |
| eulerEarnPublicAllocator | [`0x8fdCb80a…`](https://etherscan.io/address/0x8fdCb80a2894F0dC052c8d52D22544DC90274800) | [`euler-earn@b2fd6e69`](https://github.com/euler-xyz/euler-earn/tree/b2fd6e699ee20bcfe7459f375b3cee5d2fa53345) | ✅ `a6bee3db` | +18/−18 vs baseline | import-path style only |
| eulerEarnFactory | [`0x59709B02…`](https://etherscan.io/address/0x59709B029B140C853FE28d277f83C3a65e308aF4) | [`euler-earn@b2fd6e69`](https://github.com/euler-xyz/euler-earn/tree/b2fd6e699ee20bcfe7459f375b3cee5d2fa53345) | ✅ `c9ee150e` | +16/−16 vs baseline | import-path style only |
| eulerEarnPublicAllocator | [`0x8fdCb80a…`](https://etherscan.io/address/0x8fdCb80a2894F0dC052c8d52D22544DC90274800) | [`euler-earn@b2fd6e69`](https://github.com/euler-xyz/euler-earn/tree/b2fd6e699ee20bcfe7459f375b3cee5d2fa53345) | ✅ `a6bee3db` | +7/−7 vs baseline | import-path style only |

## EulerSwap

- **eulerSwapV2ProtocolFeeConfig** — post-audit functionality change ([diff below](#component-euler-swap-v2)):
> **Assessment**
> The deployed V2 release (tag eulerswap-2.0) post-dates the September 2025 Cantina review baseline. Within that delta, protocol-fee handling was redesigned: the reviewed model (fee parameters fixed into each pool at install, 10–25% bounds, permissionless enablement after one year) was replaced by the EulerSwapProtocolFeeConfig singleton, which pools query live on every swap. The fee-config admin can set a default fee and per-pool overrides taking effect immediately, up to MAX_PROTOCOL_FEE = 15% of the LP fee amount (lower than the previously reviewed 25% maximum); zero is allowed. Pre-release hardening is included: the admin and fee recipients may not be known EVC sub-accounts, and configuration events are emitted. Curve and quote math are unchanged by this mechanism. It post-dates the September 2025 review and is not yet listed in the audit registry.

| Contract | Address | Source | Bytecode | vs audited baseline | What changed |
|----------|---------|--------|----------|---------------------|--------------|
| eulerSwapV1Factory | [`0xb013be1D…`](https://etherscan.io/address/0xb013be1D0D380C13B58e889f412895970A2Cf228) | [`euler-swap@b948f405`](https://github.com/euler-xyz/euler-swap/tree/b948f4052d7ab3116235ec754368b7125dbd5082) | ✅ `7c9a247e` | +45/−26 vs baseline | SPDX licenses + event hoisting |
| eulerSwapV1Implementation | [`0xc35a0FDA…`](https://etherscan.io/address/0xc35a0FDA69e9D71e68C0d9CBb541Adfd21D6B117) | [`euler-swap@b948f405`](https://github.com/euler-xyz/euler-swap/tree/b948f4052d7ab3116235ec754368b7125dbd5082) | ✅ `20cae9a4` | +45/−26 vs baseline | SPDX licenses + event hoisting |
| eulerSwapV1Periphery | [`0x208fF5Eb…`](https://etherscan.io/address/0x208fF5Eb543814789321DaA1B5Eb551881D16b06) | [`euler-swap@b948f405`](https://github.com/euler-xyz/euler-swap/tree/b948f4052d7ab3116235ec754368b7125dbd5082) | ✅ `703cfc72` | +45/−26 vs baseline | SPDX licenses + event hoisting |
| eulerSwapV2Factory | [`0xD0521333…`](https://etherscan.io/address/0xD05213331221fAB8a3C387F2affBb605Bb04DF5F) | [`euler-swap@81cf6dc9`](https://github.com/euler-xyz/euler-swap/tree/81cf6dc988468fd56f690e6bc0e338a5be02d034) | ✅ `4bdd5d47` | +444/−267 vs baseline | fee-config redesign + code-size refactor |
| eulerSwapV2Implementation | [`0x8B0E044E…`](https://etherscan.io/address/0x8B0E044E364F2cE913799d53b300e15A6974DC97) | [`euler-swap@81cf6dc9`](https://github.com/euler-xyz/euler-swap/tree/81cf6dc988468fd56f690e6bc0e338a5be02d034) | ✅ `408124d9` | +444/−267 vs baseline | fee-config redesign + code-size refactor |
| eulerSwapV2Periphery | [`0xD3a349EE…`](https://etherscan.io/address/0xD3a349EE0A21eA0A7E9513ac236ae614b5FD513E) | [`euler-swap@81cf6dc9`](https://github.com/euler-xyz/euler-swap/tree/81cf6dc988468fd56f690e6bc0e338a5be02d034) | ✅ `f98bd760` | +444/−267 vs baseline | fee-config redesign + code-size refactor |
| eulerSwapV2ProtocolFeeConfig | [`0x5171Aed0…`](https://etherscan.io/address/0x5171Aed04Fa9551DB484F07c853F252Bc6F53b63) | [`euler-swap@81cf6dc9`](https://github.com/euler-xyz/euler-swap/tree/81cf6dc988468fd56f690e6bc0e338a5be02d034) | ✅ `83e2e2c4` | +444/−267 vs baseline | fee-config redesign + code-size refactor |
| eulerSwapV2Registry | [`0x5FcCB843…`](https://etherscan.io/address/0x5FcCB84363F020c0cADE052C9c654aABF932814A) | [`euler-swap@81cf6dc9`](https://github.com/euler-xyz/euler-swap/tree/81cf6dc988468fd56f690e6bc0e338a5be02d034) | ✅ `42c58b74` | +444/−267 vs baseline | fee-config redesign + code-size refactor |
| eulerSwapV1Factory | [`0xb013be1D…`](https://etherscan.io/address/0xb013be1D0D380C13B58e889f412895970A2Cf228) | [`euler-swap@b948f405`](https://github.com/euler-xyz/euler-swap/tree/b948f4052d7ab3116235ec754368b7125dbd5082) | ✅ `7c9a247e` | +43/−24 vs baseline | SPDX licenses + event hoisting |
| eulerSwapV1Implementation | [`0xc35a0FDA…`](https://etherscan.io/address/0xc35a0FDA69e9D71e68C0d9CBb541Adfd21D6B117) | [`euler-swap@b948f405`](https://github.com/euler-xyz/euler-swap/tree/b948f4052d7ab3116235ec754368b7125dbd5082) | ✅ `20cae9a4` | +40/−21 vs baseline | SPDX licenses + event hoisting |
| eulerSwapV1Periphery | [`0x208fF5Eb…`](https://etherscan.io/address/0x208fF5Eb543814789321DaA1B5Eb551881D16b06) | [`euler-swap@b948f405`](https://github.com/euler-xyz/euler-swap/tree/b948f4052d7ab3116235ec754368b7125dbd5082) | ✅ `703cfc72` | +3/−3 vs baseline | SPDX licenses + event hoisting |
| eulerSwapV2Factory | [`0xD0521333…`](https://etherscan.io/address/0xD05213331221fAB8a3C387F2affBb605Bb04DF5F) | [`euler-swap@81cf6dc9`](https://github.com/euler-xyz/euler-swap/tree/81cf6dc988468fd56f690e6bc0e338a5be02d034) | ✅ `4bdd5d47` | +276/−202 vs baseline | fee-config redesign + code-size refactor |
| eulerSwapV2Implementation | [`0x8B0E044E…`](https://etherscan.io/address/0x8B0E044E364F2cE913799d53b300e15A6974DC97) | [`euler-swap@81cf6dc9`](https://github.com/euler-xyz/euler-swap/tree/81cf6dc988468fd56f690e6bc0e338a5be02d034) | ✅ `408124d9` | +263/−186 vs baseline | fee-config redesign + code-size refactor |
| eulerSwapV2Periphery | [`0xD3a349EE…`](https://etherscan.io/address/0xD3a349EE0A21eA0A7E9513ac236ae614b5FD513E) | [`euler-swap@81cf6dc9`](https://github.com/euler-xyz/euler-swap/tree/81cf6dc988468fd56f690e6bc0e338a5be02d034) | ✅ `f98bd760` | +5/−2 vs baseline | fee-config redesign + code-size refactor |
| eulerSwapV2ProtocolFeeConfig | [`0x5171Aed0…`](https://etherscan.io/address/0x5171Aed04Fa9551DB484F07c853F252Bc6F53b63) | [`euler-swap@81cf6dc9`](https://github.com/euler-xyz/euler-swap/tree/81cf6dc988468fd56f690e6bc0e338a5be02d034) | ✅ `83e2e2c4` | +147/−0 vs baseline | fee-config redesign + code-size refactor |
| eulerSwapV2Registry | [`0x5FcCB843…`](https://etherscan.io/address/0x5FcCB84363F020c0cADE052C9c654aABF932814A) | [`euler-swap@81cf6dc9`](https://github.com/euler-xyz/euler-swap/tree/81cf6dc988468fd56f690e6bc0e338a5be02d034) | ✅ `42c58b74` | +185/−17 vs baseline | fee-config redesign + code-size refactor |


## EVault modules (unpacked from the implementation)
Expand Down Expand Up @@ -839,4 +839,4 @@ index 23a3c2fd..ec881e76 100644

- **EUL** (`0xd9Fcd98c322942075A5C3860693e9f4f03AAE07b`): Canonical EUL governance token: contract Eul (contracts/governance/Eul.sol) in euler-xyz/euler-governance — an OpenZeppelin-based ERC20 with Votes/Permit and AccessControl, plus a treasury mint restricted to at most 2.718% of supply per year. Deployed at the end of 2021 (last source change 2021-12-30, commit 1249ea8b) and in continuous use since; documented here as provenance context rather than re-proven from a commit pin. BailSec performed a retrospective re-audit of exactly the deployed revision in June 2025 (bailsec-eul-erc20-2025: 4 informational findings, all acknowledged — the deployed contract is immutable). This token is the lock/unlock asset held by the mainnet OFT adapter; the bridged EUL on all other chains is the separate ERC20BurnableMintable, bytecode-proven in those chains’ reports.

_Generated by euler-verifier @ feat/p2-manifests; inputs: verify/manifest.json, verify/audits.json, verify/baselines.json._
_Generated by euler-verifier @ master; inputs: verify/manifest.json, verify/audits.json, verify/baselines.json._
Loading
Loading