Skip to content

fix: earnUSDe re-deploy (Ethereum + Mantle + Plasma)#162

Merged
tamtamchik merged 11 commits into
feat/mantle-meta-updatesfrom
fix/earnusde-swapmodule-redeploy
Jun 2, 2026
Merged

fix: earnUSDe re-deploy (Ethereum + Mantle + Plasma)#162
tamtamchik merged 11 commits into
feat/mantle-meta-updatesfrom
fix/earnusde-swapmodule-redeploy

Conversation

@tamtamchik

@tamtamchik tamtamchik commented Jun 1, 2026

Copy link
Copy Markdown
Member

Updates the earnUSDe (Experimental) meta configs for the redeployed contracts on Ethereum, Mantle, and Plasma, plus a small Ethereum meta_core calldata fix.

Ethereum (meta_usd_config.yaml)

  • Replace all earnUSDe contract addresses with the new deployment
  • Add SyncDepositQueue (USDe)
  • Drop orphaned AaveOracle wrapper — SwapModule reads the Aave oracle directly

Mantle (meta_usde_mantle_config.yaml)

  • Replace all 8 proxy addresses with the latest deployment
  • Switch ShareManager implementation to BurnableTokenizedShareManager
  • Add OracleSubmitter and TimelockController
  • Reorder contract groups to match the Ethereum earnUSDe config

Plasma (meta_usde_plasma_config.yaml)

  • Replace core proxies + SwapModule + Subvault 0 / Verifier 0
  • Add Subvault 1 / Verifier 1 (new in this deploy)
  • Switch ShareManager implementation to BurnableTokenizedShareManager
  • Add OracleSubmitter, enable TimelockController
  • Reorder contract groups to match the Ethereum earnUSDe config

Ethereum meta_core_config.yaml

  • Add missing constructor_calldata for 8 core implementations (Vault, DepositQueue, Oracle, TokenizedShareManager, FeeManager, RiskManager, Subvault, Verifier) — they had no calldata and the explorer returns empty args, so diffyscan reported false bytecode mismatches. All 8 now fully match.

Arbitrum

  • Remove the outdated meta_usde_arb_config.yaml (no current Arbitrum earnUSDe deployment to track).

Notes

  • Proxy / OracleSubmitter / Timelock constructor calldata extracted from on-chain creation traces (CREATE2 deployments return empty args on the explorers).
  • Verified with diffyscan on all networks: sources identical; verified non-proxy contracts match byte-for-byte; proxies differ only on the immutable ProxyAdmin reference (expected for every TransparentUpgradeableProxy).
  • Error-handling changes (resilience to unverified contracts / ExceptionHandler rework) were reverted from this PR — they broke a valid eth_call-revert case in CI and will be reworked in a separate PR.
  • This branch also carries pre-existing, non-earnUSDe changes (CircuitBreaker regression entry, base/arbitrum meta_core, node_handler tweaks) that predate the earnUSDe work.

- eth/plasma SwapModule proxies -> redeployed addresses + ctor calldata
- add missing ctor calldata for earnUSDe proxies (explorer returns empty)
- drop orphaned AaveOracle wrapper (SwapModule now reads Aave oracle directly)

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates on-chain configuration samples (notably earnUSDe SwapModule proxy redeploy + constructor calldata) and improves Solidity compiler output handling to surface clearer CompileErrors, while also adding several new mainnet config samples and expanding the regression workflow matrix.

Changes:

  • Improve compile_contracts() error handling for non-JSON / no-contracts solc output, with new pytest coverage.
  • Update earnUSDe (Ethereum + Plasma) meta configs to reflect redeployed SwapModule proxy addresses and provide missing proxy constructor calldata.
  • Add new mainnet config samples (VaultHub/LazyOracle/EasyTrack v3.0.2, GGV Migrator V2, CircuitBreaker) and run CircuitBreaker in regression CI.

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
tests/test_compiler.py Adds tests asserting compile_contracts() raises CompileError on malformed/empty solc output and succeeds on valid output.
diffyscan/utils/compiler.py Parses solc stdout as JSON with clearer failures; raises CompileError when "contracts" is missing.
config_samples/plasma/mainnet/meta/meta_usde_plasma_config.yaml Updates Plasma SwapModule proxy address and its constructor calldata for bytecode comparison.
config_samples/ethereum/mainnet/meta/meta_usd_config.yaml Updates earnUSDe SwapModule proxy address, adds missing proxy constructor calldata, and removes AaveOracle wrapper entry.
config_samples/ethereum/mainnet/vaults/vaults_v3_0_2_vaulthub_config.json Adds a VaultHub config sample with constructor args for bytecode comparison.
config_samples/ethereum/mainnet/vaults/vaults_v3_0_2_lazyoracle_config.json Adds a LazyOracle config sample with constructor args for bytecode comparison.
config_samples/ethereum/mainnet/vaults/vaults_v3_0_2_easytrack_config.json Adds Easy Track config samples with constructor args for bytecode comparison.
config_samples/ethereum/mainnet/ggv_migrator_v2_config.yaml Adds a GGV Migrator V2 config sample with constructor args for bytecode comparison.
config_samples/ethereum/mainnet/circuit-breaker/circuit_breaker_config.yaml Adds a CircuitBreaker config sample with constructor args for bytecode comparison.
.github/workflows/regression.yml Adds CircuitBreaker config to the regression matrix.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread diffyscan/utils/compiler.py
Comment thread .github/workflows/regression.yml
@tamtamchik tamtamchik closed this Jun 1, 2026
@tamtamchik tamtamchik reopened this Jun 1, 2026
@tamtamchik tamtamchik removed request for a team June 1, 2026 11:37
- replace all earnUSDe contract addresses with the new deployment
- add SyncDepositQueue (USDe)
- ctor calldata extracted from on-chain creation traces
  (CREATE2 proxies return empty args on Etherscan)
