diff --git a/.github/workflows/mainnet-contracts.yml b/.github/workflows/mainnet-contracts.yml
index ddae9b63..8701c2bd 100644
--- a/.github/workflows/mainnet-contracts.yml
+++ b/.github/workflows/mainnet-contracts.yml
@@ -11,33 +11,33 @@ on:
jobs:
codespell:
- name: Check for spelling errors
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Codespell
- uses: codespell-project/actions-codespell@v2.0
- with:
- path: mainnet-contracts
- check_hidden: true
- check_filenames: true
- skip: "pnpm-lock.yaml"
+ name: Check for spelling errors
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Codespell
+ uses: codespell-project/actions-codespell@v2.0
+ with:
+ path: mainnet-contracts
+ check_hidden: true
+ check_filenames: true
+ skip: "pnpm-lock.yaml"
tests:
runs-on: ubuntu-latest
steps:
- name: Cancel previous runs
uses: styfle/cancel-workflow-action@0.12.1
-
+
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
- cache: 'yarn'
+ cache: "yarn"
cache-dependency-path: yarn.lock
node-version: 20
@@ -69,7 +69,7 @@ jobs:
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: "forge fmt"
- file_pattern: '*.sol'
+ file_pattern: "*.sol"
- name: List selectors
working-directory: mainnet-contracts
@@ -81,11 +81,11 @@ jobs:
steps:
- name: Cancel previous runs
uses: styfle/cancel-workflow-action@0.12.1
-
+
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
- cache: 'yarn'
+ cache: "yarn"
cache-dependency-path: yarn.lock
node-version: 20
@@ -106,6 +106,7 @@ jobs:
env:
ETH_RPC_URL: ${{ secrets.ETH_RPC_URL }}
HOLESKY_RPC_URL: ${{ secrets.HOLESKY_RPC_URL }}
+ HOODI_RPC_URL: ${{ secrets.HOODI_RPC_URL }}
- name: "Upload coverage report to Codecov"
uses: "codecov/codecov-action@v4"
diff --git a/l2-contracts/foundry.toml b/l2-contracts/foundry.toml
index 404dea24..ae2d846f 100644
--- a/l2-contracts/foundry.toml
+++ b/l2-contracts/foundry.toml
@@ -30,6 +30,7 @@ bracket_spacing = true
[rpc_endpoints]
mainnet="${ETH_RPC_URL}"
holesky="${HOLESKY_RPC_URL}"
+hoodi="${HOODI_RPC_URL}"
[invariant]
fail_on_revert=false
diff --git a/mainnet-contracts/README.md b/mainnet-contracts/README.md
index c5f055e8..876d098f 100644
--- a/mainnet-contracts/README.md
+++ b/mainnet-contracts/README.md
@@ -1,6 +1,7 @@
#
Puffer Vault
+
[![Website][Website-badge]][Website] [![Docs][docs-badge]][docs]
- [![Discord][discord-badge]][discord] [![X][X-badge]][X] [![Foundry][foundry-badge]][foundry]
+[![Discord][discord-badge]][discord] [![X][X-badge]][X] [![Foundry][foundry-badge]][foundry]
[Website-badge]: https://img.shields.io/badge/WEBSITE-8A2BE2
[Website]: https://www.puffer.fi
@@ -15,8 +16,8 @@
[foundry]: https://getfoundry.sh
[foundry-badge]: https://img.shields.io/badge/Built%20with-Foundry-FFDB1C.svg
+## Overview
-## Overview
Stakers can deposit ETH and mint the [pufETH nLRT](https://docs.puffer.fi/protocol/nlrt#pufeth) via the PufferVault contract, which serves as a redeemable receipt for their restaked ETH. If sufficient exit liquidity is available, stakers can reclaim their ETH from the PufferVault. Over time, the redeemable amount is expected to increase from [validator tickets](https://docs.puffer.fi/protocol/validator-tickets) and restaking rewards.
In [contrast with conventional liquid staking tokens (LSTs)](https://docs.puffer.fi/protocol/nlrt#what-is-an-lst), pufETH can provide strictly more rewards for its holders. Not only does pufETH encompass PoS rewards and restaking rewards, but its value can accelerate quickly due to validator ticket sales. Furthermore, the PoS rewards for stakers are decoupled from the protocol validators' performance.
@@ -27,17 +28,18 @@ pufETH is implemented as a reward-bearing ERC20 token, following [ERC4626](https
Read more about pufETH and native Liquid Restaking Tokens (nLRTs) in the [Puffer Docs](https://docs.puffer.fi/protocol/nlrt#pufeth) website.
-
## How pufETH Works
+
Stakers deposit ETH to the PufferVault contract to mint the pufETH nLRT. At the protocol's inception, pufETH's conversion rate is one-to-one, but is expected to increase over time. Assuming the protocol performs well, i.e., accrues more rewards than penalties, the amount of ETH reedamable for pufETH will increase.
### Calculating the Conversion Rate
+
The conversion rate can be calculated simply as:
```
conversion rate = (deposits + rewards - penalties) / pufETH supply
```
-
+
Where:
- deposits and pufETH supply increase proportionally as stakers deposit ETH to mint pufETH, leaving the conversion rate unaffected.
@@ -46,18 +48,17 @@ Where:
- penalties accrue if validators are slashed on PoS for more than their 1 ETH collateral, which is [disincentivized behavior](https://docs.puffer.fi/protocol/validator-tickets#why--noop-incentives) and mitigated through [anti-slashing technology](https://docs.puffer.fi/technology/secure-signer). Penalties can also accrue if the restaking operator is slashed running AVSs, which is why Puffer is [restricting restaking operator participation](https://docs.puffer.fi/protocol/puffer-modules#restricting-reops) during its nascent stages.
-
-
## Contract addresses
+
- PufferVault (pufETH token): `0xD9A442856C234a39a81a089C06451EBAa4306a72`
- PufferDepositor: `0x4aA799C5dfc01ee7d790e3bf1a7C2257CE1DcefF`
- AccessManager: `0x8c1686069474410E6243425f4a10177a94EBEE11`
- Timelock: `0x3C28B7c7Ba1A1f55c9Ce66b263B33B204f2126eA`
-For more detailed information on the contract deployments (Mainnet, Holesky, etc) and the ABIs, please check the [Deployments and ACL](https://github.com/PufferFinance/Deployments-and-ACL/blob/main/docs/deployments/) repository.
-
+For more detailed information on the contract deployments (Mainnet, Holesky, Hoodi, etc) and the ABIs, please check the [Deployments and ACL](https://github.com/PufferFinance/Deployments-and-ACL/blob/main/docs/deployments/) repository.
## Audits
+
- BlockSec: [v1](./audits/BlockSec-pufETH-v1.pdf), [v2](https://github.com/PufferFinance/PufferPool/blob/polish-docs/docs/audits/Blocksec_audit_April2024.pdf)
- SlowMist: [v1](./audits/SlowMist-pufETH-v1.pdf), v2
- Quantstamp: [v1](./audits/Quantstamp-pufETH-v1.pdf)
@@ -66,21 +67,23 @@ For more detailed information on the contract deployments (Mainnet, Holesky, etc
- Nethermind: [v2](https://github.com/NethermindEth/PublicAuditReports/blob/main/NM0202-FINAL_PUFFER.pdf)
- Creed: [v2](https://github.com/PufferFinance/PufferPool/blob/polish-docs/docs/audits/Creed_Puffer_Finance_Audit_April2024.pdf)
-
# Tests
Make sure you have access to a valid archive node RPC for ETH Mainnet (e.g. Infura)
Installing dependencies and running tests can be executed running:
+
```
ETH_RPC_URL=https://mainnet.infura.io/v3/YOUR_KEY forge test -vvvv
```
# Echidna
+
To install Echidna, see the instructions [here](https://github.com/crytic/echidna). To use Echidna, run the following command from the project's root:
+
```bash
forge install crytic/properties --no-commit
echidna . --contract EchidnaPufferVaultV2 --config src/echidna/config.yaml
```
-For more information see the properties [README](https://github.com/crytic/properties/tree/main).
+For more information see the properties [README](https://github.com/crytic/properties/tree/main).
diff --git a/mainnet-contracts/foundry.toml b/mainnet-contracts/foundry.toml
index 5718a887..74317cb3 100644
--- a/mainnet-contracts/foundry.toml
+++ b/mainnet-contracts/foundry.toml
@@ -44,6 +44,7 @@ bracket_spacing = true
[rpc_endpoints]
mainnet="${ETH_RPC_URL}"
holesky="${HOLESKY_RPC_URL}"
+hoodi="${HOODI_RPC_URL}"
sepolia="${SEPOLIA_RPC_URL}"
opsepolia ="${OP_SEPOLIA_RPC_URL}"
diff --git a/mainnet-contracts/script/BaseScript.s.sol b/mainnet-contracts/script/BaseScript.s.sol
index 374d85ed..b708db0b 100644
--- a/mainnet-contracts/script/BaseScript.s.sol
+++ b/mainnet-contracts/script/BaseScript.s.sol
@@ -44,6 +44,10 @@ abstract contract BaseScript is Script {
return (block.chainid == 17000);
}
+ function isHoodi() internal view returns (bool) {
+ return (block.chainid == 560048);
+ }
+
function isAnvil() internal view returns (bool) {
return (block.chainid == 31337);
}
diff --git a/mainnet-contracts/script/DeployEverything.s.sol b/mainnet-contracts/script/DeployEverything.s.sol
index a2e86236..8b5edee1 100644
--- a/mainnet-contracts/script/DeployEverything.s.sol
+++ b/mainnet-contracts/script/DeployEverything.s.sol
@@ -22,7 +22,7 @@ import { MockAeraVault } from "test/mocks/MockAeraVault.sol";
* @author Puffer Finance
* @notice Deploys pufETH (upgrade it in test environment), Guardians, Oracle, Puffer, and sets up the access control
* @dev Example on how to run the script
- * forge script script/DeployEverything.s.sol:DeployEverything --rpc-url=$RPC_URL --sig 'run(address[] calldata, uint256)' "[$DEV_WALLET]" 1 --broadcast
+ * forge script script/DeployEverything.s.sol:DeployEverything --rpc-url=$RPC_URL --sig 'run(address[] calldata, uint256, address)' "[$DEV_WALLET]" 1 $DEV_WALLET --broadcast
*/
contract DeployEverything is BaseScript {
address DAO;
diff --git a/mainnet-contracts/script/DeployPufETH.s.sol b/mainnet-contracts/script/DeployPufETH.s.sol
index 6309d523..c0d7dd12 100644
--- a/mainnet-contracts/script/DeployPufETH.s.sol
+++ b/mainnet-contracts/script/DeployPufETH.s.sol
@@ -253,6 +253,12 @@ contract DeployPufETH is BaseScript {
lidoWithdrawalQueue = ILidoWithdrawalQueue(0xc7cc160b58F8Bb0baC94b80847E2CF2800565C50);
stETHStrategy = IStrategy(0x7D704507b76571a51d9caE8AdDAbBFd0ba0e63d3);
eigenStrategyManager = IEigenLayer(0xdfB5f6CE42aAA7830E94ECFCcAd411beF4d4D5b6);
+ } else if (isHoodi()) {
+ stETH = IStETH(address(0x3508A952176b3c15387C97BE809eaffB1982176a));
+ weth = new WETH9();
+ lidoWithdrawalQueue = ILidoWithdrawalQueue(0xfe56573178f1bcdf53F01A6E9977670dcBBD9186);
+ stETHStrategy = IStrategy(0xF8a1a66130D614c7360e868576D5E59203475FE0);
+ eigenStrategyManager = IEigenLayer(0xeE45e76ddbEDdA2918b8C7E3035cd37Eab3b5D41);
} else {
stETH = IStETH(address(new stETHMock()));
weth = new WETH9();
diff --git a/mainnet-contracts/script/DeployPuffer.s.sol b/mainnet-contracts/script/DeployPuffer.s.sol
index ea294c78..27b7cf69 100644
--- a/mainnet-contracts/script/DeployPuffer.s.sol
+++ b/mainnet-contracts/script/DeployPuffer.s.sol
@@ -91,7 +91,7 @@ contract DeployPuffer is BaseScript {
eigenSlasher = address(new EigenAllocationManagerMock());
treasury = address(1);
operationsMultisig = address(2);
- } else {
+ } else if (isHolesky()) {
// Holesky https://github.com/Layr-Labs/eigenlayer-contracts?tab=readme-ov-file#current-testnet-deployment
eigenPodManager = 0x30770d7E3e71112d7A6b7259542D1f680a70e315;
delegationManager = 0xA44151489861Fe9e3055d95adC98FbD462B948e7;
@@ -99,6 +99,16 @@ contract DeployPuffer is BaseScript {
treasury = 0x61A44645326846F9b5d9c6f91AD27C3aD28EA390;
rewardsCoordinator = 0xAcc1fb458a1317E886dB376Fc8141540537E68fE;
operationsMultisig = 0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0;
+ } else if (isHoodi()) {
+ // Hoodi https://github.com/Layr-Labs/eigenlayer-contracts?tab=readme-ov-file#current-deployment-contracts
+ eigenPodManager = 0xcd1442415Fc5C29Aa848A49d2e232720BE07976c;
+ delegationManager = 0x867837a9722C512e0862d8c2E15b8bE220E8b87d;
+ eigenSlasher = 0xcAe751b75833ef09627549868A04E32679386e7C; // @todo Confirm EigenSlasher address
+ treasury = 0x61A44645326846F9b5d9c6f91AD27C3aD28EA390;
+ rewardsCoordinator = 0x29e8572678e0c272350aa0b4B8f304E47EBcd5e7;
+ operationsMultisig = 0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0;
+ } else {
+ revert("Deployment not configured for this chain");
}
operationsCoordinator = new OperationsCoordinator(PufferOracleV2(oracle), address(accessManager), 500); // 500 BPS = 5%
@@ -230,10 +240,15 @@ contract DeployPuffer is BaseScript {
}
// Holesky
- if (block.chainid == 17000) {
+ if (isHolesky()) {
return 0x4242424242424242424242424242424242424242;
}
+ // Hoodi
+ if (isHoodi()) {
+ return 0x00000000219ab540356cBB839Cbe05303d7705Fa;
+ }
+
// Tests / local chain
if (isAnvil()) {
return address(new BeaconMock());
diff --git a/mainnet-contracts/script/DeployRestakingOperator.s.sol b/mainnet-contracts/script/DeployRestakingOperator.s.sol
index e0241320..87b84d99 100644
--- a/mainnet-contracts/script/DeployRestakingOperator.s.sol
+++ b/mainnet-contracts/script/DeployRestakingOperator.s.sol
@@ -24,7 +24,7 @@ contract DeployRestakingOperator is DeployerHelper {
RestakingOperator restakingOperatorImplementation = new RestakingOperator({
delegationManager: IDelegationManager(_getEigenDelegationManager()),
- allocationManager: IAllocationManager(_getEigenSlasher()),
+ allocationManager: IAllocationManager(_getAllocationManager()),
moduleManager: PufferModuleManager(payable(_getPufferModuleManager())),
rewardsCoordinator: IRewardsCoordinator(_getRewardsCoordinator()),
restakingOperatorController: _getRestakingOperatorController()
@@ -49,7 +49,7 @@ contract DeployRestakingOperator is DeployerHelper {
RestakingOperator restakingOperatorImplementation = new RestakingOperator({
delegationManager: IDelegationManager(_getEigenDelegationManager()),
- allocationManager: IAllocationManager(_getEigenSlasher()),
+ allocationManager: IAllocationManager(_getAllocationManager()),
moduleManager: PufferModuleManager(payable(_getPufferModuleManager())),
rewardsCoordinator: IRewardsCoordinator(_getRewardsCoordinator()),
restakingOperatorController: _getRestakingOperatorController()
@@ -69,7 +69,7 @@ contract DeployRestakingOperator is DeployerHelper {
RestakingOperator restakingOperatorImplementation = new RestakingOperator({
delegationManager: IDelegationManager(_getEigenDelegationManager()),
- allocationManager: IAllocationManager(_getEigenSlasher()),
+ allocationManager: IAllocationManager(_getAllocationManager()),
moduleManager: PufferModuleManager(payable(_getPufferModuleManager())),
rewardsCoordinator: IRewardsCoordinator(_getRewardsCoordinator()),
restakingOperatorController: restakingOperatorController
diff --git a/mainnet-contracts/script/DeployerHelper.s.sol b/mainnet-contracts/script/DeployerHelper.s.sol
index ed39e42a..dc818d02 100644
--- a/mainnet-contracts/script/DeployerHelper.s.sol
+++ b/mainnet-contracts/script/DeployerHelper.s.sol
@@ -14,6 +14,7 @@ abstract contract DeployerHelper is Script {
// Chain IDs
uint256 public mainnet = 1;
uint256 public holesky = 17000;
+ uint256 public hoodi = 560048;
uint256 public binance = 56;
uint256 public base = 8453;
uint256 public sepolia = 11155111;
@@ -31,8 +32,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0xb7d83623906AC3fa577F45B7D2b9D4BD26BC5d76
return 0xb7d83623906AC3fa577F45B7D2b9D4BD26BC5d76;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0
return 0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0
+ return 0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0;
} else if (block.chainid == ape) {
// https://apescan.io/address/0xb7d83623906AC3fa577F45B7D2b9D4BD26BC5d76
return 0xb7d83623906AC3fa577F45B7D2b9D4BD26BC5d76;
@@ -77,6 +82,7 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x282A69142bac47855C3fbE1693FcC4bA3B4d5Ed6
return 0x282A69142bac47855C3fbE1693FcC4bA3B4d5Ed6;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0x82a44a6489936FFF841eecAF650Aa4D9708E4312
return 0x82a44a6489936FFF841eecAF650Aa4D9708E4312;
}
@@ -98,6 +104,7 @@ abstract contract DeployerHelper is Script {
console.log("Deployed", contractName, "at", implementation);
if (block.chainid == holesky) {
+ // @DEPRECATED
AccessManager(_getAccessManager()).execute(
proxyTarget, abi.encodeCall(UUPSUpgradeable.upgradeToAndCall, (address(implementation), data))
);
@@ -123,23 +130,31 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x946Ae7b21de3B0793Bb469e263517481B74A6950
return 0x946Ae7b21de3B0793Bb469e263517481B74A6950;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0x61A44645326846F9b5d9c6f91AD27C3aD28EA390
return 0x61A44645326846F9b5d9c6f91AD27C3aD28EA390;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x61A44645326846F9b5d9c6f91AD27C3aD28EA390
+ return 0x61A44645326846F9b5d9c6f91AD27C3aD28EA390;
}
revert("Treasury not available for this chain");
}
- function _getEigenSlasher() internal view returns (address) {
+ function _getAllocationManager() internal view returns (address) {
if (block.chainid == mainnet) {
- // https://etherscan.io/address/0xD92145c07f8Ed1D392c1B88017934E301CC1c3Cd
- return 0xD92145c07f8Ed1D392c1B88017934E301CC1c3Cd;
+ // https://etherscan.io/address/0x948a420b8CC1d6BFd0B6087C2E7c344a2CD0bc39
+ return 0x948a420b8CC1d6BFd0B6087C2E7c344a2CD0bc39;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0xcAe751b75833ef09627549868A04E32679386e7C
return 0xcAe751b75833ef09627549868A04E32679386e7C;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x95a7431400F362F3647a69535C5666cA0133CAA0
+ return 0x95a7431400F362F3647a69535C5666cA0133CAA0;
}
- revert("EigenSlasher not available for this chain");
+ revert("AllocationManager not available for this chain");
}
function _getRestakingOperatorBeacon() internal view returns (address) {
@@ -147,8 +162,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x6756B856Dd3843C84249a6A31850cB56dB824c4B
return 0x6756B856Dd3843C84249a6A31850cB56dB824c4B;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0x99c3E46E575df251149866285DdA7DAEba875B71
return 0x99c3E46E575df251149866285DdA7DAEba875B71;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x9f9aa46c3b98aDDc1eEef87De25f986024f7C6Bb
+ return 0x9f9aa46c3b98aDDc1eEef87De25f986024f7C6Bb;
}
revert("RestakingOperatorBeacon not available for this chain");
@@ -159,8 +178,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x00000000219ab540356cBB839Cbe05303d7705Fa
return 0x00000000219ab540356cBB839Cbe05303d7705Fa;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0x4242424242424242424242424242424242424242
return 0x4242424242424242424242424242424242424242;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x00000000219ab540356cBB839Cbe05303d7705Fa
+ return 0x00000000219ab540356cBB839Cbe05303d7705Fa;
}
revert("BeaconDepositContract not available for this chain");
@@ -171,8 +194,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x628b183F248a142A598AA2dcCCD6f7E480a7CcF2
return 0x628b183F248a142A598AA2dcCCD6f7E480a7CcF2;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0x0910310130d1c062DEF8B807528bdac80203BC66
return 0x0910310130d1c062DEF8B807528bdac80203BC66;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0xF3654e122850Da267F4FA674BF96B671FF8EA216
+ return 0xF3654e122850Da267F4FA674BF96B671FF8EA216;
}
revert("GuardianModule not available for this chain");
@@ -183,8 +210,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0xdd38A5a7789C74fc7F64556fc772343658EEBb04
return 0xdd38A5a7789C74fc7F64556fc772343658EEBb04;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0x4B0542470935ed4b085C3AD1983E85f5623ABf89
return 0x4B0542470935ed4b085C3AD1983E85f5623ABf89;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x6F2BDD64A7ba1Ca06784f58D2dBaF3f54a010F49
+ return 0x6F2BDD64A7ba1Ca06784f58D2dBaF3f54a010F49;
}
revert("PufferModuleBeacon not available for this chain");
@@ -195,8 +226,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x91E677b07F7AF907ec9a428aafA9fc14a0d3A338
return 0x91E677b07F7AF907ec9a428aafA9fc14a0d3A338;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0x30770d7E3e71112d7A6b7259542D1f680a70e315
return 0x30770d7E3e71112d7A6b7259542D1f680a70e315;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0xcd1442415Fc5C29Aa848A49d2e232720BE07976c
+ return 0xcd1442415Fc5C29Aa848A49d2e232720BE07976c;
}
revert("EigenPodManager not available for this chain");
@@ -207,8 +242,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x39053D51B77DC0d36036Fc1fCc8Cb819df8Ef37A
return 0x39053D51B77DC0d36036Fc1fCc8Cb819df8Ef37A;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0xA44151489861Fe9e3055d95adC98FbD462B948e7
return 0xA44151489861Fe9e3055d95adC98FbD462B948e7;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x867837a9722C512e0862d8c2E15b8bE220E8b87d
+ return 0x867837a9722C512e0862d8c2E15b8bE220E8b87d;
}
revert("DelegationManager not available for this chain");
@@ -219,8 +258,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x1565E55B63675c703fcC3778BD33eA97F7bE882F
return 0x1565E55B63675c703fcC3778BD33eA97F7bE882F;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0x09BE86B01c1e32dCa2ebdEDb01cD5A3F798b80C5
return 0x09BE86B01c1e32dCa2ebdEDb01cD5A3F798b80C5;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x66eb09811E1e46D60eD1421884E9FD76cbE555cA
+ return 0x66eb09811E1e46D60eD1421884E9FD76cbE555cA;
}
revert("AVSContractsRegistry not available for this chain");
@@ -231,8 +274,12 @@ abstract contract DeployerHelper is Script {
// Mainnet Timelock: https://etherscan.io/address/0x3C28B7c7Ba1A1f55c9Ce66b263B33B204f2126eA
return 0x3C28B7c7Ba1A1f55c9Ce66b263B33B204f2126eA;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// Holesky Timelock: https://explorer.pops.one/address/0x829aF0B3d099a12F0aE1b806f466EF771E2C07F8
return 0x829aF0B3d099a12F0aE1b806f466EF771E2C07F8;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0xA7A7C971B320f8B9F9557D49Ad5d988A668acD86
+ return 0xA7A7C971B320f8B9F9557D49Ad5d988A668acD86;
}
revert("Timelock not available for this chain");
@@ -243,8 +290,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x7750d328b314EfFa365A0402CcfD489B80B0adda
return 0x7750d328b314EfFa365A0402CcfD489B80B0adda;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0xAcc1fb458a1317E886dB376Fc8141540537E68fE
return 0xAcc1fb458a1317E886dB376Fc8141540537E68fE;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x29e8572678e0c272350aa0b4B8f304E47EBcd5e7
+ return 0x29e8572678e0c272350aa0b4B8f304E47EBcd5e7;
}
revert("RewardsCoordinator not available for this chain");
@@ -255,8 +306,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84
return 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0x3F1c547b21f65e10480dE3ad8E19fAAC46C95034
return 0x3F1c547b21f65e10480dE3ad8E19fAAC46C95034;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x3508A952176b3c15387C97BE809eaffB1982176a
+ return 0x3508A952176b3c15387C97BE809eaffB1982176a;
}
revert("stETH not available for this chain");
@@ -266,6 +321,9 @@ abstract contract DeployerHelper is Script {
if (block.chainid == mainnet) {
return 0x8d09a4502Cc8Cf1547aD300E066060D043f6982D;
}
+ if (block.chainid == hoodi) {
+ return 0x7E99eE3C66636DE415D2d7C880938F2f40f94De4;
+ }
revert("WstETH not available for this chain");
}
@@ -275,8 +333,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x93c4b944D05dfe6df7645A86cd2206016c51564D
return 0x93c4b944D05dfe6df7645A86cd2206016c51564D;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0x7D704507b76571a51d9caE8AdDAbBFd0ba0e63d3
return 0x7D704507b76571a51d9caE8AdDAbBFd0ba0e63d3;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0xF8a1a66130D614c7360e868576D5E59203475FE0
+ return 0xF8a1a66130D614c7360e868576D5E59203475FE0;
}
revert("stETH strategy not available for this chain");
@@ -287,8 +349,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x858646372CC42E1A627fcE94aa7A7033e7CF075A
return 0x858646372CC42E1A627fcE94aa7A7033e7CF075A;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0xdfB5f6CE42aAA7830E94ECFCcAd411beF4d4D5b6
return 0xdfB5f6CE42aAA7830E94ECFCcAd411beF4d4D5b6;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0xeE45e76ddbEDdA2918b8C7E3035cd37Eab3b5D41
+ return 0xeE45e76ddbEDdA2918b8C7E3035cd37Eab3b5D41;
}
revert("strategy manager not available for this chain");
@@ -299,8 +365,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x0BE2aE0edbeBb517541DF217EF0074FC9a9e994f
return 0x0BE2aE0edbeBb517541DF217EF0074FC9a9e994f;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0x8e043ed3F06720615685D4978770Cd5C8fe90fe3
return 0x8e043ed3F06720615685D4978770Cd5C8fe90fe3;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x6d62a3520E47530cb9c1887b9C7FA4e6c2164027
+ return 0x6d62a3520E47530cb9c1887b9C7FA4e6c2164027;
}
revert("puffer oracle not available for this chain");
@@ -311,8 +381,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x39053D51B77DC0d36036Fc1fCc8Cb819df8Ef37A
return 0x39053D51B77DC0d36036Fc1fCc8Cb819df8Ef37A;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0xA44151489861Fe9e3055d95adC98FbD462B948e7
return 0xA44151489861Fe9e3055d95adC98FbD462B948e7;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x867837a9722C512e0862d8c2E15b8bE220E8b87d
+ return 0x867837a9722C512e0862d8c2E15b8bE220E8b87d;
}
revert("eigen delegation manager not available for this chain");
@@ -323,8 +397,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
return 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0x1d181cBd1825e9eBC6AD966878D555A7215FF4F0
return 0x1d181cBd1825e9eBC6AD966878D555A7215FF4F0;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x6CeA393234314e5c12d017F46a5cc9555c79fAee
+ return 0x6CeA393234314e5c12d017F46a5cc9555c79fAee;
}
revert("WETH not available for this chain");
@@ -335,8 +413,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1
return 0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0xc7cc160b58F8Bb0baC94b80847E2CF2800565C50
return 0xc7cc160b58F8Bb0baC94b80847E2CF2800565C50;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0xfe56573178f1bcdf53F01A6E9977670dcBBD9186
+ return 0xfe56573178f1bcdf53F01A6E9977670dcBBD9186;
}
revert("lido withdrawal queue not available for this chain");
@@ -350,8 +432,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x8c1686069474410E6243425f4a10177a94EBEE11
return 0x8c1686069474410E6243425f4a10177a94EBEE11;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0x180a345906e42293dcAd5CCD9b0e1DB26aE0274e
return 0x180a345906e42293dcAd5CCD9b0e1DB26aE0274e;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x9a86395B4c5B03a3D727A9037a122470adfA6F0e
+ return 0x9a86395B4c5B03a3D727A9037a122470adfA6F0e;
} else if (block.chainid == binance) {
// https://bscscan.com/address/0x8849e9eB8bb27c1916AfB17ee4dEcAd375916474
return 0x8849e9eB8bb27c1916AfB17ee4dEcAd375916474;
@@ -371,12 +457,16 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0xD9A442856C234a39a81a089C06451EBAa4306a72
return 0xD9A442856C234a39a81a089C06451EBAa4306a72;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0x9196830bB4c05504E0A8475A0aD566AceEB6BeC9
return 0x9196830bB4c05504E0A8475A0aD566AceEB6BeC9;
} else if (block.chainid == sepolia) {
// PufferVaultMock
// https://sepolia.etherscan.io/address/0xd85D701A660a61D9737D05397612EF08be2cE62D
return 0xd85D701A660a61D9737D05397612EF08be2cE62D;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x5D5F97aAeb0c802C82B6E2d0C876CEc9C51cB1D1
+ return 0x5D5F97aAeb0c802C82B6E2d0C876CEc9C51cB1D1;
}
revert("PufferVault not available for this chain");
@@ -387,8 +477,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x9E1E4fCb49931df5743e659ad910d331735C3860
return 0x9E1E4fCb49931df5743e659ad910d331735C3860;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0x20377c306451140119C9967Ba6D0158a05b4eD07
return 0x20377c306451140119C9967Ba6D0158a05b4eD07;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x4a143618836f8bb84B328654f75d6C130500e375
+ return 0x4a143618836f8bb84B328654f75d6C130500e375;
}
revert("PufferModuleManager not available for this chain");
@@ -399,8 +493,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x7D26AD6F6BA9D6bA1de0218Ae5e20CD3a273a55A
return 0x7D26AD6F6BA9D6bA1de0218Ae5e20CD3a273a55A;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0xB028194785178a94Fe608994A4d5AD84c285A640
return 0xB028194785178a94Fe608994A4d5AD84c285A640;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x34E70AcAEa2046F1c9E27894Ed8E05535A44DD41
+ return 0x34E70AcAEa2046F1c9E27894Ed8E05535A44DD41;
}
revert("ValidatorTicket not available for this chain");
@@ -411,8 +509,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0xf7b6B32492c2e13799D921E84202450131bd238B
return 0xf7b6B32492c2e13799D921E84202450131bd238B;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0xE00c79408B9De5BaD2FDEbB1688997a68eC988CD
return 0xE00c79408B9De5BaD2FDEbB1688997a68eC988CD;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x7dE52e679e82395CB62C5B574A81cef637529fba
+ return 0x7dE52e679e82395CB62C5B574A81cef637529fba;
}
revert("PufferProtocol not available for this chain");
@@ -423,8 +525,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x953b4113716CE71596F7Ba6B0E75050c25c493c1
return 0x953b4113716CE71596F7Ba6B0E75050c25c493c1;
} else if (block.chainid == holesky) {
- // https://holesky.etherscan.io/address/TODO
- return address(0); // TODO
+ // @DEPRECATED
+ // https://holesky.etherscan.io/address/-
+ return address(0);
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0x9C47BFa23E26d88b1F43c5EBA2CDb25fEF359ed1
+ return 0x9C47BFa23E26d88b1F43c5EBA2CDb25fEF359ed1;
}
revert("RestakingOperatorController not available for this chain");
@@ -492,8 +598,13 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0xa4931a9F9Aaf79057334371D6f62164743f97b18
return 0xa4931a9F9Aaf79057334371D6f62164743f97b18;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0xfe235A03d87FCBf94E91536955c8a6b1FF50A5C0
return 0xfe235A03d87FCBf94E91536955c8a6b1FF50A5C0;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/???
+ // return ???;
+ // TODO Add address once deployed
}
revert("PufETHOFT not available for this chain");
@@ -503,6 +614,10 @@ abstract contract DeployerHelper is Script {
if (block.chainid == sepolia) {
// https://sepolia.etherscan.io/address/0xc0F1A1B26E7B3661c4875621883362CC48951c10
return 0xc0F1A1B26E7B3661c4875621883362CC48951c10;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/???
+ // return ???;
+ // TODO Add address once deployed
}
revert("PufETHOFT not available for this chain");
@@ -516,6 +631,7 @@ abstract contract DeployerHelper is Script {
// https://basescan.org/address/0x1a44076050125825900e736c501f859c50fE728c
return 0x1a44076050125825900e736c501f859c50fE728c;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0x6EDCE65403992e310A62460808c4b910D972f10f
return 0x6EDCE65403992e310A62460808c4b910D972f10f;
} else if (block.chainid == sepolia) {
@@ -528,6 +644,7 @@ abstract contract DeployerHelper is Script {
function _getLayerZeroDestinationEID() internal view returns (uint32) {
if (block.chainid == holesky) {
+ // @DEPRECATED
// https://docs.layerzero.network/v2/deployments/deployed-contracts
return 40217;
} else if (block.chainid == sepolia) {
@@ -542,8 +659,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0x65d2dd7A66a2733a36559fE900A236280A05FBD6
return 0x65d2dd7A66a2733a36559fE900A236280A05FBD6;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0
return 0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0
+ return 0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0;
}
revert("Paymaster not available for this chain");
@@ -578,8 +699,12 @@ abstract contract DeployerHelper is Script {
// https://etherscan.io/address/0xC0896ab1A8cae8c2C1d27d011eb955Cca955580d
return 0xC0896ab1A8cae8c2C1d27d011eb955Cca955580d;
} else if (block.chainid == holesky) {
+ // @DEPRECATED
// https://holesky.etherscan.io/address/0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0
return 0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0;
+ } else if (block.chainid == hoodi) {
+ // https://hoodi.etherscan.io/address/0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0
+ return 0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0;
} else if (block.chainid == ape) {
// https://apescan.io/address/0x36E3881Ff855c264045c22179b6fBc01430F97EC
return 0x36E3881Ff855c264045c22179b6fBc01430F97EC;
diff --git a/mainnet-contracts/script/GenerateBLSKeysAndRegisterValidators.s.sol b/mainnet-contracts/script/GenerateBLSKeysAndRegisterValidators.s.sol
index 649ac165..414e4f96 100644
--- a/mainnet-contracts/script/GenerateBLSKeysAndRegisterValidators.s.sol
+++ b/mainnet-contracts/script/GenerateBLSKeysAndRegisterValidators.s.sol
@@ -43,6 +43,11 @@ contract GenerateBLSKeysAndRegisterValidators is Script {
protocolAddress = 0xE00c79408B9De5BaD2FDEbB1688997a68eC988CD;
pufferProtocol = PufferProtocol(protocolAddress);
forkVersion = "0x01017000";
+ } else if (block.chainid == 560048) {
+ // Hoodi
+ protocolAddress = 0x7dE52e679e82395CB62C5B574A81cef637529fba;
+ pufferProtocol = PufferProtocol(protocolAddress);
+ forkVersion = "0x10000910";
} else if (block.chainid == 1) {
// Mainnet
protocolAddress = 0xf7b6B32492c2e13799D921E84202450131bd238B;
diff --git a/mainnet-contracts/test/fork-tests/PufferModuleManager.integration.t.sol b/mainnet-contracts/test/fork-tests/PufferModuleManager.integration.t.sol
index 7fd56baf..1a3992ae 100644
--- a/mainnet-contracts/test/fork-tests/PufferModuleManager.integration.t.sol
+++ b/mainnet-contracts/test/fork-tests/PufferModuleManager.integration.t.sol
@@ -26,12 +26,14 @@ contract PufferModuleManagerIntegrationTest is IntegrationTestHelper {
uint256[] privKeys;
- address EIGEN_DA_REGISTRY_COORDINATOR_HOLESKY = 0x53012C69A189cfA2D9d29eb6F19B32e0A2EA3490;
- address EIGEN_DA_SERVICE_MANAGER = 0xD4A7E1Bd8015057293f0D0A557088c286942e84b;
+ address EIGEN_DA_REGISTRY_COORDINATOR_HOODI = 0xB5b76D561eeF36CD772890C94C6Bde8b895455e2;
+ address EIGEN_DA_SERVICE_MANAGER = 0x3FF2204A567C15dC3731140B95362ABb4b17d8ED;
// IAVSDirectory public avsDirectory = IAVSDirectory(0x055733000064333CaDDbC92763c58BF0192fFeBf);
+ address private constant HOODI_WETH_ADDRESS = 0x6CeA393234314e5c12d017F46a5cc9555c79fAee;
+
function setUp() public {
- deployContractsHolesky(0); // on latest block
+ deployContractsHoodi(0); // on latest block
}
function test_create_puffer_module() public {
@@ -41,20 +43,16 @@ contract PufferModuleManagerIntegrationTest is IntegrationTestHelper {
function _depositToWETHEigenLayerStrategyAndDelegateTo(address restakingOperator) internal {
// buy weth
- vm.startPrank(0xA85Fdcb45aaFF3C310a47FE309D4a35FAfbdc0ad);
- Weth(0x94373a4919B3240D86eA41593D5eBa789FEF3848).deposit{ value: 500 ether }();
- Weth(0x94373a4919B3240D86eA41593D5eBa789FEF3848).approve(
- 0xdfB5f6CE42aAA7830E94ECFCcAd411beF4d4D5b6, type(uint256).max
- );
+ vm.startPrank(0xA85Fdcb45aaFF3C310a47FE309D4a35FAfbdc0ad); // TODO Change
+ Weth(HOODI_WETH_ADDRESS).deposit{ value: 500 ether }();
+ Weth(HOODI_WETH_ADDRESS).approve(0xeE45e76ddbEDdA2918b8C7E3035cd37Eab3b5D41, type(uint256).max);
// deposit into weth strategy
- IStrategyManager(0xdfB5f6CE42aAA7830E94ECFCcAd411beF4d4D5b6).depositIntoStrategy(
- IStrategy(0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9),
- IERC20(0x94373a4919B3240D86eA41593D5eBa789FEF3848),
- 500 ether
+ IStrategyManager(0xeE45e76ddbEDdA2918b8C7E3035cd37Eab3b5D41).depositIntoStrategy(
+ IStrategy(0x24579aD4fe83aC53546E5c2D3dF5F85D6383420d), IERC20(HOODI_WETH_ADDRESS), 500 ether
);
ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry;
- IDelegationManager(0xA44151489861Fe9e3055d95adC98FbD462B948e7).delegateTo(
+ IDelegationManager(0x867837a9722C512e0862d8c2E15b8bE220E8b87d).delegateTo(
restakingOperator, signatureWithExpiry, bytes32(0)
);
}
diff --git a/mainnet-contracts/test/fork-tests/PufferModuleManagerSlasher.integration.t.sol b/mainnet-contracts/test/fork-tests/PufferModuleManagerSlasher.integration.t.sol
index 45ccae7c..e47523f5 100644
--- a/mainnet-contracts/test/fork-tests/PufferModuleManagerSlasher.integration.t.sol
+++ b/mainnet-contracts/test/fork-tests/PufferModuleManagerSlasher.integration.t.sol
@@ -19,19 +19,19 @@ import { RestakingOperatorController } from "../../src/RestakingOperatorControll
contract PufferModuleManagerSlasherIntegrationTest is Test, DeployerHelper {
PufferModuleManager public pufferModuleManager;
- address PUFFER_MODULE_0_HOLESKY = 0x9017a172578458E1204691D6E1dB92ca61381655;
- address EIGENPOD_0_HOLESKY = 0xeD9B08B8958B89E7A9008CAc0937E46F73Bf8f52;
- address RESTAKING_OPERATOR_0_HOLESKY = 0x57b6FdEF3A23B81547df68F44e5524b987755c99;
+ address PUFFER_MODULE_0_HOODI = 0x1C898d25BC7B2819E8F0Af53A5a956F071f971fF;
+ address EIGENPOD_0_HOODI = 0xE7FDd7769f369cd1534Cb727A812Bce04553b24d;
+ address RESTAKING_OPERATOR_0_HOODI = 0x57b6FdEF3A23B81547df68F44e5524b987755c99; // TODO Change
bytes32 PUFFER_MODULE_0_NAME = bytes32("PUFFER_MODULE_0");
DeployPufferModuleManager deployPufferModuleManager;
DeployPufferModuleImplementation deployPufferModule;
DeployRestakingOperator deployRestakingOperator;
- uint32 START_BLOCK = 2994229; // Dec-23-2024 09:43:00 AM +UTC
+ uint32 START_BLOCK = 2994229; // Dec-23-2024 09:43:00 AM +UTC // TODO Change
function setUp() public {
- vm.createSelectFork(vm.rpcUrl("holesky"), START_BLOCK);
+ vm.createSelectFork(vm.rpcUrl("hoodi"), START_BLOCK);
// I want to use the deployment scripts to deploy the contracts in tests.
deployPufferModuleManager = new DeployPufferModuleManager();
@@ -74,9 +74,9 @@ contract PufferModuleManagerSlasherIntegrationTest is Test, DeployerHelper {
IDelegationManagerTypes.Withdrawal[] memory withdrawals = new IDelegationManagerTypes.Withdrawal[](1);
withdrawals[0] = IDelegationManagerTypes.Withdrawal({
- staker: PUFFER_MODULE_0_HOLESKY,
- delegatedTo: RESTAKING_OPERATOR_0_HOLESKY,
- withdrawer: PUFFER_MODULE_0_HOLESKY,
+ staker: PUFFER_MODULE_0_HOODI,
+ delegatedTo: RESTAKING_OPERATOR_0_HOODI,
+ withdrawer: PUFFER_MODULE_0_HOODI,
nonce: 42,
startBlock: START_BLOCK,
strategies: strategies,
@@ -89,7 +89,7 @@ contract PufferModuleManagerSlasherIntegrationTest is Test, DeployerHelper {
bool[] memory receiveAsTokens = new bool[](1);
receiveAsTokens[0] = true;
- vm.roll(START_BLOCK + 50 + 1); // on Holesky its 50 blocks wait time, in Production it will be 14 days in blocks..
+ vm.roll(START_BLOCK + 50 + 1); // on Hoodi its 50 blocks wait time, in Production it will be 14 days in blocks..
pufferModuleManager.callCompleteQueuedWithdrawals(PUFFER_MODULE_0_NAME, withdrawals, tokens, receiveAsTokens);
}
diff --git a/mainnet-contracts/test/fork-tests/ffi/PufferModuleManagerHoleskyFfi.t.sol b/mainnet-contracts/test/fork-tests/ffi/PufferModuleManagerHoodiFfi.t.sol
similarity index 60%
rename from mainnet-contracts/test/fork-tests/ffi/PufferModuleManagerHoleskyFfi.t.sol
rename to mainnet-contracts/test/fork-tests/ffi/PufferModuleManagerHoodiFfi.t.sol
index a02f0fbb..db85c130 100644
--- a/mainnet-contracts/test/fork-tests/ffi/PufferModuleManagerHoleskyFfi.t.sol
+++ b/mainnet-contracts/test/fork-tests/ffi/PufferModuleManagerHoodiFfi.t.sol
@@ -12,31 +12,31 @@ interface Weth {
}
// PufferTestnet V1 deployment
-contract PufferModuleManagerHoleskyTestnetFFI is Test {
+contract PufferModuleManagerHoodiTestnetFFI is Test {
using BN254 for BN254.G1Point;
using Strings for uint256;
uint256[] privKeys;
// https://github.com/Layr-Labs/eigenlayer-contracts?tab=readme-ov-file#deployments
- address EIGEN_DA_REGISTRY_COORDINATOR_HOLESKY = 0x53012C69A189cfA2D9d29eb6F19B32e0A2EA3490;
- address EIGEN_DA_SERVICE_MANAGER = 0xD4A7E1Bd8015057293f0D0A557088c286942e84b;
+ address EIGEN_DA_REGISTRY_COORDINATOR_HOODI = 0x53012C69A189cfA2D9d29eb6F19B32e0A2EA3490; // TODO Change
+ address EIGEN_DA_SERVICE_MANAGER = 0xD4A7E1Bd8015057293f0D0A557088c286942e84b; // TODO Change
address BEACON_CHAIN_STRATEGY = 0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0;
- address EIGEN_POD_MANAGER = 0x30770d7E3e71112d7A6b7259542D1f680a70e315;
- address DELAYED_WITHDRAWAL_ROUTER = 0x642c646053eaf2254f088e9019ACD73d9AE0FA32;
- address DELEGATION_MANAGER = 0xA44151489861Fe9e3055d95adC98FbD462B948e7;
+ address EIGEN_POD_MANAGER = 0xcd1442415Fc5C29Aa848A49d2e232720BE07976c;
+ address DELAYED_WITHDRAWAL_ROUTER = 0x642c646053eaf2254f088e9019ACD73d9AE0FA32; // TODO Change
+ address DELEGATION_MANAGER = 0x867837a9722C512e0862d8c2E15b8bE220E8b87d;
- // Puffer Holesky deployment
+ // Puffer Hoodi deployment
address PUFFER_SHARED_DEV_WALLET = 0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0;
- address ACCESS_MANAGER_HOLESKY = 0xA6c916f85DAfeb6f726E03a1Ce8d08cf835138fF;
- address MODULE_BEACON_HOLESKY = 0x5B81A4579f466fB17af4d8CC0ED51256b94c61D4;
- address PUFFER_PROTOCOL_HOLESKY = 0x705E27D6A6A0c77081D32C07DbDE5A1E139D3F14;
- address PUFFER_MODULE_MANAGER = 0xe4695ab93163F91665Ce5b96527408336f070a71;
- address PUFFER_MODULE_0_HOLESKY = 0x0B0456ec773B7D89C9deCc38b682F98556CF9862;
- // https://holesky.eigenlayer.xyz/operator/0xe2c2dc296a0bff351f6bc3e98d37ea798e393e56
- address RESTAKING_OPERATOR_CONTRACT = 0xe2c2dc296a0bFF351F6bC3e98D37ea798e393e56;
- address RESTAKING_OPERATOR_BEACON = 0xa7DC88c059F57ADcE41070cEfEFd31F74649a261;
- address REWARDS_COORDINATOR = 0xAcc1fb458a1317E886dB376Fc8141540537E68fE;
+ address ACCESS_MANAGER_HOODI = 0x9a86395B4c5B03a3D727A9037a122470adfA6F0e;
+ address MODULE_BEACON_HOODI = 0x6F2BDD64A7ba1Ca06784f58D2dBaF3f54a010F49;
+ address PUFFER_PROTOCOL_HOODI = 0x7dE52e679e82395CB62C5B574A81cef637529fba;
+ address PUFFER_MODULE_MANAGER = 0x4a143618836f8bb84B328654f75d6C130500e375;
+ address PUFFER_MODULE_0_HOODI = 0x1C898d25BC7B2819E8F0Af53A5a956F071f971fF;
+ // https://hoodi.eigenlayer.xyz/operator/0xe2c2dc296a0bff351f6bc3e98d37ea798e393e56 // TODO Change
+ address RESTAKING_OPERATOR_CONTRACT = 0xe2c2dc296a0bFF351F6bC3e98D37ea798e393e56; // TODO Change
+ address RESTAKING_OPERATOR_BEACON = 0x9f9aa46c3b98aDDc1eEef87De25f986024f7C6Bb;
+ address REWARDS_COORDINATOR = 0x29e8572678e0c272350aa0b4B8f304E47EBcd5e7;
function _mulGo(uint256 x) internal returns (BN254.G2Point memory g2Point) {
string[] memory inputs = new string[](3);
diff --git a/mainnet-contracts/test/helpers/IntegrationTestHelper.sol b/mainnet-contracts/test/helpers/IntegrationTestHelper.sol
index 6ce53cbf..6d3b65db 100644
--- a/mainnet-contracts/test/helpers/IntegrationTestHelper.sol
+++ b/mainnet-contracts/test/helpers/IntegrationTestHelper.sol
@@ -13,7 +13,7 @@ import { IEnclaveVerifier } from "../../src/interface/IEnclaveVerifier.sol";
import { AccessManager } from "@openzeppelin/contracts/access/manager/AccessManager.sol";
contract IntegrationTestHelper is Test {
- address DAO = 0xC4a2E012024d4ff28a4E2334F58D4Cc233EB1FE1;
+ address DAO = 0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0;
PufferProtocol public pufferProtocol;
UpgradeableBeacon public beacon;
PufferModuleManager public moduleManager;
@@ -27,12 +27,12 @@ contract IntegrationTestHelper is Test {
address PAYMASTER = 0xDDDeAfB492752FC64220ddB3E7C9f1d5CcCdFdF0;
// custom block number
- function deployContractsHolesky(uint256 blockNumber) public virtual {
+ function deployContractsHoodi(uint256 blockNumber) public virtual {
// see foundry.toml for the rpc urls
if (blockNumber == 0) {
- vm.createSelectFork(vm.rpcUrl("holesky"));
+ vm.createSelectFork(vm.rpcUrl("hoodi"));
} else {
- vm.createSelectFork(vm.rpcUrl("holesky"), blockNumber);
+ vm.createSelectFork(vm.rpcUrl("hoodi"), blockNumber);
}
address[] memory guardians = new address[](1);
@@ -42,8 +42,8 @@ contract IntegrationTestHelper is Test {
}
// 'default' block number
- function deployContractsHolesky() public virtual {
- deployContractsHolesky(1_212_252);
+ function deployContractsHoodi() public virtual {
+ deployContractsHoodi(1_212_252); // TODO Change
}
function _deployAndLabel(address[] memory guardians, uint256 threshold) internal {