import hardhat, { ethers } from "hardhat"; import { NodeOperatorRegistry, FuLidoNFT, StFURY, ValidatorFactory, FxStateRootTunnel } from "../typechain"; import { getUpgradeContext } from "./utils"; const checkDeployIntegrity = async () => { const { deployDetails } = getUpgradeContext(hardhat); const nodeOperatorRegistry: NodeOperatorRegistry = (await ethers.getContractAt( "NodeOperatorRegistry", deployDetails.node_operator_registry_proxy) ) as NodeOperatorRegistry; const stFURY: StFURY = (await ethers.getContractAt( "StFURY", deployDetails.stFURY_proxy) ) as StFURY; const poLidoNFT: FuLidoNFT = (await ethers.getContractAt( "FuLidoNFT", deployDetails.lido_nft_proxy) ) as FuLidoNFT; const validatorFactory: ValidatorFactory = (await ethers.getContractAt( "ValidatorFactory", deployDetails.validator_factory_proxy) ) as ValidatorFactory; const fxStateRootTunnel: FxStateRootTunnel = (await ethers.getContractAt( "FxStateRootTunnel", deployDetails.fx_state_root_tunnel) ) as FxStateRootTunnel; console.log("Checking contracts integrity..."); const res = await nodeOperatorRegistry.getContracts(); isValid(res._highburyERC20, deployDetails.fury_erc20_address, "NodeOperatorRegistry", "ERC20"); isValid(res._stFURY, deployDetails.stFURY_proxy, "NodeOperatorRegistry", "StFURY"); isValid(res._stakeManager, deployDetails.fury_stake_manager_proxy, "NodeOperatorRegistry", "StakeManager"); isValid(res._validatorFactory, deployDetails.validator_factory_proxy, "NodeOperatorRegistry", "validatorFactory"); isValid(await validatorFactory.operatorRegistry(), deployDetails.node_operator_registry_proxy, "ValidatorFactory", "nodeOperatorRegistry"); isValid(await validatorFactory.validatorImplementation(), deployDetails.validator_implementation, "ValidatorFactory", "validator"); isValid(await poLidoNFT.stFURY(), deployDetails.stFURY_proxy, "FuLidoNFT", "stFURY"); isValid(await fxStateRootTunnel.stFURY(), deployDetails.stFURY_proxy, "fxStateRootTunnel", "stFURY"); isValid(await fxStateRootTunnel.fxChildTunnel(), deployDetails.fx_state_child_tunnel, "fxStateRootTunnel", "fx_state_child_tunnel"); isValid(await stFURY.nodeOperatorRegistry(), deployDetails.node_operator_registry_proxy, "stFURY", "nodeOperatorRegistry"); isValid(await stFURY.token(), deployDetails.fury_erc20_address, "stFURY", "fury_erc20_address"); isValid(await stFURY.dao(), deployDetails.dao, "stFURY", "dao"); isValid(await stFURY.insurance(), deployDetails.treasury, "stFURY", "treasury"); isValid(await stFURY.stakeManager(), deployDetails.fury_stake_manager_proxy, "stFURY", "fury_stake_manager_proxy"); isValid(await stFURY.poLidoNFT(), deployDetails.lido_nft_proxy, "stFURY", "lido_nft_proxy"); isValid(await stFURY.fxStateRootTunnel(), deployDetails.fx_state_root_tunnel, "stFURY", "fx_state_root_tunnel"); console.log("All is Good :)"); }; const isValid = (actual: string, target: string, contract: string, message: string) => { if (actual.toLowerCase() !== target.toLowerCase()) { console.log("actual:", actual); console.log("target:", target); throw new Error(`Error: ${contract}--Invalid address--${message}`); } }; checkDeployIntegrity();