diff --git a/src/script/DeployRevSharesUpgrader.s.sol b/src/script/DeployRevSharesUpgrader.s.sol index fa8bffc3f..7ea1c4da8 100644 --- a/src/script/DeployRevSharesUpgrader.s.sol +++ b/src/script/DeployRevSharesUpgrader.s.sol @@ -6,7 +6,8 @@ import {console} from "forge-std/console.sol"; import {RevShareContractsUpgrader} from "src/RevShareContractsUpgrader.sol"; /// @notice Deploys the RevShareContractsUpgrader contract. -/// @dev Deployed at https://sepolia.etherscan.io/address/0x9C524DcEa18587e24976A82f05c2065e14DB7B3A +/// @dev Uses CREATE2 for deterministic deployment. If already deployed, returns existing address. +/// @dev Deployed at https://sepolia.etherscan.io/address/0x343312031f639B9e68D7E01535E4c5FAD9c76D42 /// @dev Usage: /// forge script src/script/DeployRevSharesUpgrader.s.sol:DeployRevSharesUpgrader \ /// --rpc-url https://ethereum-sepolia.rpc.subquery.network/public \ @@ -15,15 +16,27 @@ import {RevShareContractsUpgrader} from "src/RevShareContractsUpgrader.sol"; /// --verifier-url 'https://api.etherscan.io/v2/api?chainid=11155111&apikey={$API_KEY}' /// @dev The libraries were verified from the etherscan's UI as single file using `forge flatten` contract DeployRevSharesUpgrader is Script { - /// @notice Deploys the RevShareContractsUpgrader contract + /// @notice Salt used for deterministic deployment + bytes32 internal constant SALT = keccak256("RevShareContractsUpgrader"); + + /// @notice Deploys the RevShareContractsUpgrader contract deterministically using CREATE2 /// @return upgrader The deployed RevShareContractsUpgrader contract function run() public returns (RevShareContractsUpgrader upgrader) { - vm.startBroadcast(); + // Compute the deterministic address + bytes32 initCodeHash = keccak256(type(RevShareContractsUpgrader).creationCode); + address upgraderAddr = vm.computeCreate2Address(SALT, initCodeHash); - // Deploy the RevShareContractsUpgrader - upgrader = new RevShareContractsUpgrader(); + // Check if already deployed (idempotency check) + if (upgraderAddr.code.length > 0) { + console.log("---"); + console.log("RevShareContractsUpgrader already deployed at:", upgraderAddr); + console.log("---"); + return RevShareContractsUpgrader(upgraderAddr); + } - vm.stopBroadcast(); + // Deploy using CREATE2 + vm.broadcast(); + upgrader = new RevShareContractsUpgrader{salt: SALT}(); // Log the deployed address console.log("---");