diff --git a/contracts/script/DeployGroupMessages.s.sol b/contracts/script/DeployGroupMessages.s.sol index 3c9be6e0..7805bccc 100644 --- a/contracts/script/DeployGroupMessages.s.sol +++ b/contracts/script/DeployGroupMessages.s.sol @@ -18,9 +18,10 @@ contract DeployGroupMessages is Script, Utils, Environment { function run() external { admin = vm.envAddress("XMTP_GROUP_MESSAGES_ADMIN_ADDRESS"); require(admin != address(0), "XMTP_GROUP_MESSAGES_ADMIN_ADDRESS not set"); - require(admin.code.length == 0, "admin address is a contract, not an EOA"); uint256 privateKey = vm.envUint("PRIVATE_KEY"); + require(privateKey != 0, "PRIVATE_KEY not set"); + deployer = vm.addr(privateKey); vm.startBroadcast(privateKey); diff --git a/contracts/script/DeployIdentityUpdates.s.sol b/contracts/script/DeployIdentityUpdates.s.sol index abe9ae5b..da682403 100644 --- a/contracts/script/DeployIdentityUpdates.s.sol +++ b/contracts/script/DeployIdentityUpdates.s.sol @@ -18,9 +18,10 @@ contract DeployIdentityUpdates is Script, Utils, Environment { function run() external { admin = vm.envAddress("XMTP_IDENTITY_UPDATES_ADMIN_ADDRESS"); require(admin != address(0), "XMTP_IDENTITY_UPDATES_ADMIN_ADDRESS not set"); - require(admin.code.length == 0, "admin address is a contract, not an EOA"); uint256 privateKey = vm.envUint("PRIVATE_KEY"); + require(privateKey != 0, "PRIVATE_KEY not set"); + deployer = vm.addr(privateKey); vm.startBroadcast(privateKey); diff --git a/contracts/script/DeployNodeRegistry.s.sol b/contracts/script/DeployNodeRegistryV1.s.sol similarity index 99% rename from contracts/script/DeployNodeRegistry.s.sol rename to contracts/script/DeployNodeRegistryV1.s.sol index fe720e9b..8bd1d49f 100644 --- a/contracts/script/DeployNodeRegistry.s.sol +++ b/contracts/script/DeployNodeRegistryV1.s.sol @@ -12,4 +12,4 @@ contract Deployer is Script { new Nodes(); vm.broadcast(); } -} +} \ No newline at end of file diff --git a/contracts/script/DeployNodeRegistryV2.s.sol b/contracts/script/DeployNodeRegistryV2.s.sol new file mode 100644 index 00000000..94828121 --- /dev/null +++ b/contracts/script/DeployNodeRegistryV2.s.sol @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.28; + +import {Script, console} from "forge-std/src/Script.sol"; +import {Environment} from "./utils/Environment.sol"; +import {Utils} from "./utils/Utils.sol"; +import "src/interfaces/INodes.sol"; +import "src/NodesV2.sol"; + +contract DeployXMTPNodeRegistry is Script, Environment, Utils { + NodesV2 nodes; + + address admin; + address deployer; + + function run() public { + admin = vm.envAddress("XMTP_NODE_REGISTRY_ADMIN_ADDRESS"); + require(admin != address(0), "XMTP_NODE_REGISTRY_ADMIN_ADDRESS not set"); + + uint256 privateKey = vm.envUint("PRIVATE_KEY"); + require(privateKey != 0, "PRIVATE_KEY not set"); + + deployer = vm.addr(privateKey); + vm.startBroadcast(privateKey); + + nodes = new NodesV2(admin); + require(address(nodes) != address(0), "Nodes deployment failed"); + + vm.stopBroadcast(); + + _serializeDeploymentData(); + } + + function _serializeDeploymentData() internal { + string memory parent_object = "parent object"; + string memory addresses = "addresses"; + + string memory addressesOutput; + + addressesOutput = vm.serializeAddress(addresses, "XMTPNodeRegistryDeployer", deployer); + addressesOutput = vm.serializeAddress(addresses, "XMTPNodeRegistryInitialAdmin", admin); + addressesOutput = vm.serializeAddress(addresses, "XMTPNodeRegistry", address(nodes)); + + string memory finalJson; + finalJson = vm.serializeString(parent_object, addresses, addressesOutput); + finalJson = vm.serializeUint(parent_object, "deploymentBlock", block.number); + finalJson = vm.serializeUint(parent_object, "latestUpgradeBlock", block.number); + + writeOutput(finalJson, XMTP_NODE_REGISTRY_OUTPUT_JSON); + } +} diff --git a/contracts/script/utils/Environment.sol b/contracts/script/utils/Environment.sol index 1cc2a346..8abebacc 100644 --- a/contracts/script/utils/Environment.sol +++ b/contracts/script/utils/Environment.sol @@ -6,4 +6,5 @@ import "forge-std/src/Script.sol"; contract Environment is Script { string public constant XMTP_GROUP_MESSAGES_OUTPUT_JSON = "GroupMessages"; string public constant XMTP_IDENTITY_UPDATES_OUTPUT_JSON = "IdentityUpdates"; + string public constant XMTP_NODE_REGISTRY_OUTPUT_JSON = "XMTPNodeRegistry"; }