Skip to content

Commit

Permalink
AVS testnet deployment on Holesky (#18)
Browse files Browse the repository at this point in the history
* update forge-std

* deploy avs holesky

* AVS holesky deployment

* fix: formatting on avs config
  • Loading branch information
jaeaster authored May 20, 2024
1 parent 512e29a commit 2c0dd76
Show file tree
Hide file tree
Showing 8 changed files with 167 additions and 59 deletions.
9 changes: 9 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ DEPLOY_AVS_CMD=forge script DeployAVS --rpc-url
QUERY_CMD=forge script Query --rpc-url
WITHDRAW_FEES_CMD=forge script WithdrawFees --rpc-url
BRIDGE_CMD=forge script Bridge --rpc-url
STAKE_CMD=forge script Stake --rpc-url

# deps
install :; forge install
Expand All @@ -33,6 +34,7 @@ setup_integration_test : local_deploy_erc1967_proxy_factory local_deploy_registr
setup_avs_integration_test : local_deploy_erc1967_proxy_factory local_deploy_avs

local_deploy_erc1967_proxy_factory :; ${DEPLOY_PROXY_FACTORY_CMD} local ${LOCAL_DEPLOY_FLAGS} --json
holesky_testnet_deploy_erc1967_proxy_factory :; ${DEPLOY_PROXY_FACTORY_CMD} holesky ${DEPLOY_FLAGS}
base_testnet_deploy_erc1967_proxy_factory :; ${DEPLOY_PROXY_FACTORY_CMD} base_sepolia ${DEPLOY_FLAGS}
fraxtal_testnet_deploy_erc1967_proxy_factory :; ${DEPLOY_PROXY_FACTORY_CMD} fraxtal_testnet ${DEPLOY_FLAGS}
fraxtal_mainnet_deploy_erc1967_proxy_factory :; ${DEPLOY_PROXY_FACTORY_CMD} fraxtal ${DEPLOY_FLAGS} ${MAINNET_DEPLOYER}
Expand All @@ -45,6 +47,7 @@ fraxtal_testnet_integration_test : fraxtal_testnet_deploy_registry fraxtal_testn
# Deploy the registry
local_deploy_registry :; ${DEPLOY_REGISTRY_CMD} local ${LOCAL_DEPLOY_FLAGS} --json
testnet_deploy_registry :; ${DEPLOY_REGISTRY_CMD} sepolia ${DEPLOY_FLAGS} --priority-gas-price 0.1gwei
holesky_testnet_deploy_registry :; ${DEPLOY_REGISTRY_CMD} holesky ${DEPLOY_FLAGS} --priority-gas-price 0.1gwei
mainnet_deploy_registry :; ${DEPLOY_REGISTRY_CMD} mainnet ${DEPLOY_FLAGS} --priority-gas-price 0.5gwei ${MAINNET_DEPLOYER}
base_testnet_deploy_registry :; ${DEPLOY_REGISTRY_CMD} base_sepolia ${DEPLOY_FLAGS}
base_mainnet_deploy_registry :; ${DEPLOY_REGISTRY_CMD} base ${DEPLOY_FLAGS} ${MAINNET_DEPLOYER}
Expand All @@ -54,6 +57,7 @@ fraxtal_mainnet_deploy_registry :; ${DEPLOY_REGISTRY_CMD} fraxtal ${DEPLOY_FLAGS
# Deploy clients
local_deploy_clients :; ${DEPLOY_CLIENTS_CMD} local ${LOCAL_DEPLOY_FLAGS}
testnet_deploy_clients :; ${DEPLOY_CLIENTS_CMD} sepolia ${DEPLOY_FLAGS} --priority-gas-price 0.1gwei
holesky_deploy_clients :; ${DEPLOY_CLIENTS_CMD} holesky ${DEPLOY_FLAGS} --priority-gas-price 0.1gwei
mainnet_deploy_clients :; ${DEPLOY_CLIENTS_CMD} mainnet ${DEPLOY_FLAGS} --priority-gas-price 0.5gwei --account v0_owner
base_testnet_deploy_clients :; ${DEPLOY_CLIENTS_CMD} base_sepolia ${DEPLOY_FLAGS}
base_mainnet_deploy_clients :; ${DEPLOY_CLIENTS_CMD} base ${DEPLOY_FLAGS} ${MAINNET_DEPLOYER}
Expand Down Expand Up @@ -81,3 +85,8 @@ mainnet_bridge_base :; ${BRIDGE_CMD} mainnet ${LOCAL_DEPLOY_FLAGS} --account
holesky_bridge_fraxtal :; ${BRIDGE_CMD} holesky ${LOCAL_DEPLOY_FLAGS} --priority-gas-price 0.01gwei -vvvv

base_mainnet_deployment : base_mainnet_deploy_registry base_mainnet_deploy_clients

# Stake
holesky_stake :; ${STAKE_CMD} holesky ${LOCAL_DEPLOY_FLAGS} --priority-gas-price 0.01gwei -vvvv --skip-simulation

base_mainnet_deployment : base_mainnet_deploy_registry base_mainnet_deploy_clients
133 changes: 81 additions & 52 deletions config/avs.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,56 +14,85 @@
"delegationManager": "0x39053D51B77DC0d36036Fc1fCc8Cb819df8Ef37A"
}
},
"strategies": [
{
"name": "cbETH",
"addr": "0x54945180dB7943c0ed0FEE7EdaB2Bd24620256bc",
"multiplier": 1000
},
{
"name": "stETH",
"addr": "0x93c4b944D05dfe6df7645A86cd2206016c51564D",
"multiplier": 1000
},
{
"name": "rETH",
"addr": "0x1BeE69b7dFFfA4E2d53C2a2Df135C388AD25dCD2",
"multiplier": 1000
},
{
"name": "ETHx",
"addr": "0x9d7eD45EE2E8FC5482fa2428f15C971e6369011d",
"multiplier": 1000
},
{
"name": "ankrETH",
"addr": "0x13760F50a9d7377e4F20CB8CF9e4c26586c658ff",
"multiplier": 1000
},
{
"name": "swETH",
"addr": "0x0Fe4F44beE93503346A3Ac9EE5A26b130a5796d6",
"multiplier": 1000
},
{
"name": "wBETH",
"addr": "0x7CA911E83dabf90C90dD3De5411a10F1A6112184",
"multiplier": 1000
},
{
"name": "sfrxETH",
"addr": "0x8CA7A5d6f3acd3A7A8bC468a8CD0FB14B6BD28b6",
"multiplier": 1000
},
{
"name": "mETH",
"addr": "0x298aFB19A105D59E74658C4C334Ff360BadE6dd2",
"multiplier": 1000
},
{
"name": "Beacon ETH",
"addr": "0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0",
"multiplier": 1000
}
]
"strategies": {
"mainnet": [
{
"name": "cbETH",
"addr": "0x54945180dB7943c0ed0FEE7EdaB2Bd24620256bc",
"multiplier": 1000
},
{
"name": "stETH",
"addr": "0x93c4b944D05dfe6df7645A86cd2206016c51564D",
"multiplier": 1000
},
{
"name": "rETH",
"addr": "0x1BeE69b7dFFfA4E2d53C2a2Df135C388AD25dCD2",
"multiplier": 1000
},
{
"name": "ETHx",
"addr": "0x9d7eD45EE2E8FC5482fa2428f15C971e6369011d",
"multiplier": 1000
},
{
"name": "ankrETH",
"addr": "0x13760F50a9d7377e4F20CB8CF9e4c26586c658ff",
"multiplier": 1000
},
{
"name": "swETH",
"addr": "0x0Fe4F44beE93503346A3Ac9EE5A26b130a5796d6",
"multiplier": 1000
},
{
"name": "wBETH",
"addr": "0x7CA911E83dabf90C90dD3De5411a10F1A6112184",
"multiplier": 1000
},
{
"name": "sfrxETH",
"addr": "0x8CA7A5d6f3acd3A7A8bC468a8CD0FB14B6BD28b6",
"multiplier": 1000
},
{
"name": "mETH",
"addr": "0x298aFB19A105D59E74658C4C334Ff360BadE6dd2",
"multiplier": 1000
},
{
"name": "Beacon ETH",
"addr": "0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0",
"multiplier": 1000
}
],
"holesky": [
{
"name": "stETH",
"addr": "0x3F1c547b21f65e10480dE3ad8E19fAAC46C95034",
"multiplier": 2000
},
{
"name": "ETHx",
"addr": "0x7F09ceb3874F5E35Cd2135F56fd4329b88c5d119",
"multiplier": 2000
},
{
"name": "WETH",
"addr": "0x94373a4919B3240D86eA41593D5eBa789FEF3848",
"multiplier": 2000
},
{
"name": "sfrxETH",
"addr": "0xa63f56985F9C7F3bc9fFc5685535649e0C1a55f3",
"multiplier": 2000
},
{
"name": "mETH",
"addr": "0xbe16244EAe9837219147384c8A7560BA14946262",
"multiplier": 2000
}
]
}
}
5 changes: 3 additions & 2 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ fs_permissions = [{ access = "read", path = "./test" }, { access = "read-write",
optimizer = true
optimizer_runs = 200
solc-version = "0.8.25"
evm_version = "shanghai"
# evm_version = "cancun" TODO: Update after fraxtal support
# evm_version = "shanghai"
evm_version = "cancun" # TODO: Update after fraxtal support
verbosity = 4

[fmt]
Expand All @@ -26,6 +26,7 @@ fraxtal = "https://rpc.frax.com"

[etherscan]
sepolia = { key = "${MAINNET_ETHERSCAN_API_KEY}" }
holesky = { key = "${MAINNET_ETHERSCAN_API_KEY}" }
base_sepolia = { key = "${BASESCAN_API_KEY}" }
fraxtal_testnet = { key = "${FRAXSCAN_API_KEY}" }

Expand Down
9 changes: 7 additions & 2 deletions script/deploy/DeployAVS.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -152,10 +152,15 @@ contract DeployAVS is BaseScript {
return serviceManagerImpl;
}

function getQuorum() private view returns (Quorum memory) {
function getQuorum() private returns (Quorum memory) {
string memory json = vm.readFile(avsConfigPath());
StrategyConfig[] memory strategies;
bytes memory strategiesRaw = json.parseRaw(".strategies");

string memory chainName = getChain(block.chainid).chainAlias;
string memory strategiesKey =
string(abi.encodePacked(".strategies.", chainName));

bytes memory strategiesRaw = json.parseRaw(strategiesKey);
strategies = abi.decode(strategiesRaw, (StrategyConfig[]));

StrategyParams[] memory strategyParams =
Expand Down
16 changes: 16 additions & 0 deletions script/output/holesky/deployment.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"addresses": {
"queryClient": "0x0D8F2217F0D194926AFF15aA9Dc978b920E37F45",
"registryImpl": "0x042B7626ebFf4cAa5bb8D44C26029C260158DAC9",
"registryProxy": "0x4f73289BFffEF7Eed9f284B1E76328beB52c6e37",
"serviceManagerImpl": "0xF221F7faDf301EC9fC1780D5c85F7137D9d11015",
"serviceManagerProxy": "0xf98D5De1014110C65c51b85Ea55f73863215CC10",
"stakeRegistryImpl": "0xBeAd7Fe75B567Ac0fc12526225451eb3F964d834",
"stakeRegistryProxy": "0xf724cDC7C40fd6B59590C624E8F0E5E3843b4BE4",
"storageContract": "0x09C52d2dCdA5724823f5b3bEe93E989B218004Ac"
},
"chainInfo": {
"chainId": 17000,
"deploymentBlock": 1575368
}
}
38 changes: 38 additions & 0 deletions script/util/Stake.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

import {BaseScript} from "../BaseScript.s.sol";
import {LPNQueryV0} from "../../src/client/LPNQueryV0.sol";
import {LPNRegistryV0} from "../../src/LPNRegistryV0.sol";
import {
PUDGEY_PENGUINS,
isEthereum,
isMainnet
} from "../../src/utils/Constants.sol";
import {L1BlockNumber} from "../../src/utils/L1Block.sol";

contract Stake is BaseScript {
address holeskyWeth = 0x94373a4919B3240D86eA41593D5eBa789FEF3848;

IMantleEth mantleEth =
IMantleEth(0xbe16244EAe9837219147384c8A7560BA14946262);

LPNRegistryV0 registry = LPNRegistryV0(getDeployedRegistry());
LPNQueryV0 queryClient = LPNQueryV0(getDeployedQueryClient());

function run() external broadcaster {
stake();
}

function stake() private {
// Deposit to get WETH
// holeskyWeth.call{value: 1 ether}("");

// Stake to get mETH
mantleEth.stake{value: 100 ether}(0);
}
}

interface IMantleEth {
function stake(uint256 minMETHAmount) external payable;
}
14 changes: 12 additions & 2 deletions src/utils/Constants.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ uint256 constant ANVIL = 31337;

uint256 constant ETH_MAINNET = 1;
uint256 constant ETH_SEPOLIA = 11155111;
uint256 constant ETH_HOLESKY = 17000;

uint256 constant BASE_MAINNET = 8453;
uint256 constant BASE_SEPOLIA = 84532;
Expand All @@ -32,7 +33,8 @@ uint256 constant LAGRANGE_LOONS_MAPPING_SLOT = 2;
uint256 constant LAGRANGE_LOONS_LENGTH_SLOT = 8;

function isEthereum() view returns (bool) {
return block.chainid == ETH_MAINNET || block.chainid == ETH_SEPOLIA;
return block.chainid == ETH_MAINNET || block.chainid == ETH_SEPOLIA
|| block.chainid == ETH_HOLESKY;
}

function isOPStack() view returns (bool) {
Expand All @@ -48,7 +50,8 @@ function isLocal() view returns (bool) {
}

function isTestnet() view returns (bool) {
uint256[3] memory testnets = [ETH_SEPOLIA, BASE_SEPOLIA, FRAXTAL_HOLESKY];
uint256[4] memory testnets =
[ETH_SEPOLIA, ETH_HOLESKY, BASE_SEPOLIA, FRAXTAL_HOLESKY];
return chainMatches(testnets);
}

Expand All @@ -63,3 +66,10 @@ function chainMatches(uint256[3] memory chains) view returns (bool) {
}
return false;
}

function chainMatches(uint256[4] memory chains) view returns (bool) {
for (uint256 i = 0; i < chains.length; i++) {
if (chains[i] == block.chainid) return true;
}
return false;
}

0 comments on commit 2c0dd76

Please sign in to comment.