@tamtamchik tamtamchik changed the title fix: earnUSDe SwapModule redeploy + missing ctor calldata fix: earnUSDe full contract re-deploy Jun 2, 2026
- replace 8 earnUSDe proxy addresses with the new Mantle deployment
- ctor calldata extracted from on-chain creation traces
- bump commented TimelockController address (still unverified on explorer)
@tamtamchik tamtamchik changed the title fix: earnUSDe full contract re-deploy fix: earnUSDe re-deploy (Ethereum + Mantle) Jun 2, 2026
- order contract groups to match the Ethereum earnUSDe config
- enable TimelockController (relies on explorer ctor args, as on Ethereum)
- replace 5 core proxies + SwapModule + Subvault 0 / Verifier 0
- add Subvault 1 / Verifier 1 (new in this deploy)
- switch ShareManager impl to BurnableTokenizedShareManager
- add OracleSubmitter (unverified on explorer yet) and enable TimelockController
- ctor calldata extracted from on-chain creation traces
- reorder contract groups to match the Ethereum earnUSDe config
@tamtamchik tamtamchik changed the title fix: earnUSDe re-deploy (Ethereum + Mantle) fix: earnUSDe re-deploy (Ethereum + Mantle + Plasma) Jun 2, 2026
- replace all 8 proxy addresses with the new deployment
- switch ShareManager impl to BurnableTokenizedShareManager
- add OracleSubmitter and TimelockController (both unverified on explorer yet)
- ctor calldata (proxies, OracleSubmitter, Timelock) from on-chain creation traces
No current Arbitrum earnUSDe deployment to track; meta_core_config stays.
A contract that can't be fetched/compared (e.g. unverified on the
explorer) no longer aborts the whole run. It is logged, recorded in a
new errored_contracts list, and processing continues with the next
contract. Errored contracts are shown in the final summary and still
cause a non-zero exit code, so they aren't masked as success.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.

Comment thread diffyscan/diffyscan.py Outdated
Comment thread diffyscan/diffyscan.py Outdated
Comment thread diffyscan/diffyscan.py Outdated
Vault, DepositQueue, Oracle, TokenizedShareManager, FeeManager,
RiskManager, Subvault, Verifier implementations had no constructor_calldata
and the explorer returns empty args, so diffyscan couldn't simulate them
and reported bytecode mismatches. Add their calldata (mirrors the shared
implementations in meta_usd; TokenizedShareManager from creation trace).
All 8 now fully match.
…andler

Addresses Copilot review:
- bytecode comparison errors (missing/bad calldata, compile/RPC failure) now
  abort the run instead of being silently downgraded to a mismatch; a plain
  bytecode mismatch still returns False and is reported as a diff
- source/verification errors (e.g. unverified on explorer) stay non-fatal:
  logged, recorded, run continues
- remove the now-dead ExceptionHandler / fail_on_bytecode_comparison_error
  mechanism (raise_exception_or_log was no longer called anywhere) from code,
  types, README, skills, tests and fixtures
- errored-contract summary and log now include the config file path

Note: the fail_on_bytecode_comparison_error key remains in config_samples as a
harmless no-op (loader ignores unknown keys); cleaning those is left out of this
PR to avoid a large unrelated diff.
Reverts the resilience fix (ea789f0) and the bytecode-error-fatal refactor
(b756645). The fatal-on-bytecode-error behavior broke a valid case (eth_call
revert during deploy simulation, previously reported as an allowed diff —
hoodi_vaults_testnet regression). Error-handling will be reworked in a
separate PR. earnUSDe configs and the Ethereum meta_core calldata fix
(b93d6e1) are kept.
@tamtamchik tamtamchik merged commit ee8b45f into feat/mantle-meta-updates Jun 2, 2026
13 checks passed
@tamtamchik tamtamchik deleted the fix/earnusde-swapmodule-redeploy branch June 2, 2026 16:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants