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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 66 additions & 12 deletions script/Deployments.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,13 @@ contract Deploy is Script, Test {
address admin;
}

enum Network {
DEVNET,
HOLESKY,
HOODI
}
// Proxies

ProxyInfo internal registryCoordinatorInfo;
ProxyInfo internal linglongSlasherInfo;
ProxyInfo internal pubkeyRegistryInfo;
Expand Down Expand Up @@ -196,9 +202,9 @@ contract Deploy is Script, Test {
}

// Deploy implementation contracts and initialize them

function deployImplementations() internal {
string memory taiyiAddresses = "taiyiAddresses";

// Deploy TaiyiRegistryCoordinator implementation and proxy
TaiyiRegistryCoordinator registryCoordinatorImpl = new TaiyiRegistryCoordinator(
IAllocationManager(allocationManager),
Expand Down Expand Up @@ -384,17 +390,36 @@ contract Deploy is Script, Test {
vm.stopBroadcast();
}

function setupHoleskyAddresses() internal {
function setupHoleskyAddresses(string memory taiyiAddresses) internal {
// holesky address reference: https://github.com/Layr-Labs/eigenlayer-contracts/tree/testnet-holesky
avsDirectory = 0x055733000064333CaDDbC92763c58BF0192fFeBf;
delegationManager = 0xA44151489861Fe9e3055d95adC98FbD462B948e7;
strategyManagerAddr = 0xdfB5f6CE42aAA7830E94ECFCcAd411beF4d4D5b6;
eigenPodManager = 0x30770d7E3e71112d7A6b7259542D1f680a70e315;
rewardCoordinator = 0xAcc1fb458a1317E886dB376Fc8141540537E68fE;
allocationManager = 0x78469728304326CBc65f8f95FA756B0B73164462;
permissionController = 0x0000000000000000000000000000000000000000;
permissionController = 0x598cb226B591155F767dA17AfE7A2241a68C5C10;
eigenPauserReg = 0x85Ef7299F8311B25642679edBF02B62FA2212F06;
// TODO: update this
urc = 0x0000000000000000000000000000000000000000;
vm.startBroadcast();
IRegistry.Config memory registryConfig = IRegistry.Config({
minCollateralWei: SafeCast.toUint80(urcMinCollateral),
fraudProofWindow: 7200,
unregistrationDelay: 7200,
slashWindow: 7200,
optInDelay: 7200
});

Registry registry = new Registry(registryConfig);
emit log_address(address(registry));
urc = address(registry);
vm.serializeAddress(taiyiAddresses, "urc", address(registry));
vm.serializeUint(taiyiAddresses, "urcMinCollateral", urcMinCollateral);
vm.stopBroadcast();
}

function setupHoodiAddresses(string memory taiyiAddresses) internal {
revert("Hoodi is not supported yet");
}

function run(string memory configFileName, uint256 minCollateral) public {
Expand All @@ -404,18 +429,21 @@ contract Deploy is Script, Test {
deployer = vm.addr(proxyDeployerPrivateKey);
implOwner = vm.addr(implPrivateKey);

string memory network = vm.envString("NETWORK");
string memory taiyiAddresses = "taiyiAddresses";

vm.createDir("script/output/devnet", true);
Network network = getNetwork();
string memory outputDir = getOutputDir(network);

if (keccak256(abi.encodePacked(network)) == keccak256(abi.encodePacked("devnet")))
{
vm.createDir(outputDir, true);

if (network == Network.DEVNET) {
setupDevnetAddresses(proxyDeployerPrivateKey, taiyiAddresses, configFileName);
} else if (
keccak256(abi.encodePacked(network)) == keccak256(abi.encodePacked("holesky"))
) {
setupHoleskyAddresses();
} else if (network == Network.HOLESKY) {
setupHoleskyAddresses(taiyiAddresses);
} else if (network == Network.HOODI) {
setupHoodiAddresses(taiyiAddresses);
} else {
revert("Invalid network");
}

rewardInitiator = address(0xd8F3183DEf51a987222d845Be228E0bBB932c292); // Arbitrary address
Expand Down Expand Up @@ -453,4 +481,30 @@ contract Deploy is Script, Test {

return (proxyDeployerPrivateKey, implPrivateKey);
}

function getOutputDir(Network network) internal pure returns (string memory) {
if (network == Network.HOLESKY) {
return "script/output/holesky";
} else if (network == Network.HOODI) {
return "script/output/hoodi";
} else {
return "script/output/devnet";
}
}

function getNetwork() internal view returns (Network) {
string memory network = vm.envString("NETWORK");

if (
keccak256(abi.encodePacked(network)) == keccak256(abi.encodePacked("holesky"))
) {
return Network.HOLESKY;
} else if (
keccak256(abi.encodePacked(network)) == keccak256(abi.encodePacked("hoodi"))
) {
return Network.HOODI;
} else {
return Network.DEVNET;
}
}
}
97 changes: 77 additions & 20 deletions script/SetRegistry.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,39 @@ import { StdStorage, stdStorage } from "forge-std/Test.sol";
contract SetRegistry is Script, Test {
using stdStorage for StdStorage;

// Network enum for better readability
enum Network {
DEVNET,
HOLESKY,
HOODI
}

function getNetwork() internal view returns (Network) {
string memory network = vm.envString("NETWORK");

if (
keccak256(abi.encodePacked(network)) == keccak256(abi.encodePacked("holesky"))
) {
return Network.HOLESKY;
} else if (
keccak256(abi.encodePacked(network)) == keccak256(abi.encodePacked("hoodi"))
) {
return Network.HOODI;
} else {
return Network.DEVNET;
}
}

function getOutputDir(Network network) internal pure returns (string memory) {
if (network == Network.HOLESKY) {
return "script/output/holesky";
} else if (network == Network.HOODI) {
return "script/output/hoodi";
} else {
return "script/output/devnet";
}
}

function run() public {
// Get deployer address from private key
string memory pkString = vm.envString("PROXY_OWNER_PRIVATE_KEY");
Expand All @@ -74,8 +107,15 @@ contract SetRegistry is Script, Test {
address proxyDeployer = vm.addr(proxyDeployerPrivateKey);
address implDeployer = vm.addr(implPrivateKey);

// Get network and set up paths
Network network = getNetwork();
string memory outputDir = getOutputDir(network);
string memory outputFile =
string(bytes("script/output/devnet/taiyiAddresses.json"));
string(bytes(string.concat(outputDir, "/taiyiAddresses.json")));

// Create output directory if it doesn't exist
vm.createDir(outputDir, true);

string memory output_data = vm.readFile(outputFile);

TaiyiRegistryCoordinator taiyiRegistryCoordinator = TaiyiRegistryCoordinator(
Expand All @@ -86,31 +126,45 @@ contract SetRegistry is Script, Test {
stdJson.readAddress(output_data, ".taiyiAddresses.eigenLayerMiddleware")
);

string memory eigenLayerOutputFile = string(
bytes(
"script/output/devnet/SLASHING_deploy_from_scratch_deployment_data.json"
)
);

string memory eigenLayerOutput_data = vm.readFile(eigenLayerOutputFile);
// address wethStrategyAddr =
// stdJson.readAddress(eigenLayerOutput_data, ".addresses.strategies.WETH");
address allocationManagerAddr =
stdJson.readAddress(eigenLayerOutput_data, ".addresses.allocationManager");
address permissionController =
stdJson.readAddress(eigenLayerOutput_data, ".addresses.permissionController");
// Get network-specific addresses
address allocationManagerAddr;
address permissionControllerAddr;

if (network == Network.DEVNET) {
// Devnet deployment - read from file
string memory eigenLayerOutputFile = string(
bytes(
"script/output/devnet/SLASHING_deploy_from_scratch_deployment_data.json"
)
);

string memory eigenLayerOutput_data = vm.readFile(eigenLayerOutputFile);
allocationManagerAddr =
stdJson.readAddress(eigenLayerOutput_data, ".addresses.allocationManager");
permissionControllerAddr = stdJson.readAddress(
eigenLayerOutput_data, ".addresses.permissionController"
);
} else if (network == Network.HOLESKY) {
// Use hardcoded addresses for Holesky and Hoodi
allocationManagerAddr = 0x78469728304326CBc65f8f95FA756B0B73164462;
permissionControllerAddr = 0x598cb226B591155F767dA17AfE7A2241a68C5C10;
} else if (network == Network.HOODI) {
revert("Hoodi is not supported yet");
} else {
revert("Invalid network");
}

AllocationManager allocationManager = AllocationManager(allocationManagerAddr);
PermissionController controller = PermissionController(permissionController);
PermissionController controller = PermissionController(permissionControllerAddr);

vm.startBroadcast(implPrivateKey);

// Update registry coordinator with new registries
eigenLayerMiddleware.addAdminToPermissionController(
proxyDeployer, permissionController
proxyDeployer, permissionControllerAddr
);
eigenLayerMiddleware.addAdminToPermissionController(
implDeployer, permissionController
implDeployer, permissionControllerAddr
);

vm.stopBroadcast();
Expand All @@ -128,9 +182,12 @@ contract SetRegistry is Script, Test {
allocationManager.setAVSRegistrar(
address(eigenLayerMiddleware), IAVSRegistrar(taiyiRegistryCoordinator)
);
allocationManager.updateAVSMetadataURI(
address(eigenLayerMiddleware), "luban-local-test"
);

// Use the same metadata URI for all networks
string memory metadataURI =
"https://github.com/lu-bann/eigenlayer-metadata-uri/raw/67e76ca2b1c3344ce0a4b43fcff4b5f82b1b046a/metadata.json";

allocationManager.updateAVSMetadataURI(address(eigenLayerMiddleware), metadataURI);
vm.stopBroadcast();
}
}
Loading