Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
323 commits
Select commit Hold shift + click to select a range
0043c41
fix: max rebase apr check
0xpanicError May 1, 2026
567e8d3
fix: zero check
0xpanicError May 1, 2026
bc406db
Merge pull request #389 from etherfi-protocol/yash/feat/min-max-withd…
0xpanicError May 1, 2026
9a3519f
Merge remote-tracking branch 'origin/pankaj/feat/security-upgrades' i…
0xpanicError May 1, 2026
642f79d
Merge branch 'pankaj/feat/security-upgrades' into yash/feat/stale-ora…
0xpanicError May 1, 2026
c6b2bcd
fix: merge issue
0xpanicError May 1, 2026
2eb44a6
fix: check liquidity and add tests
0xpanicError May 1, 2026
e1677a4
fix: merge conflicts
0xpanicError May 1, 2026
616bece
Merge 'origin/pankaj/feat/security-upgrades' into yash/feat/liquifier…
0xpanicError May 1, 2026
999e82b
fix: negative price feed
0xpanicError May 1, 2026
284569a
Merge pull request #383 from etherfi-protocol/yash/feat/harcode-bound…
0xpanicError May 1, 2026
21e75e3
Merge 'origin/pankaj/feat/security-upgrades' into yash/feat/stale-ora…
0xpanicError May 1, 2026
061769f
refactor(ValidatorFlowsIntegrationTest): upgrade NodeOperatorManager …
pankajjagtapp May 1, 2026
f1251ac
test: fix fork test admin role
0xpanicError May 2, 2026
fc48346
Merge remote-tracking branch 'origin/pankaj/feat/security-upgrades' i…
0xpanicError May 2, 2026
6a2501e
Merge pull request #390 from etherfi-protocol/pankaj/deprecate-legacy…
pankajjagtapp May 2, 2026
611abd7
fix(scripts): pass ROLE_REGISTRY to Liquifier constructor in reaudit-…
pankajjagtapp May 2, 2026
9bf648c
feat: segregate ETH for finalized withdrawals at lock time
pankajjagtapp May 2, 2026
b947ecb
test: cover ETH-segregation flows and wire migration into post-upgrad…
pankajjagtapp May 2, 2026
ea4c678
docs: design spec and implementation plan for WithdrawRequestNFT ETH …
pankajjagtapp May 2, 2026
1575f71
Merge remote-tracking branch 'origin/pankaj/feat/security-upgrades' i…
0xpanicError May 2, 2026
638b756
fix: price feed deviation range
0xpanicError May 4, 2026
a3c5679
test: fix failing test
0xpanicError May 4, 2026
c96fff7
Merge pull request #391 from etherfi-protocol/yash/feat/liquifier-checks
0xpanicError May 4, 2026
bb35ff4
feat: add blacklist user
0xpanicError May 4, 2026
ae4060b
test: fix and add new units
0xpanicError May 4, 2026
4ab763b
fix: address cursor comments
0xpanicError May 4, 2026
f012969
test: e2e mainnet-fork lifecycle for NFT and priority queue withdrawa…
pankajjagtapp May 5, 2026
f6f5586
refactor: validate report before execute task
0xpanicError May 5, 2026
f95177b
test: add unit tests
0xpanicError May 5, 2026
cb4bc0b
Merge remote-tracking branch 'origin/pankaj/feat/security-upgrades' i…
pankajjagtapp May 5, 2026
23b4046
fix(escrow): redemption liquidity formula, TVL guard, migration order…
pankajjagtapp May 6, 2026
877afd1
test: update for stricter escrow guards and queue fee return
pankajjagtapp May 6, 2026
5215b44
fix(escrow): align segregated withdraw with min-amount check; reject …
pankajjagtapp May 6, 2026
36fb68b
revert: remove LP-as-requester guard in priority queue
pankajjagtapp May 6, 2026
7cbb9c7
chore: revert formatting-only diffs to reduce review noise
pankajjagtapp May 6, 2026
5a76623
refactor: simplify queueLocked calculation in LiquidityPool
pankajjagtapp May 6, 2026
3891fe2
fix(LP): reorder _checkMinAmountForShare after burn in segregated wit…
pankajjagtapp May 6, 2026
eb6566e
refactor(escrow): move ethAmountLockedForWithdrawal storage from LP t…
pankajjagtapp May 6, 2026
4003e99
fix: NFT fee ETH return on handleRemainder; EtherFiAdmin pre-flight n…
pankajjagtapp May 6, 2026
74394a9
test: fix failing tests
0xpanicError May 6, 2026
266b6ae
docs: remove claude plan md files
0xpanicError May 6, 2026
992c88e
refactor: amount cast to uint128
0xpanicError May 6, 2026
2b890c5
Merge pull request #392 from etherfi-protocol/pankaj/feat/withdraw-nf…
pankajjagtapp May 6, 2026
da1f74b
Merge 'origin/pankaj/feat/security-upgrades' into yash/feat/pausable-…
0xpanicError May 7, 2026
b28586a
Merge 'origin/pankaj/feat/security-upgrades' into yash/feat/blacklist…
0xpanicError May 7, 2026
9a6b0d3
fix: new liquidity check
0xpanicError May 7, 2026
3f8413a
Merge 'origin/pankaj/feat/security-upgrades' into yash/feat/check-exe…
0xpanicError May 7, 2026
6a09504
fix: liquidity pool balance
0xpanicError May 7, 2026
c828c65
typo: MAX_PRICE_DEVIATION_IN_BPS
0xpanicError May 7, 2026
e7d6190
docs: add comments to liquifier check
0xpanicError May 7, 2026
e647579
fix: add discount rate change in set token config
0xpanicError May 7, 2026
b55768b
chore: increase max pause duration to 7 days
0xpanicError May 7, 2026
81d8d87
ci: add op rpc and fix testing in ci/cd
0xpanicError May 7, 2026
1e11e8e
Merge pull request #396 from etherfi-protocol/yash/fix/syko-review
0xpanicError May 7, 2026
bf8f89c
feat: total value in lp sanity check
0xpanicError May 8, 2026
99ef88f
feat: sanity check to ensure ethAmountLockedForWithdrawal is never gr…
0xpanicError May 8, 2026
aab82d5
fix: revert stale price instead of skipping
0xpanicError May 8, 2026
8a6f60d
fix: exempt membershipNFT from min/max withdraw amount
0xpanicError May 8, 2026
4dea063
Merge remote-tracking branch 'origin/pankaj/feat/security-upgrades' i…
0xpanicError May 8, 2026
180a302
fix: move blacklist from role registry to blacklister
0xpanicError May 8, 2026
c145609
fix: validate invalidated id needs to account for locked liquidity
0xpanicError May 8, 2026
3541042
feat: make max withdraw amount configurable
0xpanicError May 8, 2026
cd5f352
feat: sanity balance check for priority queue manager
0xpanicError May 11, 2026
f1e743a
fix: revert instead of silent pass
0xpanicError May 11, 2026
e07c865
typo: isBlacklisted
0xpanicError May 11, 2026
d442527
Merge pull request #395 from etherfi-protocol/yash/feat/check-execute…
0xpanicError May 11, 2026
c5f1a29
test: fix test for new contract
0xpanicError May 11, 2026
50be285
Merge 'origin/pankaj/feat/security-upgrades' into yash/feat/stale-ora…
0xpanicError May 11, 2026
439678e
Merge pull request #386 from etherfi-protocol/yash/feat/stale-oracle-…
0xpanicError May 11, 2026
1b29389
feat: blacklist until
0xpanicError May 11, 2026
77995e7
Merge remote-tracking branch 'origin/pankaj/feat/security-upgrades' i…
0xpanicError May 11, 2026
8d1eee1
Merge remote-tracking branch 'origin/pankaj/feat/security-upgrades' i…
0xpanicError May 11, 2026
150d5f4
feat: add blacklist to WeETHWithdrawAdapter
0xpanicError May 11, 2026
7b40eb1
feat: blacklist users for eeth/weeth
0xpanicError May 11, 2026
853f575
feat: sanity check to validate finalized amount and finalized requests
0xpanicError May 11, 2026
304e168
fix: priority queue sanity check
0xpanicError May 11, 2026
c6f9446
refactor: rename extendBlacklistUntil
0xpanicError May 11, 2026
540a114
fix: blacklist edge cases
0xpanicError May 12, 2026
d3792f7
fix: no need to check blacklist against owner
0xpanicError May 12, 2026
4d3febc
Merge pull request #393 from etherfi-protocol/yash/feat/blacklist-users
0xpanicError May 12, 2026
f03c873
Merge 'origin/pankaj/feat/security-upgrades' into yash/feat/more-sani…
0xpanicError May 12, 2026
0b3ff82
feat: move invalidate out of oracle report
0xpanicError May 12, 2026
efd2666
feat: revoke blacklist and pause until role instantly
0xpanicError May 12, 2026
de5e564
feat: add SWEEPER_ROLE and auto-sweep on completeQueuedWithdrawals
pankajjagtapp May 12, 2026
a91d667
fix: withdraw full balance if less than min amount
0xpanicError May 12, 2026
5976353
Merge pull request #398 from etherfi-protocol/yash/feat/move-invalida…
0xpanicError May 12, 2026
129bc55
Merge remote-tracking branch 'origin/pankaj/feat/security-upgrades' i…
0xpanicError May 12, 2026
44d3129
refactor: drop SWEEPER_ROLE, gate sweepFunds on EIGENLAYER_ADMIN_ROLE
pankajjagtapp May 12, 2026
e1a9ccd
fix: min amount for withdrawal
0xpanicError May 12, 2026
562293b
test: small fix
0xpanicError May 12, 2026
8919921
remove unnecesary space changes
pankajjagtapp May 12, 2026
55cc4ee
test: fix role
0xpanicError May 12, 2026
4e14a22
fix: min withdraw balance
0xpanicError May 12, 2026
ed7a5e4
fix: emit manager-level FundsTransferred on completeQueuedWithdrawals…
pankajjagtapp May 12, 2026
a622b30
refactor: stricter invariant
0xpanicError May 12, 2026
e06135b
fix
0xpanicError May 12, 2026
5ae0894
refactor: mark all contracts deprecated and move to immutable
0xpanicError May 12, 2026
bd6ab6c
Merge pull request #397 from etherfi-protocol/yash/feat/more-sanity-c…
0xpanicError May 13, 2026
b7576cc
feat: add pausable until for min/burn eeth
0xpanicError May 13, 2026
d4c6126
feat: make pause until duration configurable
0xpanicError May 13, 2026
110ff6c
feat: revoke fast role from revoke admin
0xpanicError May 13, 2026
3fb38a4
feat: setup separate roles library to manage roles
0xpanicError May 13, 2026
97e5e5a
feat: add all roles to roles library
0xpanicError May 13, 2026
c459729
Merge pull request #402 from etherfi-protocol/yash/feat/configure-pau…
0xpanicError May 14, 2026
d0a2285
test: fix tests
0xpanicError May 14, 2026
898a246
Merge remote-tracking branch 'origin/pankaj/feat/security-upgrades' i…
0xpanicError May 14, 2026
6aa9d63
fix: add set pause until duration to eeth
0xpanicError May 14, 2026
6274ed3
Merge pull request #401 from etherfi-protocol/yash/feat/pause-until-m…
0xpanicError May 14, 2026
3ec0fec
Merge 'origin/pankaj/feat/security-upgrades' into yash/feat/instant-r…
0xpanicError May 14, 2026
50ad3ad
test: add unit tests
0xpanicError May 14, 2026
5272ded
fix: test setup and scripts
0xpanicError May 14, 2026
0882085
Merge 'origin/pankaj/feat/security-upgrades' into yash/refactor/depre…
0xpanicError May 14, 2026
cbd8aa6
review cleanup: privatize DEPRECATED_*, ordering, abstract PausableUn…
seongyun-ko May 15, 2026
79fac24
EtherFiAdmin: convert daily-cap ceilings to immutable; drop EtherFiOr…
seongyun-ko May 15, 2026
f7d4a67
fix: drop stale OracleReport field in val-consolidation scripts
seongyun-ko May 15, 2026
35b068e
feat: consolidate roles into thresholds
0xpanicError May 15, 2026
10fc117
refactor: move some onlyOwner to upgrade timelock
0xpanicError May 15, 2026
2ee8d57
refactor: consolidate roles into modifiers
0xpanicError May 15, 2026
88fde43
fix: role bug
0xpanicError May 15, 2026
05ed45c
fix: revoke role keys
0xpanicError May 15, 2026
332fec1
Merge pull request #409 from etherfi-protocol/syko/review/fix-base-br…
pankajjagtapp May 15, 2026
b6dda24
Merge pull request #407 from etherfi-protocol/syko/review/admin-confi…
pankajjagtapp May 15, 2026
9432c2d
fix: etherfi oracle role
0xpanicError May 15, 2026
75161a0
fix: liquidity pool role
0xpanicError May 15, 2026
02ab570
Merge 'origin/pankaj/feat/security-upgrades' into yash/refactor/depre…
0xpanicError May 15, 2026
dc94096
fix: mark all deprecated vars as private
0xpanicError May 15, 2026
3439e95
Merge pull request #406 from etherfi-protocol/syko/review/cleanup-pri…
0xpanicError May 16, 2026
32bf625
refactor: cleanup all deprecated code references
0xpanicError May 16, 2026
136adf8
Merge 'origin/pankaj/feat/security-upgrades' into yash/refactor/depre…
0xpanicError May 16, 2026
fbba241
refactor(EtherFiAdmin): split _validateReport into themed helpers
seongyun-ko May 15, 2026
a9c980a
test: fix failing test
0xpanicError May 18, 2026
28eb6b1
Merge pull request #403 from etherfi-protocol/syko/review/admin-valid…
0xpanicError May 18, 2026
ae50d55
tes: fix all tests
0xpanicError May 18, 2026
007ea2b
fix: pankaj comments
0xpanicError May 18, 2026
f965941
refactor: create eigen pod role
0xpanicError May 18, 2026
cb74796
feat: pause untl transfers
0xpanicError May 18, 2026
fd2fc2e
refactor: rename modifier onlyOperations
0xpanicError May 18, 2026
9661577
docs: revert eigen interface natspec
0xpanicError May 18, 2026
d48fbfa
Merge pull request #410 from etherfi-protocol/yash/feat/consolidate-r…
0xpanicError May 18, 2026
6eb0289
Merge 'origin/pankaj/feat/security-upgrades' into yash/feat/instant-r…
0xpanicError May 18, 2026
bd213ba
feat: freeze share rate at finalization
0xpanicError May 18, 2026
55ed102
refactor: use math lib for mul div ops
0xpanicError May 18, 2026
1116a7d
test: fix integration tests
0xpanicError May 18, 2026
fa598c0
docs: eigen interface natspec
0xpanicError May 18, 2026
1acfc01
fix: minor fixes and refactor
0xpanicError May 18, 2026
009a674
docs: clarification on extend blacklist
0xpanicError May 18, 2026
598d9dd
refactor: remove unused modifier
0xpanicError May 18, 2026
1b05c54
Merge pull request #400 from etherfi-protocol/pankaj/feat/sweeper-role
pankajjagtapp May 18, 2026
7c30e05
Merge pull request #412 from etherfi-protocol/yash/feat/pause-until-t…
0xpanicError May 18, 2026
9d15fe1
Merge remote-tracking branch 'origin/pankaj/feat/security-upgrades' i…
0xpanicError May 18, 2026
7d13078
test: fix test delta
0xpanicError May 18, 2026
0f23961
Merge 'origin/pankaj/feat/security-upgrades' into yash/feat/instant-r…
0xpanicError May 18, 2026
db7ac13
fix: merge conflicts
0xpanicError May 18, 2026
8dbd9ad
feat: min max acceptable rate
0xpanicError May 19, 2026
70e66b7
fix: comments
0xpanicError May 19, 2026
60b9233
test(LP): pin withdraw(amount, rate) OZ Math.mulDiv(Up) behavior
seongyun-ko May 19, 2026
d86fe4f
refactor(share-rate-freeze): collapse LP dual codepath; move legacy f…
seongyun-ko May 19, 2026
b8f9471
fix: add min max live rate on priority queue
0xpanicError May 19, 2026
50777e5
fix: min acceptable share rate
0xpanicError May 19, 2026
4a5f2b1
Merge pull request #415 from etherfi-protocol/syko/share-rate-freeze/…
0xpanicError May 19, 2026
fae2659
Merge pull request #414 from etherfi-protocol/syko/share-rate-freeze/…
0xpanicError May 19, 2026
7f81914
Merge pull request #411 from etherfi-protocol/yash/refactor/deprecate…
0xpanicError May 19, 2026
1b0cc15
Merge 'origin/pankaj/feat/security-upgrades' into yash/feat/share-rat…
0xpanicError May 19, 2026
8211412
fix: merge conflicts
0xpanicError May 19, 2026
a5a3aa9
Merge 'origin/pankaj/feat/security-upgrades' into yash/feat/instant-r…
0xpanicError May 19, 2026
93c3490
fix: extend min max acceptable share rate check
0xpanicError May 19, 2026
953fd3f
fix: addres syko review
0xpanicError May 19, 2026
80f9208
fix: upgrade timelock role
0xpanicError May 19, 2026
29fdc06
fix: pausable until
0xpanicError May 19, 2026
43d317b
ai: review context file
0xpanicError May 19, 2026
6513bf0
fix: role gating
0xpanicError May 20, 2026
720e42d
Merge pull request #399 from etherfi-protocol/yash/feat/instant-revok…
0xpanicError May 20, 2026
757a845
Merge 'origin/pankaj/feat/security-upgrades' into yash/feat/share-rat…
0xpanicError May 20, 2026
8cc218b
fix: remove frozen rate from priority queue
0xpanicError May 20, 2026
39af62f
docs: leftover comment
0xpanicError May 20, 2026
ad45336
Merge pull request #413 from etherfi-protocol/yash/feat/share-rate-fr…
0xpanicError May 20, 2026
6480eeb
refactor: use custom errors
0xpanicError May 20, 2026
858a2dd
refactor: max pause duration
0xpanicError May 20, 2026
b3be14f
fix: liquifier roles
0xpanicError May 20, 2026
9a5650c
Merge 'origin/pankaj/feat/security-upgrades' into yash/refactor/custo…
0xpanicError May 20, 2026
428e551
refactor: eoa role names
0xpanicError May 20, 2026
805de6d
refactor: make all immutables camelCase
0xpanicError May 20, 2026
a9fe098
feat: integrate EtherFi rate limiter into EETH and WeETH contracts
pankajjagtapp May 20, 2026
a93fdc4
feat: add quorum check for oracle
0xpanicError May 20, 2026
ec882c3
fix: truncation and panic error
0xpanicError May 20, 2026
9045532
refactor: optimize share minting and burning logic in EETH and WeETH …
pankajjagtapp May 20, 2026
d7f6c92
refcator: migrate remaining custom errors
0xpanicError May 20, 2026
66892f9
docs: remove ai review doc
0xpanicError May 20, 2026
999e0f9
fix: add nonreentrant and blacklist on missing deposit flows
0xpanicError May 20, 2026
266eda9
refactor: deprecate liquifier flag
0xpanicError May 20, 2026
6aa58aa
refactor: all contracts as interfaces
0xpanicError May 20, 2026
5233216
refactor: move reentrancy guard to utils
0xpanicError May 20, 2026
f0dd90a
refactor: remove unused import
0xpanicError May 20, 2026
9727976
Merge pull request #418 from etherfi-protocol/yash/feat/enforce-oracl…
0xpanicError May 20, 2026
63b4761
Merge 'origin/pankaj/feat/security-upgrades' into yash/refactor/custo…
0xpanicError May 20, 2026
f7c3887
revert: BNFT chnages
0xpanicError May 20, 2026
45ee2b9
refactor: remove deprecated code
0xpanicError May 20, 2026
e7ff1f9
fix: superguardian for token pause until
0xpanicError May 20, 2026
bdac379
Merge pull request #416 from etherfi-protocol/yash/refactor/custom-er…
pankajjagtapp May 21, 2026
d9bf6b8
Merge branch 'pankaj/feat/security-upgrades' into pankaj/feat/token-r…
pankajjagtapp May 21, 2026
df37f3c
refactor: integrate RateLimitMath for rate limiting in EETH and WeETH…
pankajjagtapp May 21, 2026
226b139
feat: add ReportUnpublished event and validation for deposit caps in …
pankajjagtapp May 21, 2026
97cfd1f
Merge pull request #417 from etherfi-protocol/pankaj/feat/token-rate-…
pankajjagtapp May 21, 2026
1bbc710
test: fix failing tests
0xpanicError May 21, 2026
6825f25
feat: min quorum size
0xpanicError May 21, 2026
83eca48
fix: H-01 remove unpublish report
0xpanicError May 21, 2026
c2c9641
fix: H-02 remove scan share remainder
0xpanicError May 21, 2026
64763b6
test: fix failing rate limit fuzz test
0xpanicError May 21, 2026
d4b7d22
fix: M-05 add cooldown to finalize when stale report
0xpanicError May 21, 2026
6d3b5d6
fix: M-06 check etherFanShares exist
0xpanicError May 21, 2026
699bf04
fix: M-07 add recieve on reward distributor
0xpanicError May 21, 2026
f283e56
M-08 address griefing concerns
0xpanicError May 21, 2026
b5b495b
fix: M-09 minor nit
0xpanicError May 21, 2026
a82e295
fix: L-01 handle negative rebase stranded ETH
0xpanicError May 21, 2026
d659839
fix: L-02 seize invalid request
0xpanicError May 21, 2026
325b470
fix: L-05 use total val in lp
0xpanicError May 21, 2026
f9dc047
fix: L-08 increase gas grief
0xpanicError May 21, 2026
a9ad60c
fix: L-11 remove todo docs
0xpanicError May 21, 2026
23b08e4
L-07 unused function
0xpanicError May 21, 2026
8224e7e
fix: magic numbers and unused errors
0xpanicError May 21, 2026
031ca13
fix: L-20 remove unused initializer
0xpanicError May 21, 2026
2d2f756
fix: L-16 use safe increase allowance
0xpanicError May 21, 2026
d01771f
fix: L-19 first nonreentrant
0xpanicError May 21, 2026
e6610aa
fix: L-21 use safe erc20
0xpanicError May 21, 2026
a7593ef
fix: L-25 custom error
0xpanicError May 21, 2026
f405772
fix: cursor comments
0xpanicError May 22, 2026
6a82a00
fix: refactor stranded logic for negative rebase
0xpanicError May 22, 2026
8d4b080
test: add tests for fixes
0xpanicError May 22, 2026
31e2c9a
fix: syko comments
0xpanicError May 22, 2026
888cb0e
fix: use math mul div
0xpanicError May 22, 2026
dde8e8e
fix: fee and unpublish report
0xpanicError May 22, 2026
286832d
fix: recover ETh behind onlyAdmin
0xpanicError May 22, 2026
b76b8bf
fix: make min max withdraw amount configurable
0xpanicError May 22, 2026
449fa98
fix: report unpublish rollback
0xpanicError May 22, 2026
d5bf42b
fix: cursor comment
0xpanicError May 22, 2026
cb807d5
fix: comments
0xpanicError May 22, 2026
904e713
feat: add dust sweeping functionality and improve error handling in D…
pankajjagtapp May 22, 2026
35b5d8b
Merge pull request #419 from etherfi-protocol/yash/fix/nethermind-audit
0xpanicError May 22, 2026
7b47720
Merge branch 'pankaj/feat/security-upgrades' into pankaj/feat/minor-i…
pankajjagtapp May 22, 2026
829853c
refactor: extract modifiers into lib
0xpanicError May 22, 2026
718846d
fix: minor fixes
0xpanicError May 22, 2026
3ce6d4c
fix: cursor comments
0xpanicError May 22, 2026
8fd8e94
refactor: remove protocol upgrader
0xpanicError May 22, 2026
3a6342f
test: fix failing tests and minro comments
0xpanicError May 22, 2026
1d2b0fd
Merge pull request #421 from etherfi-protocol/yash/fix/misc-changes
0xpanicError May 22, 2026
6c7a840
Merge 'origin/pankaj/feat/security-upgrades' into pankaj/feat/minor-i…
0xpanicError May 22, 2026
8257ef6
fix: minor fix
0xpanicError May 22, 2026
48d73d4
Merge pull request #422 from etherfi-protocol/pankaj/feat/minor-impro…
0xpanicError May 22, 2026
d1d11fa
fix: stale redemption max request mismatch
0xpanicError May 22, 2026
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
1 change: 1 addition & 0 deletions .github/workflows/run-forge-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ jobs:
run: forge test -vvv
env:
MAINNET_RPC_URL: ${{ secrets.MAINNET_RPC_URL }}
OP_RPC_URL: ${{ secrets.OP_RPC_URL }}
SCROLL_RPC_URL: ${{ secrets.SCROLL_RPC_URL }}
HISTORICAL_PROOF_812_WITHDRAWAL_RPC_URL: ${{ secrets.HISTORICAL_PROOF_812_WITHDRAWAL_RPC_URL }}
HISTORICAL_PROOF_RPC_URL: ${{ secrets.HISTORICAL_PROOF_RPC_URL }}
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ typechain-types
.vscode/
release/logs/txns/*

# Lock files
foundry.lock

# Hardhat files
cache
artifacts
Expand Down
3 changes: 1 addition & 2 deletions script/DeployHoodiContracts.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,7 @@ contract DeployHoodiContracts is Script {
liquidityPoolProxy,
etherFiNodesManagerProxy,
eigenPodManagerProxy,
delegationManagerProxy,
roleRegistryProxy
delegationManagerProxy
);
console.log("EtherFiNode deployed at:", address(newNode));

Expand Down
10 changes: 5 additions & 5 deletions script/V3PreludeTransactions.sol
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,11 @@ contract V3PreludeTransactions is Script {
//--------------------------------------------------------------------------------------
bytes32 ETHERFI_NODE_EIGENLAYER_ADMIN_ROLE = EtherFiNode(payable(etherFiNodeImpl)).ETHERFI_NODE_EIGENLAYER_ADMIN_ROLE();
bytes32 ETHERFI_NODE_CALL_FORWARDER_ROLE = EtherFiNode(payable(etherFiNodeImpl)).ETHERFI_NODE_CALL_FORWARDER_ROLE();
bytes32 STAKING_MANAGER_NODE_CREATOR_ROLE = StakingManager(payable(stakingManagerImpl)).STAKING_MANAGER_NODE_CREATOR_ROLE();
bytes32 ETHERFI_NODES_MANAGER_ADMIN_ROLE = EtherFiNodesManager(payable(etherFiNodesManagerImpl)).ETHERFI_NODES_MANAGER_ADMIN_ROLE();
bytes32 ETHERFI_NODES_MANAGER_CALL_FORWARDER_ROLE = EtherFiNodesManager(payable(etherFiNodesManagerImpl)).ETHERFI_NODES_MANAGER_CALL_FORWARDER_ROLE();
bytes32 ETHERFI_NODES_MANAGER_EIGENLAYER_ADMIN_ROLE = EtherFiNodesManager(payable(etherFiNodesManagerImpl)).ETHERFI_NODES_MANAGER_EIGENLAYER_ADMIN_ROLE();
bytes32 LIQUIDITY_POOL_VALIDATOR_APPROVER_ROLE = LiquidityPool(payable(liquidityPoolImpl)).LIQUIDITY_POOL_VALIDATOR_APPROVER_ROLE();
bytes32 STAKING_MANAGER_NODE_CREATOR_ROLE = StakingManager(payable(stakingManagerImpl)).EXECUTOR_OPERATIONS_ROLE();
bytes32 ETHERFI_NODES_MANAGER_ADMIN_ROLE = EtherFiNodesManager(payable(etherFiNodesManagerImpl)).OPERATION_TIMELOCK_ROLE();
bytes32 ETHERFI_NODES_MANAGER_CALL_FORWARDER_ROLE = EtherFiNodesManager(payable(etherFiNodesManagerImpl)).EIGENPOD_OPERATIONS_ROLE();
bytes32 ETHERFI_NODES_MANAGER_EIGENLAYER_ADMIN_ROLE = EtherFiNodesManager(payable(etherFiNodesManagerImpl)).HOUSEKEEPING_OPERATIONS_ROLE();
bytes32 LIQUIDITY_POOL_VALIDATOR_APPROVER_ROLE = LiquidityPool(payable(liquidityPoolImpl)).EXECUTOR_OPERATIONS_ROLE();

function run() public {

Expand Down
78 changes: 22 additions & 56 deletions script/VerifyV3Upgrade.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -123,18 +123,8 @@ contract VerifyV3Upgrade is Script {
"EtherFiNodesManager has correct RoleRegistry"
);

// Check a sample EtherFiNode implementation has correct RoleRegistry
console2.log("Checking EtherFiNode implementation RoleRegistry...");
address beacon = stakingManager.getEtherFiNodeBeacon();
address etherFiNodeImpl = getImplementation(beacon);
if (etherFiNodeImpl != address(0)) {
// Create a temporary instance to check the roleRegistry
EtherFiNode nodeImpl = EtherFiNode(payable(etherFiNodeImpl));
checkCondition(
address(nodeImpl.roleRegistry()) == address(roleRegistry),
"EtherFiNode implementation has correct RoleRegistry"
);
}
// EtherFiNode no longer holds a direct roleRegistry reference after the roles refactor;
// role checks now live on EtherFiNodesManager via the shared RolesLibrary.

// Check LiquidityPool has correct RoleRegistry
console2.log("Checking LiquidityPool RoleRegistry...");
Expand Down Expand Up @@ -192,7 +182,7 @@ contract VerifyV3Upgrade is Script {
protocolUpgrader != address(0),
"Protocol upgrader (RoleRegistry owner) is set"
);
try roleRegistry.onlyProtocolUpgrader(protocolUpgrader) {
try roleRegistry.onlyUpgradeTimelock(protocolUpgrader) {
checkCondition(true, "Protocol upgrader is owner");
} catch {
checkCondition(false, "Protocol upgrader is not owner");
Expand Down Expand Up @@ -274,62 +264,38 @@ contract VerifyV3Upgrade is Script {
}

function verifyRoleAssignments() internal {
// Define expected roles based on prelude.t.sol
// After role consolidation, all per-contract roles map to one of the 8 tier roles:
// UPGRADE_TIMELOCK_ROLE, OPERATION_TIMELOCK_ROLE, OPERATION_MULTISIG_ROLE,
// GUARDIAN_ROLE, ORACLE_OPERATIONS_ROLE..EIGENPOD_OPERATIONS_ROLE. Verify the consolidated constants exist.

// StakingManager roles
bytes32 STAKING_MANAGER_NODE_CREATOR_ROLE = keccak256(
"STAKING_MANAGER_NODE_CREATOR_ROLE"
);
console2.log("Checking StakingManager roles...");

// At least check that the role exists in the system
console2.log("Checking consolidated role constants...");
checkCondition(
STAKING_MANAGER_NODE_CREATOR_ROLE ==
stakingManager.STAKING_MANAGER_NODE_CREATOR_ROLE(),
"STAKING_MANAGER_NODE_CREATOR_ROLE constant matches"
keccak256("OPERATION_TIMELOCK_ROLE") == roleRegistry.OPERATION_TIMELOCK_ROLE(),
"OPERATION_TIMELOCK_ROLE constant matches"
);

// EtherFiNodesManager roles
bytes32 ETHERFI_NODES_MANAGER_ADMIN_ROLE = keccak256(
"ETHERFI_NODES_MANAGER_ADMIN_ROLE"
);
bytes32 ETHERFI_NODES_MANAGER_EIGENLAYER_ADMIN_ROLE = keccak256(
"ETHERFI_NODES_MANAGER_EIGENLAYER_ADMIN_ROLE"
);
bytes32 ETHERFI_NODES_MANAGER_CALL_FORWARDER_ROLE = keccak256(
"ETHERFI_NODES_MANAGER_CALL_FORWARDER_ROLE"
checkCondition(
keccak256("OPERATION_MULTISIG_ROLE") == roleRegistry.OPERATION_MULTISIG_ROLE(),
"OPERATION_MULTISIG_ROLE constant matches"
);

console2.log("Checking EtherFiNodesManager roles...");
checkCondition(
ETHERFI_NODES_MANAGER_ADMIN_ROLE ==
etherFiNodesManager.ETHERFI_NODES_MANAGER_ADMIN_ROLE(),
"ETHERFI_NODES_MANAGER_ADMIN_ROLE constant matches"
keccak256("GUARDIAN_ROLE") == roleRegistry.GUARDIAN_ROLE(),
"GUARDIAN_ROLE constant matches"
);
checkCondition(
ETHERFI_NODES_MANAGER_EIGENLAYER_ADMIN_ROLE ==
etherFiNodesManager
.ETHERFI_NODES_MANAGER_EIGENLAYER_ADMIN_ROLE(),
"ETHERFI_NODES_MANAGER_EIGENLAYER_ADMIN_ROLE constant matches"
keccak256("ORACLE_OPERATIONS_ROLE") == roleRegistry.ORACLE_OPERATIONS_ROLE(),
"ORACLE_OPERATIONS_ROLE constant matches"
);
checkCondition(
ETHERFI_NODES_MANAGER_CALL_FORWARDER_ROLE ==
etherFiNodesManager.ETHERFI_NODES_MANAGER_CALL_FORWARDER_ROLE(),
"ETHERFI_NODES_MANAGER_CALL_FORWARDER_ROLE constant matches"
keccak256("HOUSEKEEPING_OPERATIONS_ROLE") == roleRegistry.HOUSEKEEPING_OPERATIONS_ROLE(),
"HOUSEKEEPING_OPERATIONS_ROLE constant matches"
);

// Check protocol pauser/unpauser roles exist
bytes32 PROTOCOL_PAUSER = keccak256("PROTOCOL_PAUSER");
bytes32 PROTOCOL_UNPAUSER = keccak256("PROTOCOL_UNPAUSER");

console2.log("Checking protocol pause roles...");
checkCondition(
PROTOCOL_PAUSER == roleRegistry.PROTOCOL_PAUSER(),
"PROTOCOL_PAUSER constant matches"
keccak256("EXECUTOR_OPERATIONS_ROLE") == roleRegistry.EXECUTOR_OPERATIONS_ROLE(),
"EXECUTOR_OPERATIONS_ROLE constant matches"
);
checkCondition(
PROTOCOL_UNPAUSER == roleRegistry.PROTOCOL_UNPAUSER(),
"PROTOCOL_UNPAUSER constant matches"
keccak256("EIGENPOD_OPERATIONS_ROLE") == roleRegistry.EIGENPOD_OPERATIONS_ROLE(),
"EIGENPOD_OPERATIONS_ROLE constant matches"
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ contract DeployCumulativeMerkleRewardsDistributor is Script {
bytes memory initializerData = abi.encodeWithSelector(CumulativeMerkleRewardsDistributor.initialize.selector);
CumulativeMerkleRewardsDistributor cumulativeMerkleRewardsDistributorImplementation = new CumulativeMerkleRewardsDistributor(roleRegistryProxyAddress);
UUPSProxy cumulativeMerkleRewardsDistributorProxy = new UUPSProxy(address(cumulativeMerkleRewardsDistributorImplementation), initializerData);
CumulativeMerkleRewardsDistributor cumulativeMerkleInstance = CumulativeMerkleRewardsDistributor(address(cumulativeMerkleRewardsDistributorProxy));
CumulativeMerkleRewardsDistributor cumulativeMerkleInstance = CumulativeMerkleRewardsDistributor(payable(address(cumulativeMerkleRewardsDistributorProxy)));
//cumulativeMerkleInstance.grantRole(keccak256("CUMULATIVE_MERKLE_REWARDS_DISTRIBUTOR_ADMIN_ROLE"), msg.sender);
cumulativeMerkleInstance.transferOwnership(address(timelockAddress));

Expand Down
1 change: 1 addition & 0 deletions script/deploys/Deployed.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ contract Deployed {
// Utilities
address public constant EIGENLAYER_POD_MANAGER = 0x91E677b07F7AF907ec9a428aafA9fc14a0d3A338;
address public constant EIGENLAYER_DELEGATION_MANAGER = 0x39053D51B77DC0d36036Fc1fCc8Cb819df8Ef37A;
address public constant EIGENLAYER_STRATEGY_MANAGER = 0x858646372CC42E1A627fcE94aa7A7033e7CF075A;
address public constant EIGENLAYER_REWARDS_COORDINATOR = 0x7750d328b314EfFa365A0402CcfD489B80B0adda;
address public constant LIDO_WITHDRAWAL_QUEUE = 0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1;

Expand Down
52 changes: 24 additions & 28 deletions script/el-exits/ELExitsTransactions.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -71,20 +71,16 @@ contract ElExitsTransactions is Script {
//--------------------------------------------------------------------------------------

bytes32 ETHERFI_NODES_MANAGER_EL_TRIGGER_EXIT_ROLE =
EtherFiNodesManager(payable(etherFiNodesManagerImpl))
.ETHERFI_NODES_MANAGER_EL_TRIGGER_EXIT_ROLE();
RoleRegistry(roleRegistry).EXECUTOR_OPERATIONS_ROLE();

bytes32 ETHERFI_NODES_MANAGER_POD_PROVER_ROLE =
EtherFiNodesManager(payable(etherFiNodesManagerImpl))
.ETHERFI_NODES_MANAGER_POD_PROVER_ROLE();
RoleRegistry(roleRegistry).EIGENPOD_OPERATIONS_ROLE();

bytes32 STAKING_MANAGER_ADMIN_ROLE =
StakingManager(payable(stakingManagerImpl))
.STAKING_MANAGER_ADMIN_ROLE();
RoleRegistry(roleRegistry).OPERATION_MULTISIG_ROLE();

bytes32 ETHERFI_RATE_LIMITER_ADMIN_ROLE =
EtherFiRateLimiter(payable(etherFiRateLimiterImpl))
.ETHERFI_RATE_LIMITER_ADMIN_ROLE();
RoleRegistry(roleRegistry).OPERATION_MULTISIG_ROLE();

//--------------------------------------------------------------------------------------
//------------------------------- SELECTORS ---------------------------------------
Expand All @@ -95,8 +91,8 @@ contract ElExitsTransactions is Script {
// cast sig "updateAllowedForwardedEigenpodCalls(bytes4,bool)"
bytes4 UPDATE_ALLOWED_FORWARDED_EIGENPOD_CALLS_SELECTOR = 0x4cba6c74;

uint256 MIN_DELAY_OPERATING_TIMELOCK = 28800; // 8 hours
uint256 MIN_DELAY_TIMELOCK = 259200; // 72 hours
uint256 minDelay_OPERATING_TIMELOCK = 28800; // 8 hours
uint256 minDelay_TIMELOCK = 259200; // 72 hours

// External calls selectors
bytes4 UPDATE_ALLOWED_FORWARDED_EXTERNAL_CALLS_SELECTOR_ONE = 0x9a15bf92; // claim(uint256,bytes32[],bytes)
Expand Down Expand Up @@ -325,7 +321,7 @@ contract ElExitsTransactions is Script {
data,
bytes32(0), // predecessor
timelockSalt,
MIN_DELAY_TIMELOCK // minDelay
minDelay_TIMELOCK // minDelay
);
console2.log("====== Schedule Execute El Exit Transactions Tx:");
console2.logBytes(scheduleCalldata);
Expand All @@ -348,10 +344,10 @@ contract ElExitsTransactions is Script {
// uncomment to run against fork
// console2.log("=== SCHEDULING BATCH ===");
// console2.log("Current timestamp:", block.timestamp);
// etherFiTimelock.scheduleBatch(targets, values, data, bytes32(0), timelockSalt, MIN_DELAY_TIMELOCK);
// etherFiTimelock.scheduleBatch(targets, values, data, bytes32(0), timelockSalt, minDelay_TIMELOCK);

// console2.log("=== FAST FORWARDING TIME ===");
// vm.warp(block.timestamp + MIN_DELAY_TIMELOCK + 1); // +1 to ensure it's past the delay
// vm.warp(block.timestamp + minDelay_TIMELOCK + 1); // +1 to ensure it's past the delay
// console2.log("New timestamp:", block.timestamp);
// etherFiTimelock.executeBatch(targets, values, data, bytes32(0), timelockSalt);
}
Expand Down Expand Up @@ -496,7 +492,7 @@ contract ElExitsTransactions is Script {
data,
bytes32(0), // predecessor
timelockSalt,
MIN_DELAY_OPERATING_TIMELOCK // minDelay
minDelay_OPERATING_TIMELOCK // minDelay
);
console2.log("====== Schedule Clean Up Old Whitelist Mappings In EtherFiNodesManager Tx:");
console2.logBytes(scheduleCalldata);
Expand All @@ -518,10 +514,10 @@ contract ElExitsTransactions is Script {
// uncomment to run against fork
// console2.log("=== SCHEDULING BATCH ===");
// console2.log("Current timestamp:", block.timestamp);
// etherFiOperatingTimelock.scheduleBatch(targets, values, data, bytes32(0), timelockSalt, MIN_DELAY_OPERATING_TIMELOCK);
// etherFiOperatingTimelock.scheduleBatch(targets, values, data, bytes32(0), timelockSalt, minDelay_OPERATING_TIMELOCK);

// console2.log("=== FAST FORWARDING TIME ===");
// vm.warp(block.timestamp + MIN_DELAY_OPERATING_TIMELOCK + 1); // +1 to ensure it's past the delay
// vm.warp(block.timestamp + minDelay_OPERATING_TIMELOCK + 1); // +1 to ensure it's past the delay
// console2.log("New timestamp:", block.timestamp);
// etherFiOperatingTimelock.executeBatch(targets, values, data, bytes32(0), timelockSalt);
}
Expand Down Expand Up @@ -577,7 +573,7 @@ contract ElExitsTransactions is Script {
data,
bytes32(0), // predecessor
timelockSalt,
MIN_DELAY_OPERATING_TIMELOCK // minDelay
minDelay_OPERATING_TIMELOCK // minDelay
);
console2.log("====== Schedule New Mappings In EtherFiNodesManager Tx:");
console2.logBytes(scheduleCalldata);
Expand All @@ -600,10 +596,10 @@ contract ElExitsTransactions is Script {
// uncomment to run against fork
// console2.log("=== SCHEDULING BATCH ===");
// console2.log("Current timestamp:", block.timestamp);
// etherFiOperatingTimelock.scheduleBatch(targets, values, data, bytes32(0), timelockSalt, MIN_DELAY_OPERATING_TIMELOCK);
// etherFiOperatingTimelock.scheduleBatch(targets, values, data, bytes32(0), timelockSalt, minDelay_OPERATING_TIMELOCK);

// // console2.log("=== FAST FORWARDING TIME ===");
// vm.warp(block.timestamp + MIN_DELAY_OPERATING_TIMELOCK + 1); // +1 to ensure it's past the delay
// vm.warp(block.timestamp + minDelay_OPERATING_TIMELOCK + 1); // +1 to ensure it's past the delay
// console2.log("New timestamp:", block.timestamp);
// etherFiOperatingTimelock.executeBatch(targets, values, data, bytes32(0), timelockSalt);
}
Expand Down Expand Up @@ -739,7 +735,7 @@ contract ElExitsTransactions is Script {
data,
bytes32(0), // predecessor
timelockSalt,
MIN_DELAY_OPERATING_TIMELOCK // minDelay
minDelay_OPERATING_TIMELOCK // minDelay
);
console2.log("====== Schedule Rollback New Mappings In EtherFiNodesManager Tx:");
console2.logBytes(scheduleCalldata);
Expand All @@ -762,10 +758,10 @@ contract ElExitsTransactions is Script {
// uncomment to run against fork
// console2.log("=== SCHEDULING BATCH ===");
// console2.log("Current timestamp:", block.timestamp);
// etherFiOperatingTimelock.scheduleBatch(targets, values, data, bytes32(0), timelockSalt, MIN_DELAY_OPERATING_TIMELOCK);
// etherFiOperatingTimelock.scheduleBatch(targets, values, data, bytes32(0), timelockSalt, minDelay_OPERATING_TIMELOCK);

// console2.log("=== FAST FORWARDING TIME ===");
// vm.warp(block.timestamp + MIN_DELAY_OPERATING_TIMELOCK + 1); // +1 to ensure it's past the delay
// vm.warp(block.timestamp + minDelay_OPERATING_TIMELOCK + 1); // +1 to ensure it's past the delay
// console2.log("New timestamp:", block.timestamp);
// etherFiOperatingTimelock.executeBatch(targets, values, data, bytes32(0), timelockSalt);
}
Expand Down Expand Up @@ -816,7 +812,7 @@ contract ElExitsTransactions is Script {
data,
bytes32(0), // predecessor
timelockSalt,
MIN_DELAY_TIMELOCK // minDelay
minDelay_TIMELOCK // minDelay
);
console2.log("====== Rollback Schedule Tx:");
console2.logBytes(scheduleCalldata);
Expand All @@ -840,10 +836,10 @@ contract ElExitsTransactions is Script {
// uncomment to run against fork
// console2.log("=== SCHEDULING BATCH ===");
// console2.log("Current timestamp:", block.timestamp);
// etherFiTimelock.scheduleBatch(targets, values, data, bytes32(0), timelockSalt, MIN_DELAY_TIMELOCK);
// etherFiTimelock.scheduleBatch(targets, values, data, bytes32(0), timelockSalt, minDelay_TIMELOCK);

// console2.log("=== FAST FORWARDING TIME ===");
// vm.warp(block.timestamp + MIN_DELAY_TIMELOCK + 1); // +1 to ensure it's past the delay
// vm.warp(block.timestamp + minDelay_TIMELOCK + 1); // +1 to ensure it's past the delay
// console2.log("New timestamp:", block.timestamp);
// etherFiTimelock.executeBatch(targets, values, data, bytes32(0), timelockSalt);
}
Expand Down Expand Up @@ -988,7 +984,7 @@ contract ElExitsTransactions is Script {
data,
bytes32(0), // predecessor
timelockSalt,
MIN_DELAY_OPERATING_TIMELOCK // minDelay
minDelay_OPERATING_TIMELOCK // minDelay
);
console2.log("====== Schedule Rollback Cleaned Up Old Whitelist Mappings In EtherFiNodesManager Tx:");
console2.logBytes(scheduleCalldata);
Expand All @@ -1012,10 +1008,10 @@ contract ElExitsTransactions is Script {
// uncomment to run against fork
// console2.log("=== SCHEDULING BATCH ===");
// console2.log("Current timestamp:", block.timestamp);
// etherFiOperatingTimelock.scheduleBatch(targets, values, data, bytes32(0), timelockSalt, MIN_DELAY_OPERATING_TIMELOCK);
// etherFiOperatingTimelock.scheduleBatch(targets, values, data, bytes32(0), timelockSalt, minDelay_OPERATING_TIMELOCK);

// console2.log("=== FAST FORWARDING TIME ===");
// vm.warp(block.timestamp + MIN_DELAY_OPERATING_TIMELOCK + 1); // +1 to ensure it's past the delay
// vm.warp(block.timestamp + minDelay_OPERATING_TIMELOCK + 1); // +1 to ensure it's past the delay
// console2.log("New timestamp:", block.timestamp);
// etherFiOperatingTimelock.executeBatch(targets, values, data, bytes32(0), timelockSalt);
}
Expand Down
Loading
Loading