From aee42215ef57cde57f91c6f01104d948b056cddd Mon Sep 17 00:00:00 2001 From: TuDo1403 Date: Mon, 18 Dec 2023 16:25:16 +0700 Subject: [PATCH 1/3] forge install: foundry-deployment-kit 3c183cd01cff1fcdb199612d5506762c708dadfa --- lib/foundry-deployment-kit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/foundry-deployment-kit b/lib/foundry-deployment-kit index 6e09174f..3c183cd0 160000 --- a/lib/foundry-deployment-kit +++ b/lib/foundry-deployment-kit @@ -1 +1 @@ -Subproject commit 6e09174fc651780ec1225b37d614a0297bd7de30 +Subproject commit 3c183cd01cff1fcdb199612d5506762c708dadfa From 4154dcd8d9d03f0eb44be5964fe95e25f35c1196 Mon Sep 17 00:00:00 2001 From: TuDo1403 Date: Mon, 18 Dec 2023 16:54:11 +0700 Subject: [PATCH 2/3] forge install: contract-libs f177e3b4a498ec15ca1ca58d1a514f8b54c3f95a --- .gitmodules | 3 +++ lib/contract-libs | 1 + 2 files changed, 4 insertions(+) create mode 160000 lib/contract-libs diff --git a/.gitmodules b/.gitmodules index 979511db..c9a4b0a3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -22,3 +22,6 @@ [submodule "lib/foundry-deployment-kit"] path = lib/foundry-deployment-kit url = https://github.com/axieinfinity/foundry-deployment-kit +[submodule "lib/contract-libs"] + path = lib/contract-libs + url = https://github.com/axieinfinity/contract-libs diff --git a/lib/contract-libs b/lib/contract-libs new file mode 160000 index 00000000..f177e3b4 --- /dev/null +++ b/lib/contract-libs @@ -0,0 +1 @@ +Subproject commit f177e3b4a498ec15ca1ca58d1a514f8b54c3f95a From 40d7d4a21d62920213fa4d6df9326b68f6409f20 Mon Sep 17 00:00:00 2001 From: TuDo1403 Date: Mon, 18 Dec 2023 17:37:14 +0700 Subject: [PATCH 3/3] feat: migrate all migrations script to new foundry-deployment-kit version --- debug.sh | 40 +----- script/20231015-deploy/20231015_Deploy.s.sol | 45 ++++--- .../20231020_RNSUpgrade.s.sol | 10 +- ...0231021_UpgradeDomainPriceAndAuction.s.sol | 12 +- .../20231024_UpgradeAuction.s.sol | 10 +- .../20231024_Config.s.sol | 23 ++-- .../20231024_UpgradeDomainPrice.s.sol | 20 +-- .../20231024_UpgradeRNSUnified.s.sol | 10 +- .../20231025_UpgradeController.s.sol | 10 +- .../20231106_RevertRenewalFees.s.sol | 14 +- .../20231106_SubmitReservedNames.s.sol | 35 +++-- .../20231106_TransferOwnership.s.sol | 36 +++--- .../20231106_Deploy.s.sol | 46 ++++--- .../20231114_DeployNameCheckerLogic.s.sol | 17 ++- .../2021115_MigrateInvalidAuctionNames.s.sol | 14 +- ...123_UpgradeAuctionClaimUnbiddedNames.s.sol | 14 +- .../20231124_DeployRNSOperation.s.sol | 16 ++- .../20231205_MainnetConfig.s.sol | 18 ++- ...gradeRNSAuctionAndDeployRNSOperation.s.sol | 44 ++++--- script/Debug.s.sol | 18 --- script/GeneralConfig.sol | 25 ++++ script/Migration.s.sol | 96 ++++++++++++++ script/RNSDeploy.s.sol | 122 ------------------ script/contracts/NameCheckerDeploy.s.sol | 14 +- script/contracts/OwnedMulticallerDeploy.s.sol | 12 +- script/contracts/PublicResolverDeploy.s.sol | 18 +-- script/contracts/RNSAuctionDeploy.s.sol | 24 ++-- script/contracts/RNSDomainPriceDeploy.s.sol | 32 ++--- script/contracts/RNSOperationDeploy.s.sol | 18 +-- .../contracts/RNSReverseRegistrarDeploy.s.sol | 18 +-- script/contracts/RNSUnifiedDeploy.s.sol | 14 +- .../RONRegistrarControllerDeploy.s.sol | 42 +++--- script/interfaces/ISharedArgument.sol | 37 ++++++ script/utils/Contract.sol | 36 ++++++ test/RNSUnified/RNSUnified.t.sol | 8 +- upload-sig.sh | 12 +- 36 files changed, 512 insertions(+), 468 deletions(-) delete mode 100644 script/Debug.s.sol create mode 100644 script/GeneralConfig.sol create mode 100644 script/Migration.s.sol delete mode 100644 script/RNSDeploy.s.sol create mode 100644 script/interfaces/ISharedArgument.sol create mode 100644 script/utils/Contract.sol diff --git a/debug.sh b/debug.sh index 61ff1ba0..fb3f8f8e 100755 --- a/debug.sh +++ b/debug.sh @@ -1,39 +1 @@ -# Source (or "dot") the .env file to load environment variables -if [ -f .env ]; then - source .debug.env -else - echo "Error: .debug.env file not found." -fi - -verify_arg="" -extra_argument="" -op_command="" - -for arg in "$@"; do - case $arg in - --trezor) - op_command="" - extra_argument+=trezor@ - ;; - --broadcast) - op_command="op run --env-file="./.env" --" - ;; - --log) - set -- "${@/#--log/}" - extra_argument+=log@ - ;; - *) ;; - esac -done - -# Remove the @ character from the end of extra_argument -extra_argument="${extra_argument%%@}" - -echo Debug Tx... -echo From: ${FROM} -echo To: ${TO} -echo Value: ${VALUE} -echo Calldata: -cast pretty-calldata ${CALLDATA} -calldata=$(cast calldata 'debug(uint256,address,address,uint256,bytes)' ${BLOCK} ${FROM} ${TO} ${VALUE} ${CALLDATA}) -${op_command} forge script ${verify_arg} --legacy ${@} script/Debug.s.sol --sig 'run(bytes,string)' ${calldata} "${extra_argument}" +source lib/foundry-deployment-kit/debug.sh \ No newline at end of file diff --git a/script/20231015-deploy/20231015_Deploy.s.sol b/script/20231015-deploy/20231015_Deploy.s.sol index ec2307e9..f28cfb6c 100644 --- a/script/20231015-deploy/20231015_Deploy.s.sol +++ b/script/20231015-deploy/20231015_Deploy.s.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { console2 } from "forge-std/console2.sol"; +import { console2 as console } from "forge-std/console2.sol"; import { StdStyle } from "forge-std/StdStyle.sol"; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; import { LibRNSDomain } from "@rns-contracts/libraries/LibRNSDomain.sol"; -import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; +import { Contract } from "script/utils/Contract.sol"; import { RONRegistrarController, RONRegistrarControllerDeploy } from "script/contracts/RONRegistrarControllerDeploy.s.sol"; @@ -16,9 +16,10 @@ import { NameChecker, NameCheckerDeploy } from "script/contracts/NameCheckerDepl import { RNSDomainPrice, RNSDomainPriceDeploy } from "script/contracts/RNSDomainPriceDeploy.s.sol"; import { PublicResolver, PublicResolverDeploy } from "script/contracts/PublicResolverDeploy.s.sol"; import { RNSReverseRegistrar, RNSReverseRegistrarDeploy } from "script/contracts/RNSReverseRegistrarDeploy.s.sol"; -import { INSDomainPrice, RNSDeploy } from "../RNSDeploy.s.sol"; +import { DefaultNetwork, Migration } from "../Migration.s.sol"; +import { INSDomainPrice } from "script/interfaces/ISharedArgument.sol"; -contract Migration__20231015_Deploy is RNSDeploy { +contract Migration__20231015_Deploy is Migration { using Strings for *; using LibRNSDomain for string; @@ -32,7 +33,7 @@ contract Migration__20231015_Deploy is RNSDeploy { string[] internal _blacklistedWords; - function run() public trySetUp { + function run() public onlyOn(DefaultNetwork.RoninTestnet.key()) { _rns = new RNSUnifiedDeploy().run(); _auction = new RNSAuctionDeploy().run(); _nameChecker = new NameCheckerDeploy().run(); @@ -48,7 +49,6 @@ contract Migration__20231015_Deploy is RNSDeploy { } uint256[] memory packedWords = _nameChecker.packBulk(_blacklistedWords); - vm.resumeGasMetering(); vm.startBroadcast(admin); _rns.grantRole(_rns.CONTROLLER_ROLE(), address(_auction)); @@ -67,7 +67,6 @@ contract Migration__20231015_Deploy is RNSDeploy { _nameChecker.setForbiddenWords({ packedWords: packedWords, shouldForbid: true }); vm.stopBroadcast(); - vm.pauseGasMetering(); _validateAuction(); _validateController(); @@ -76,7 +75,7 @@ contract Migration__20231015_Deploy is RNSDeploy { _validateNameChecker(); _validateRNSUnified(ronId, addrReverseId); - console2.log(StdStyle.green(unicode"✅ All checks are passed")); + console.log(StdStyle.green(unicode"✅ All checks are passed")); } function _validateController() internal logFn("_validateController") { @@ -90,7 +89,7 @@ contract Migration__20231015_Deploy is RNSDeploy { _ronController.computeCommitment(domain, user.addr, duration, secret, address(_publicResolver), data, true); (, uint256 ronPrice) = _ronController.rentPrice(domain, duration); - console2.log("domain price:", ronPrice); + console.log("domain price:", ronPrice); vm.deal(user.addr, ronPrice); vm.startPrank(user.addr); @@ -103,7 +102,7 @@ contract Migration__20231015_Deploy is RNSDeploy { uint256 expectedId = uint256(string.concat(domain, ".ron").namehash()); assertEq(_rns.ownerOf(expectedId), user.addr); - console2.log(unicode"✅ Controller checks are passed"); + console.log(unicode"✅ Controller checks are passed"); } function _validateRNSUnified(uint256 ronId, uint256 addrReverseId) internal logFn("validateRNSUnified") { @@ -113,7 +112,7 @@ contract Migration__20231015_Deploy is RNSDeploy { assertTrue(_rns.hasRole(_rns.RESERVATION_ROLE(), address(_auction)), "grant reservation role failed"); assertEq(address(_ronController.getPriceOracle()), address(_domainPrice), "set price oracle failed"); - console2.log(unicode"✅ RNSUnified checks are passed"); + console.log(unicode"✅ RNSUnified checks are passed"); } function _validateReverseRegistrar() internal logFn("validateReverseRegistrar") { @@ -146,7 +145,7 @@ contract Migration__20231015_Deploy is RNSDeploy { assertTrue(_auction.reserved(id), "invalid bulkRegister"); assertEq(_rns.getRecord(id).mut.expiry, _rns.MAX_EXPIRY(), "invalid expiry time"); - console2.log(unicode"✅ Auction checks are passed"); + console.log(unicode"✅ Auction checks are passed"); } function _validateDomainPrice() internal logFn("validateDomainPrice") { @@ -191,12 +190,12 @@ contract Migration__20231015_Deploy is RNSDeploy { vm.stopPrank(); - console2.log("Tax Raio:", _domainPrice.getTaxRatio()); - console2.log("Converting 1 USD (18 decimals) to RON:", _domainPrice.convertUSDToRON(1e18)); - console2.log("Converting 1 RON to USD (18 decimals):", _domainPrice.convertRONToUSD(1 ether)); - console2.log("Converting 1m USD (18 decimals) to RON:", _domainPrice.convertUSDToRON(1e18 * 1e6)); - console2.log("Converting 1m RON to USD (18 decimals):", _domainPrice.convertRONToUSD(1 ether * 1e6)); - console2.log(unicode"✅ Domain price checks are passed"); + console.log("Tax Raio:", _domainPrice.getTaxRatio()); + console.log("Converting 1 USD (18 decimals) to RON:", _domainPrice.convertUSDToRON(1e18)); + console.log("Converting 1 RON to USD (18 decimals):", _domainPrice.convertRONToUSD(1 ether)); + console.log("Converting 1m USD (18 decimals) to RON:", _domainPrice.convertUSDToRON(1e18 * 1e6)); + console.log("Converting 1m RON to USD (18 decimals):", _domainPrice.convertRONToUSD(1 ether * 1e6)); + console.log(unicode"✅ Domain price checks are passed"); } function _validateNameChecker() internal logFn("validateNameChecker") { @@ -208,9 +207,9 @@ contract Migration__20231015_Deploy is RNSDeploy { uint256 expectedMax; uint256 expectedMin = type(uint256).max; - console2.log(StdStyle.blue("Blacklisted words count"), blacklistedWords.length); - console2.log(StdStyle.blue("Word"), "RONRegistrarController::valid()", "NameChecker::forbidden()"); - console2.log(StdStyle.blue("Word Range"), string.concat("min: ", min.toString(), " ", "max: ", max.toString())); + console.log(StdStyle.blue("Blacklisted words count"), blacklistedWords.length); + console.log(StdStyle.blue("Word"), "RONRegistrarController::valid()", "NameChecker::forbidden()"); + console.log(StdStyle.blue("Word Range"), string.concat("min: ", min.toString(), " ", "max: ", max.toString())); for (uint256 i; i < blacklistedWords.length;) { word = blacklistedWords[i]; @@ -220,7 +219,7 @@ contract Migration__20231015_Deploy is RNSDeploy { forbidden = _nameChecker.forbidden(word); if (i % 50 == 0) { - console2.log(StdStyle.blue(word), valid ? unicode"✅" : unicode"❌", forbidden ? unicode"✅" : unicode"❌"); + console.log(StdStyle.blue(word), valid ? unicode"✅" : unicode"❌", forbidden ? unicode"✅" : unicode"❌"); } assertTrue(!valid); @@ -234,6 +233,6 @@ contract Migration__20231015_Deploy is RNSDeploy { assertEq(min, expectedMin); assertEq(max, expectedMax); - console2.log(unicode"✅ NameChecker checks are passed"); + console.log(unicode"✅ NameChecker checks are passed"); } } diff --git a/script/20231020-rns-upgrade/20231020_RNSUpgrade.s.sol b/script/20231020-rns-upgrade/20231020_RNSUpgrade.s.sol index 88041b89..dfc2cf95 100644 --- a/script/20231020-rns-upgrade/20231020_RNSUpgrade.s.sol +++ b/script/20231020-rns-upgrade/20231020_RNSUpgrade.s.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; -import { RNSDeploy } from "script/RNSDeploy.s.sol"; +import { Contract } from "script/utils/Contract.sol"; +import { Migration } from "script/Migration.s.sol"; -contract Migration__20231020_RNSUpgrade is RNSDeploy { - function run() public trySetUp { - _upgradeProxy(ContractKey.RNSUnified, EMPTY_ARGS); +contract Migration__20231020_RNSUpgrade is Migration { + function run() public { + _upgradeProxy(Contract.RNSUnified.key()); } } diff --git a/script/20231021-upgrade-domain-price-and-auction/20231021_UpgradeDomainPriceAndAuction.s.sol b/script/20231021-upgrade-domain-price-and-auction/20231021_UpgradeDomainPriceAndAuction.s.sol index ca410c29..76e0382c 100644 --- a/script/20231021-upgrade-domain-price-and-auction/20231021_UpgradeDomainPriceAndAuction.s.sol +++ b/script/20231021-upgrade-domain-price-and-auction/20231021_UpgradeDomainPriceAndAuction.s.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; -import { RNSDeploy } from "script/RNSDeploy.s.sol"; +import { Contract } from "script/utils/Contract.sol"; +import { Migration } from "script/Migration.s.sol"; -contract Migration__20231021_UpgradeDomainPriceAndAuction is RNSDeploy { - function run() public trySetUp { - _upgradeProxy(ContractKey.RNSAuction, EMPTY_ARGS); - _upgradeProxy(ContractKey.RNSDomainPrice, EMPTY_ARGS); +contract Migration__20231021_UpgradeDomainPriceAndAuction is Migration { + function run() public { + _upgradeProxy(Contract.RNSAuction.key()); + _upgradeProxy(Contract.RNSDomainPrice.key()); } } diff --git a/script/20231024-upgrade-auction/20231024_UpgradeAuction.s.sol b/script/20231024-upgrade-auction/20231024_UpgradeAuction.s.sol index ec80d3ea..be3c1427 100644 --- a/script/20231024-upgrade-auction/20231024_UpgradeAuction.s.sol +++ b/script/20231024-upgrade-auction/20231024_UpgradeAuction.s.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; -import { RNSDeploy } from "script/RNSDeploy.s.sol"; +import { Contract } from "script/utils/Contract.sol"; +import { Migration } from "script/Migration.s.sol"; -contract Migration__20231024_UpgradeAuction is RNSDeploy { - function run() public trySetUp { - _upgradeProxy(ContractKey.RNSAuction, EMPTY_ARGS); +contract Migration__20231024_UpgradeAuction is Migration { + function run() public { + _upgradeProxy(Contract.RNSAuction.key()); } } diff --git a/script/20231024-upgrade-domain-price/20231024_Config.s.sol b/script/20231024-upgrade-domain-price/20231024_Config.s.sol index 51ef33f6..4f53b1f0 100644 --- a/script/20231024-upgrade-domain-price/20231024_Config.s.sol +++ b/script/20231024-upgrade-domain-price/20231024_Config.s.sol @@ -1,17 +1,22 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { Network, RNSDeploy } from "script/RNSDeploy.s.sol"; +import { ISharedArgument, DefaultNetwork, Migration } from "script/Migration.s.sol"; -abstract contract Config__20231024 is RNSDeploy { - function _buildMigrationConfig() internal view virtual override returns (Config memory config) { - config = super._buildMigrationConfig(); - if (_network == Network.RoninTestnet) { - config.overrider = config.operator; - } else if (_network == Network.RoninMainnet) { - revert("Missing config"); +abstract contract Config__20231024 is Migration { + function _sharedArguments() internal view virtual override returns (bytes memory rawArgs) { + rawArgs = super._sharedArguments(); + + ISharedArgument.SharedParameter memory param = abi.decode(rawArgs, (ISharedArgument.SharedParameter)); + + if (network() == DefaultNetwork.RoninTestnet.key()) { + param.overrider = param.operator; + } else if (network() == DefaultNetwork.RoninMainnet.key()) { + revert("Missing param"); } else { - revert("Missing config"); + revert("Missing param"); } + + rawArgs = abi.encode(param); } } diff --git a/script/20231024-upgrade-domain-price/20231024_UpgradeDomainPrice.s.sol b/script/20231024-upgrade-domain-price/20231024_UpgradeDomainPrice.s.sol index 030a984e..e8076204 100644 --- a/script/20231024-upgrade-domain-price/20231024_UpgradeDomainPrice.s.sol +++ b/script/20231024-upgrade-domain-price/20231024_UpgradeDomainPrice.s.sol @@ -1,23 +1,23 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { console2 } from "forge-std/console2.sol"; -import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; +import { console2 as console } from "forge-std/console2.sol"; +import { Contract } from "script/utils/Contract.sol"; import { RNSDomainPrice } from "@rns-contracts/RNSDomainPrice.sol"; -import { Config__20231024 } from "./20231024_Config.s.sol"; +import { ISharedArgument, Config__20231024 } from "./20231024_Config.s.sol"; contract Migration__20231024_UpgradeDomainPrice is Config__20231024 { - function run() public trySetUp { - Config memory config = getConfig(); - _upgradeProxy(ContractKey.RNSDomainPrice, EMPTY_ARGS); + function run() public { + ISharedArgument.SharedParameter memory param = config.sharedArguments(); + _upgradeProxy(Contract.RNSDomainPrice.key()); - console2.log("operator", config.operator); - console2.log("overrider", config.overrider); + console.log("operator", param.operator); + console.log("overrider", param.overrider); - RNSDomainPrice domainPrice = RNSDomainPrice(_config.getAddressFromCurrentNetwork(ContractKey.RNSDomainPrice)); + RNSDomainPrice domainPrice = RNSDomainPrice(config.getAddressFromCurrentNetwork(Contract.RNSDomainPrice.key())); address admin = domainPrice.getRoleMember(0x00, 0); bytes32 overriderRole = domainPrice.OVERRIDER_ROLE(); vm.broadcast(admin); - domainPrice.grantRole(overriderRole, config.overrider); + domainPrice.grantRole(overriderRole, param.overrider); } } diff --git a/script/20231024-upgrade-rns-unified/20231024_UpgradeRNSUnified.s.sol b/script/20231024-upgrade-rns-unified/20231024_UpgradeRNSUnified.s.sol index 2f467a8a..581a11b1 100644 --- a/script/20231024-upgrade-rns-unified/20231024_UpgradeRNSUnified.s.sol +++ b/script/20231024-upgrade-rns-unified/20231024_UpgradeRNSUnified.s.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; -import { RNSDeploy } from "script/RNSDeploy.s.sol"; +import { Contract } from "script/utils/Contract.sol"; +import { Migration } from "script/Migration.s.sol"; -contract Migration__20231024_UpgradeRNSUnified is RNSDeploy { - function run() public trySetUp { - _upgradeProxy(ContractKey.RNSUnified, EMPTY_ARGS); +contract Migration__20231024_UpgradeRNSUnified is Migration { + function run() public { + _upgradeProxy(Contract.RNSUnified.key()); } } diff --git a/script/20231025-upgrade-controller/20231025_UpgradeController.s.sol b/script/20231025-upgrade-controller/20231025_UpgradeController.s.sol index e04f5ef5..5bb90197 100644 --- a/script/20231025-upgrade-controller/20231025_UpgradeController.s.sol +++ b/script/20231025-upgrade-controller/20231025_UpgradeController.s.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; -import { RNSDeploy } from "script/RNSDeploy.s.sol"; +import { Contract } from "script/utils/Contract.sol"; +import { Migration } from "script/Migration.s.sol"; -contract Migration__20231025_UpgradeController is RNSDeploy { - function run() public trySetUp { - _upgradeProxy(ContractKey.RONRegistrarController, EMPTY_ARGS); +contract Migration__20231025_UpgradeController is Migration { + function run() public { + _upgradeProxy(Contract.RONRegistrarController.key()); } } diff --git a/script/20231106-config-prelaunch/20231106_RevertRenewalFees.s.sol b/script/20231106-config-prelaunch/20231106_RevertRenewalFees.s.sol index e0fa16e1..902e672d 100644 --- a/script/20231106-config-prelaunch/20231106_RevertRenewalFees.s.sol +++ b/script/20231106-config-prelaunch/20231106_RevertRenewalFees.s.sol @@ -1,18 +1,16 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; -import { RNSDeploy } from "script/RNSDeploy.s.sol"; +import { Contract } from "script/utils/Contract.sol"; +import { ISharedArgument, Migration } from "script/Migration.s.sol"; import { RNSDomainPrice } from "@rns-contracts/RNSDomainPrice.sol"; -contract Migration__20231106_RevertRenewalFees is RNSDeploy { +contract Migration__20231106_RevertRenewalFees is Migration { function run() public { - RNSDomainPrice domainPrice = RNSDomainPrice(_config.getAddressFromCurrentNetwork(ContractKey.RNSDomainPrice)); + RNSDomainPrice domainPrice = RNSDomainPrice(config.getAddressFromCurrentNetwork(Contract.RNSDomainPrice.key())); - Config memory config = getConfig(); + ISharedArgument.SharedParameter memory param = config.sharedArguments(); vm.broadcast(domainPrice.getRoleMember(domainPrice.DEFAULT_ADMIN_ROLE(), 0)); - vm.resumeGasMetering(); - domainPrice.setRenewalFeeByLengths(config.renewalFees); - vm.pauseGasMetering(); + domainPrice.setRenewalFeeByLengths(param.renewalFees); } } diff --git a/script/20231106-config-prelaunch/20231106_SubmitReservedNames.s.sol b/script/20231106-config-prelaunch/20231106_SubmitReservedNames.s.sol index 818e76f1..90155f51 100644 --- a/script/20231106-config-prelaunch/20231106_SubmitReservedNames.s.sol +++ b/script/20231106-config-prelaunch/20231106_SubmitReservedNames.s.sol @@ -1,34 +1,33 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { console2 } from "forge-std/console2.sol"; -import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; +import { console2 as console } from "forge-std/console2.sol"; +import { Contract } from "script/utils/Contract.sol"; import { JSONParserLib } from "solady/utils/JSONParserLib.sol"; -import { RNSDeploy } from "script/RNSDeploy.s.sol"; +import { Migration } from "script/Migration.s.sol"; import { LibRNSDomain, RNSUnified } from "@rns-contracts/RNSUnified.sol"; import { OwnedMulticaller, OwnedMulticallerDeploy } from "script/contracts/OwnedMulticallerDeploy.s.sol"; -contract Migration__20231106_SubmitReservedNames is RNSDeploy { +contract Migration__20231106_SubmitReservedNames is Migration { using JSONParserLib for *; - function run() public trySetUp { + function run() public { // default duration is 1 year uint64 duration = uint64(365 days); - RNSUnified rns = RNSUnified(_config.getAddressFromCurrentNetwork(ContractKey.RNSUnified)); - address resolver = _config.getAddressFromCurrentNetwork(ContractKey.PublicResolver); - OwnedMulticaller multicall = OwnedMulticaller(_config.getAddressFromCurrentNetwork(ContractKey.OwnedMulticaller)); + RNSUnified rns = RNSUnified(config.getAddressFromCurrentNetwork(Contract.RNSUnified.key())); + address resolver = config.getAddressFromCurrentNetwork(Contract.PublicResolver.key()); + OwnedMulticaller multicall = OwnedMulticaller(config.getAddressFromCurrentNetwork(Contract.OwnedMulticaller.key())); - console2.log(_config.getAddressFromCurrentNetwork(ContractKey.OwnedMulticaller)); + console.log(config.getAddressFromCurrentNetwork(Contract.OwnedMulticaller.key())); // vm.broadcast(rns.ownerOf(LibRNSDomain.RON_ID)); - // vm.resumeGasMetering(); + // // rns.setApprovalForAll(address(multicall), true); - // vm.pauseGasMetering(); - + // address[] memory tos; string[] memory labels; - (tos, labels) = _parseData("./script/20231106-config-prelaunch/data/finalReservedNames.json"); + (tos, labels) = _parseData("./script/20231106-param-prelaunch/data/finalReservedNames.json"); mintBatch(multicall, duration, rns, resolver, tos, labels); } @@ -40,17 +39,15 @@ contract Migration__20231106_SubmitReservedNames is RNSDeploy { address[] memory tos, string[] memory labels ) public { - vm.broadcast(_config.getSender()); - vm.resumeGasMetering(); + vm.broadcast(config.getSender()); multicall.multiMint(rns, LibRNSDomain.RON_ID, resolver, duration, tos, labels); - vm.pauseGasMetering(); } function _parseData(string memory path) internal view returns (address[] memory tos, string[] memory labels) { string memory raw = vm.readFile(path); JSONParserLib.Item memory reservedNames = raw.parse().at('"reservedNames"'); uint256 length = reservedNames.size(); - console2.log("length", length); + console.log("length", length); tos = new address[](length); labels = new string[](length); @@ -59,8 +56,8 @@ contract Migration__20231106_SubmitReservedNames is RNSDeploy { tos[i] = vm.parseAddress(reservedNames.at(i).at('"address"').value().decodeString()); labels[i] = reservedNames.at(i).at('"label"').value().decodeString(); - console2.log("tos:", i, tos[i]); - console2.log("labels:", i, labels[i]); + console.log("tos:", i, tos[i]); + console.log("labels:", i, labels[i]); } } } diff --git a/script/20231106-config-prelaunch/20231106_TransferOwnership.s.sol b/script/20231106-config-prelaunch/20231106_TransferOwnership.s.sol index d6341d03..9e8c5d19 100644 --- a/script/20231106-config-prelaunch/20231106_TransferOwnership.s.sol +++ b/script/20231106-config-prelaunch/20231106_TransferOwnership.s.sol @@ -1,33 +1,33 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; -import { console2 } from "forge-std/console2.sol"; -import { RNSDeploy } from "script/RNSDeploy.s.sol"; +import { Contract } from "script/utils/Contract.sol"; +import { console2 as console } from "forge-std/console2.sol"; +import { Migration } from "script/Migration.s.sol"; import { RNSUnified } from "@rns-contracts/RNSUnified.sol"; import { OwnedMulticallerDeploy } from "script/contracts/OwnedMulticallerDeploy.s.sol"; import { OwnedMulticaller } from "@rns-contracts/utils/OwnedMulticaller.sol"; import { LibRNSDomain } from "@rns-contracts/libraries/LibRNSDomain.sol"; -contract Migration__20231106_TransferOwnership is RNSDeploy { +contract Migration__20231106_TransferOwnership is Migration { function _injectDependencies() internal virtual override { - _setDependencyDeployScript(ContractKey.OwnedMulticaller, new OwnedMulticallerDeploy()); + _setDependencyDeployScript(Contract.OwnedMulticaller.key(), new OwnedMulticallerDeploy()); } - function run() public trySetUp { + function run() public { // fill in original owner - address originalOwner = _config.getSender(); + address originalOwner = config.getSender(); - RNSUnified rns = RNSUnified(_config.getAddressFromCurrentNetwork(ContractKey.RNSUnified)); - OwnedMulticaller multicall = OwnedMulticaller(loadContractOrDeploy(ContractKey.OwnedMulticaller)); - address auction = _config.getAddressFromCurrentNetwork(ContractKey.RNSAuction); - address ronController = _config.getAddressFromCurrentNetwork(ContractKey.RONRegistrarController); - address reverseRegistrar = _config.getAddressFromCurrentNetwork(ContractKey.RNSReverseRegistrar); + RNSUnified rns = RNSUnified(config.getAddressFromCurrentNetwork(Contract.RNSUnified.key())); + OwnedMulticaller multicall = OwnedMulticaller(loadContractOrDeploy(Contract.OwnedMulticaller.key())); + address auction = config.getAddressFromCurrentNetwork(Contract.RNSAuction.key()); + address ronController = config.getAddressFromCurrentNetwork(Contract.RONRegistrarController.key()); + address reverseRegistrar = config.getAddressFromCurrentNetwork(Contract.RNSReverseRegistrar.key()); uint256 reverseId = uint256(LibRNSDomain.namehash("reverse")); - console2.log("reverseId", reverseId); + console.log("reverseId", reverseId); uint256 addrReverseId = uint256(LibRNSDomain.namehash("addr.reverse")); - console2.log("reverse.addr id", addrReverseId); + console.log("reverse.addr id", addrReverseId); address currentOwner = rns.ownerOf(LibRNSDomain.RON_ID); assertEq(currentOwner, rns.ownerOf(reverseId), "currentOwner != rns.ownerOf(reverseId)"); @@ -36,9 +36,7 @@ contract Migration__20231106_TransferOwnership is RNSDeploy { if (!rns.isApprovedForAll(currentOwner, address(multicall))) { // approve for owned-multicall contract vm.broadcast(currentOwner); - vm.resumeGasMetering(); rns.setApprovalForAll(address(multicall), true); - vm.pauseGasMetering(); } uint256[] memory values = new uint256[](3); @@ -53,17 +51,15 @@ contract Migration__20231106_TransferOwnership is RNSDeploy { callDatas[2] = abi.encodeCall(rns.transferFrom, (currentOwner, originalOwner, LibRNSDomain.RON_ID)); vm.broadcast(multicall.owner()); - vm.resumeGasMetering(); multicall.multicall(targets, callDatas, values); - vm.pauseGasMetering(); vm.startBroadcast(originalOwner); - vm.resumeGasMetering(); + rns.setApprovalForAll(address(auction), true); rns.setApprovalForAll(address(ronController), true); rns.approve(address(reverseRegistrar), addrReverseId); + vm.stopBroadcast(); - vm.pauseGasMetering(); assertTrue( rns.isApprovedForAll(originalOwner, address(auction)), "!rns.isApprovedForAll(originalOwner, address(auction))" diff --git a/script/20231106-deploy-mainnet/20231106_Deploy.s.sol b/script/20231106-deploy-mainnet/20231106_Deploy.s.sol index 8267aff5..7c7d2210 100644 --- a/script/20231106-deploy-mainnet/20231106_Deploy.s.sol +++ b/script/20231106-deploy-mainnet/20231106_Deploy.s.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { console2 } from "forge-std/console2.sol"; +import { console2 as console } from "forge-std/console2.sol"; import { StdStyle } from "forge-std/StdStyle.sol"; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; import { LibRNSDomain } from "@rns-contracts/libraries/LibRNSDomain.sol"; -import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; +import { Contract } from "script/utils/Contract.sol"; import { RONRegistrarController, RONRegistrarControllerDeploy } from "script/contracts/RONRegistrarControllerDeploy.s.sol"; @@ -16,9 +16,10 @@ import { NameChecker, NameCheckerDeploy } from "script/contracts/NameCheckerDepl import { RNSDomainPrice, RNSDomainPriceDeploy } from "script/contracts/RNSDomainPriceDeploy.s.sol"; import { PublicResolver, PublicResolverDeploy } from "script/contracts/PublicResolverDeploy.s.sol"; import { RNSReverseRegistrar, RNSReverseRegistrarDeploy } from "script/contracts/RNSReverseRegistrarDeploy.s.sol"; -import { INSDomainPrice, RNSDeploy } from "../RNSDeploy.s.sol"; +import { ISharedArgument, DefaultNetwork, Migration } from "../Migration.s.sol"; +import { INSDomainPrice } from "script/interfaces/ISharedArgument.sol"; -contract Migration__20231106_Deploy is RNSDeploy { +contract Migration__20231106_Deploy is Migration { using Strings for *; using LibRNSDomain for string; @@ -32,7 +33,7 @@ contract Migration__20231106_Deploy is RNSDeploy { string[] internal _blacklistedWords; - function run() public trySetUp { + function run() public onlyOn(DefaultNetwork.RoninMainnet.key()) { _rns = new RNSUnifiedDeploy().run(); _auction = new RNSAuctionDeploy().run(); _nameChecker = new NameCheckerDeploy().run(); @@ -43,8 +44,6 @@ contract Migration__20231106_Deploy is RNSDeploy { address admin = _rns.getRoleMember(_rns.DEFAULT_ADMIN_ROLE(), 0); - Config memory config = getConfig(); - vm.resumeGasMetering(); vm.startBroadcast(admin); _rns.grantRole(_rns.CONTROLLER_ROLE(), address(_auction)); @@ -62,13 +61,12 @@ contract Migration__20231106_Deploy is RNSDeploy { _reverseRegistrar.setDefaultResolver(_publicResolver); vm.stopBroadcast(); - vm.pauseGasMetering(); _validateController(); _validateReverseRegistrar(); _validateRNSUnified(ronId, addrReverseId); - console2.log(StdStyle.green(unicode"✅ All checks are passed")); + console.log(StdStyle.green(unicode"✅ All checks are passed")); } function _validateController() internal logFn("_validateController") { @@ -82,7 +80,7 @@ contract Migration__20231106_Deploy is RNSDeploy { _ronController.computeCommitment(domain, user.addr, duration, secret, address(_publicResolver), data, true); (, uint256 ronPrice) = _ronController.rentPrice(domain, duration); - console2.log("domain price:", ronPrice); + console.log("domain price:", ronPrice); vm.deal(user.addr, ronPrice); vm.startPrank(user.addr); @@ -95,7 +93,7 @@ contract Migration__20231106_Deploy is RNSDeploy { uint256 expectedId = uint256(string.concat(domain, ".ron").namehash()); assertEq(_rns.ownerOf(expectedId), user.addr); - console2.log(unicode"✅ Controller checks are passed"); + console.log(unicode"✅ Controller checks are passed"); } function _validateRNSUnified(uint256 ronId, uint256 addrReverseId) internal logFn("validateRNSUnified") { @@ -105,7 +103,7 @@ contract Migration__20231106_Deploy is RNSDeploy { assertTrue(_rns.hasRole(_rns.RESERVATION_ROLE(), address(_auction)), "grant reservation role failed"); assertEq(address(_ronController.getPriceOracle()), address(_domainPrice), "set price oracle failed"); - console2.log(unicode"✅ RNSUnified checks are passed"); + console.log(unicode"✅ RNSUnified checks are passed"); } function _validateReverseRegistrar() internal logFn("validateReverseRegistrar") { @@ -138,7 +136,7 @@ contract Migration__20231106_Deploy is RNSDeploy { assertTrue(_auction.reserved(id), "invalid bulkRegister"); assertEq(_rns.getRecord(id).mut.expiry, _rns.MAX_EXPIRY(), "invalid expiry time"); - console2.log(unicode"✅ Auction checks are passed"); + console.log(unicode"✅ Auction checks are passed"); } function _validateDomainPrice() internal logFn("validateDomainPrice") { @@ -174,12 +172,12 @@ contract Migration__20231106_Deploy is RNSDeploy { vm.stopPrank(); - console2.log("Tax Raio:", _domainPrice.getTaxRatio()); - console2.log("Converting 1 USD (18 decimals) to RON:", _domainPrice.convertUSDToRON(1e18)); - console2.log("Converting 1 RON to USD (18 decimals):", _domainPrice.convertRONToUSD(1 ether)); - console2.log("Converting 1m USD (18 decimals) to RON:", _domainPrice.convertUSDToRON(1e18 * 1e6)); - console2.log("Converting 1m RON to USD (18 decimals):", _domainPrice.convertRONToUSD(1 ether * 1e6)); - console2.log(unicode"✅ Domain price checks are passed"); + console.log("Tax Raio:", _domainPrice.getTaxRatio()); + console.log("Converting 1 USD (18 decimals) to RON:", _domainPrice.convertUSDToRON(1e18)); + console.log("Converting 1 RON to USD (18 decimals):", _domainPrice.convertRONToUSD(1 ether)); + console.log("Converting 1m USD (18 decimals) to RON:", _domainPrice.convertUSDToRON(1e18 * 1e6)); + console.log("Converting 1m RON to USD (18 decimals):", _domainPrice.convertRONToUSD(1 ether * 1e6)); + console.log(unicode"✅ Domain price checks are passed"); } function _validateNameChecker() internal logFn("validateNameChecker") { @@ -191,9 +189,9 @@ contract Migration__20231106_Deploy is RNSDeploy { uint256 expectedMax; uint256 expectedMin = type(uint256).max; - console2.log(StdStyle.blue("Blacklisted words count"), blacklistedWords.length); - console2.log(StdStyle.blue("Word"), "RONRegistrarController::valid()", "NameChecker::forbidden()"); - console2.log(StdStyle.blue("Word Range"), string.concat("min: ", min.toString(), " ", "max: ", max.toString())); + console.log(StdStyle.blue("Blacklisted words count"), blacklistedWords.length); + console.log(StdStyle.blue("Word"), "RONRegistrarController::valid()", "NameChecker::forbidden()"); + console.log(StdStyle.blue("Word Range"), string.concat("min: ", min.toString(), " ", "max: ", max.toString())); for (uint256 i; i < blacklistedWords.length;) { word = blacklistedWords[i]; @@ -203,7 +201,7 @@ contract Migration__20231106_Deploy is RNSDeploy { forbidden = _nameChecker.forbidden(word); if (i % 50 == 0) { - console2.log(StdStyle.blue(word), valid ? unicode"✅" : unicode"❌", forbidden ? unicode"✅" : unicode"❌"); + console.log(StdStyle.blue(word), valid ? unicode"✅" : unicode"❌", forbidden ? unicode"✅" : unicode"❌"); } assertTrue(!valid); @@ -217,6 +215,6 @@ contract Migration__20231106_Deploy is RNSDeploy { assertEq(min, expectedMin); assertEq(max, expectedMax); - console2.log(unicode"✅ NameChecker checks are passed"); + console.log(unicode"✅ NameChecker checks are passed"); } } diff --git a/script/20231114-deploy-name-checker-logic/20231114_DeployNameCheckerLogic.s.sol b/script/20231114-deploy-name-checker-logic/20231114_DeployNameCheckerLogic.s.sol index 49371793..8a386ee5 100644 --- a/script/20231114-deploy-name-checker-logic/20231114_DeployNameCheckerLogic.s.sol +++ b/script/20231114-deploy-name-checker-logic/20231114_DeployNameCheckerLogic.s.sol @@ -6,20 +6,23 @@ import { ITransparentUpgradeableProxy, TransparentUpgradeableProxy } from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import { LibProxy } from "foundry-deployment-kit/libraries/LibProxy.sol"; import { NameChecker } from "@rns-contracts/NameChecker.sol"; -import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; -import { RNSDeploy } from "script/RNSDeploy.s.sol"; +import { Contract } from "script/utils/Contract.sol"; +import { Migration } from "script/Migration.s.sol"; -contract Migration__20231114_DeployNameCheckerLogic is RNSDeploy { - function run() public trySetUp { - address newLogic = _deployLogic(ContractKey.NameChecker); +contract Migration__20231114_DeployNameCheckerLogic is Migration { + using LibProxy for address payable; - NameChecker currentNameChecker = NameChecker(_config.getAddressFromCurrentNetwork(ContractKey.NameChecker)); + function run() public { + address newLogic = _deployLogic(Contract.NameChecker.key()); + + NameChecker currentNameChecker = NameChecker(config.getAddressFromCurrentNetwork(Contract.NameChecker.key())); assertTrue(currentNameChecker.forbidden("hell"), "hell"); assertTrue(currentNameChecker.forbidden("hellscream"), "hellscream"); assertTrue(currentNameChecker.forbidden("hell123"), "hell123"); - address proxyAdmin = _getProxyAdmin(address(currentNameChecker)); + address proxyAdmin = LibProxy.getProxyAdmin(payable(address(currentNameChecker))); vm.prank(ProxyAdmin(proxyAdmin).owner()); ProxyAdmin(proxyAdmin).upgrade(ITransparentUpgradeableProxy(address(currentNameChecker)), newLogic); diff --git a/script/20231115-migrate-invalid-auction-names/2021115_MigrateInvalidAuctionNames.s.sol b/script/20231115-migrate-invalid-auction-names/2021115_MigrateInvalidAuctionNames.s.sol index 61b52543..a3c39ed7 100644 --- a/script/20231115-migrate-invalid-auction-names/2021115_MigrateInvalidAuctionNames.s.sol +++ b/script/20231115-migrate-invalid-auction-names/2021115_MigrateInvalidAuctionNames.s.sol @@ -1,14 +1,14 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { console2 } from "forge-std/console2.sol"; +import { console2 as console } from "forge-std/console2.sol"; import { INSAuction, EventRange, RNSAuction } from "@rns-contracts/RNSAuction.sol"; -import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; -import { RNSDeploy } from "script/RNSDeploy.s.sol"; +import { Contract } from "script/utils/Contract.sol"; +import { Migration } from "script/Migration.s.sol"; -contract Migration__20231115_MigrateInvalidAuctionNames is RNSDeploy { - function run() public trySetUp { - RNSAuction auction = RNSAuction(_config.getAddressFromCurrentNetwork(ContractKey.RNSAuction)); +contract Migration__20231115_MigrateInvalidAuctionNames is Migration { + function run() public { + RNSAuction auction = RNSAuction(config.getAddressFromCurrentNetwork(Contract.RNSAuction.key())); uint256[] memory ids = new uint256[](2); // namehash`pc.ron` @@ -22,7 +22,7 @@ contract Migration__20231115_MigrateInvalidAuctionNames is RNSDeploy { vm.broadcast(auction.getRoleMember(0x0, 0)); bytes32 auctionId = auction.createAuctionEvent(EventRange(2332515600, 2332515600 + 1 days)); - console2.logBytes32(auctionId); + console.logBytes32(auctionId); // relist ids to new auction vm.broadcast(auction.getRoleMember(auction.OPERATOR_ROLE(), 0)); diff --git a/script/20231123-upgrade-auction-claim-unbidded-names/20231123_UpgradeAuctionClaimUnbiddedNames.s.sol b/script/20231123-upgrade-auction-claim-unbidded-names/20231123_UpgradeAuctionClaimUnbiddedNames.s.sol index b972e2a9..b554747a 100644 --- a/script/20231123-upgrade-auction-claim-unbidded-names/20231123_UpgradeAuctionClaimUnbiddedNames.s.sol +++ b/script/20231123-upgrade-auction-claim-unbidded-names/20231123_UpgradeAuctionClaimUnbiddedNames.s.sol @@ -2,20 +2,20 @@ pragma solidity ^0.8.19; import { console2 as console } from "forge-std/console2.sol"; -import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; -import { RNSDeploy } from "script/RNSDeploy.s.sol"; +import { Contract } from "script/utils/Contract.sol"; +import { Migration } from "script/Migration.s.sol"; import { RNSUnified } from "@rns-contracts/RNSUnified.sol"; import { INSAuction, RNSAuction } from "@rns-contracts/RNSAuction.sol"; -contract Migration__20231123_UpgradeAuctionClaimeUnbiddedNames is RNSDeploy { - function run() public trySetUp { - _upgradeProxy(ContractKey.RNSAuction, EMPTY_ARGS); +contract Migration__20231123_UpgradeAuctionClaimeUnbiddedNames is Migration { + function run() public { + _upgradeProxy(Contract.RNSAuction.key()); _validataBulkClaimUnbiddedNames({ size: 20 }); } function _validataBulkClaimUnbiddedNames(uint256 size) internal logFn("_validataBulkClaimUnbiddedNames") { - RNSAuction auction = RNSAuction(_config.getAddressFromCurrentNetwork(ContractKey.RNSAuction)); - RNSUnified rns = RNSUnified(_config.getAddressFromCurrentNetwork(ContractKey.RNSUnified)); + RNSAuction auction = RNSAuction(config.getAddressFromCurrentNetwork(Contract.RNSAuction.key())); + RNSUnified rns = RNSUnified(config.getAddressFromCurrentNetwork(Contract.RNSUnified.key())); uint256 auctionBalance = size; console.log("auctionBalance", auctionBalance); diff --git a/script/20231124-deploy-rns-operation/20231124_DeployRNSOperation.s.sol b/script/20231124-deploy-rns-operation/20231124_DeployRNSOperation.s.sol index 0083078b..30fb13b9 100644 --- a/script/20231124-deploy-rns-operation/20231124_DeployRNSOperation.s.sol +++ b/script/20231124-deploy-rns-operation/20231124_DeployRNSOperation.s.sol @@ -3,23 +3,23 @@ pragma solidity ^0.8.19; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { console2 as console } from "forge-std/console2.sol"; -import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; -import { RNSDeploy } from "script/RNSDeploy.s.sol"; +import { Contract } from "script/utils/Contract.sol"; +import { Migration } from "script/Migration.s.sol"; import { RNSUnified } from "@rns-contracts/RNSUnified.sol"; import { RNSDomainPrice } from "@rns-contracts/RNSDomainPrice.sol"; import { INSAuction, RNSAuction } from "@rns-contracts/RNSAuction.sol"; import { LibRNSDomain } from "@rns-contracts/libraries/LibRNSDomain.sol"; import { RNSOperation, RNSOperationDeploy } from "script/contracts/RNSOperationDeploy.s.sol"; -contract Migration__20231124_DeployRNSOperation is RNSDeploy { +contract Migration__20231124_DeployRNSOperation is Migration { using LibRNSDomain for string; - function run() public trySetUp { + function run() public { RNSOperation rnsOperation = new RNSOperationDeploy().run(); - RNSDomainPrice domainPrice = RNSDomainPrice(_config.getAddressFromCurrentNetwork(ContractKey.RNSDomainPrice)); - RNSUnified rns = RNSUnified(_config.getAddressFromCurrentNetwork(ContractKey.RNSUnified)); - RNSAuction auction = RNSAuction(_config.getAddressFromCurrentNetwork(ContractKey.RNSAuction)); + RNSDomainPrice domainPrice = RNSDomainPrice(config.getAddressFromCurrentNetwork(Contract.RNSDomainPrice.key())); + RNSUnified rns = RNSUnified(config.getAddressFromCurrentNetwork(Contract.RNSUnified.key())); + RNSAuction auction = RNSAuction(config.getAddressFromCurrentNetwork(Contract.RNSAuction.key())); address admin = rns.ownerOf(LibRNSDomain.RON_ID); @@ -27,10 +27,12 @@ contract Migration__20231124_DeployRNSOperation is RNSDeploy { rnsOperation.transferOwnership(admin); vm.startBroadcast(admin); + rns.setApprovalForAll(address(rnsOperation), true); auction.grantRole(auction.OPERATOR_ROLE(), address(rnsOperation)); rns.grantRole(rns.PROTECTED_SETTLER_ROLE(), address(rnsOperation)); domainPrice.grantRole(domainPrice.OVERRIDER_ROLE(), address(rnsOperation)); + vm.stopBroadcast(); _validateBulkMint(rns, rnsOperation); diff --git a/script/20231205-deploy-upgrade-auction-and-deploy-rns-operation/20231205_MainnetConfig.s.sol b/script/20231205-deploy-upgrade-auction-and-deploy-rns-operation/20231205_MainnetConfig.s.sol index 2b012834..b1845c79 100644 --- a/script/20231205-deploy-upgrade-auction-and-deploy-rns-operation/20231205_MainnetConfig.s.sol +++ b/script/20231205-deploy-upgrade-auction-and-deploy-rns-operation/20231205_MainnetConfig.s.sol @@ -1,15 +1,19 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { Network, RNSDeploy } from "script/RNSDeploy.s.sol"; +import { ISharedArgument, DefaultNetwork, Migration } from "script/Migration.s.sol"; -abstract contract Config__Mainnet20231205 is RNSDeploy { - function _buildMigrationConfig() internal view virtual override returns (Config memory config) { - config = super._buildMigrationConfig(); - if (_network == Network.RoninMainnet) { - config.rnsOperationOwner = 0x1FF1edE0242317b8C4229fC59E64DD93952019ef; +abstract contract Config__Mainnet20231205 is Migration { + function _sharedArguments() internal view virtual override returns (bytes memory rawArgs) { + rawArgs = super._sharedArguments(); + ISharedArgument.SharedParameter memory param = abi.decode(rawArgs, (ISharedArgument.SharedParameter)); + + if (network() == DefaultNetwork.RoninMainnet.key()) { + param.rnsOperationOwner = 0x1FF1edE0242317b8C4229fC59E64DD93952019ef; } else { - revert("Missing config"); + revert("Missing param"); } + + rawArgs = abi.encode(param); } } diff --git a/script/20231205-deploy-upgrade-auction-and-deploy-rns-operation/20231205_UpgradeRNSAuctionAndDeployRNSOperation.s.sol b/script/20231205-deploy-upgrade-auction-and-deploy-rns-operation/20231205_UpgradeRNSAuctionAndDeployRNSOperation.s.sol index d6851b42..75bd59b0 100644 --- a/script/20231205-deploy-upgrade-auction-and-deploy-rns-operation/20231205_UpgradeRNSAuctionAndDeployRNSOperation.s.sol +++ b/script/20231205-deploy-upgrade-auction-and-deploy-rns-operation/20231205_UpgradeRNSAuctionAndDeployRNSOperation.s.sol @@ -4,41 +4,53 @@ pragma solidity ^0.8.19; import { console2 as console } from "forge-std/console2.sol"; import { ITransparentUpgradeableProxy } from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import { ProxyAdmin } from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; -import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; -import { Network, Config__Mainnet20231205 } from "script/20231205-deploy-upgrade-auction-and-deploy-rns-operation/20231205_MainnetConfig.s.sol"; -import { INSAuction, RNSAuction, RNSUnified, Migration__20231123_UpgradeAuctionClaimeUnbiddedNames as UpgradeAuctionScript } from "script/20231123-upgrade-auction-claim-unbidded-names/20231123_UpgradeAuctionClaimUnbiddedNames.s.sol"; -import { RNSOperation, Migration__20231124_DeployRNSOperation as DeployRNSOperationScript } from "script/20231124-deploy-rns-operation/20231124_DeployRNSOperation.s.sol"; +import { Contract } from "script/utils/Contract.sol"; +import { DefaultContract } from "foundry-deployment-kit/utils/DefaultContract.sol"; +import { ISharedArgument } from "script/interfaces/ISharedArgument.sol"; +import { + DefaultNetwork, + Config__Mainnet20231205 +} from "script/20231205-deploy-upgrade-auction-and-deploy-rns-operation/20231205_MainnetConfig.s.sol"; +import { + INSAuction, + RNSAuction, + RNSUnified, + Migration__20231123_UpgradeAuctionClaimeUnbiddedNames as UpgradeAuctionScript +} from "script/20231123-upgrade-auction-claim-unbidded-names/20231123_UpgradeAuctionClaimUnbiddedNames.s.sol"; +import { + RNSOperation, + Migration__20231124_DeployRNSOperation as DeployRNSOperationScript +} from "script/20231124-deploy-rns-operation/20231124_DeployRNSOperation.s.sol"; contract Migration__20231205_UpgradeRNSAuctionAndDeployRNSOperation is Config__Mainnet20231205 { - function run() public trySetUp onMainnet { - Config memory config = getConfig(); + function run() public onlyOn(DefaultNetwork.RoninMainnet.key()) { + ISharedArgument.SharedParameter memory param = config.sharedArguments(); - ProxyAdmin proxyAdmin = ProxyAdmin(_config.getAddressFromCurrentNetwork(ContractKey.ProxyAdmin)); - address rnsAuctionProxy = _config.getAddressFromCurrentNetwork(ContractKey.RNSAuction); - address logic = _deployLogic(ContractKey.RNSAuction); + ProxyAdmin proxyAdmin = ProxyAdmin(config.getAddressFromCurrentNetwork(DefaultContract.ProxyAdmin.key())); + address rnsAuctionProxy = config.getAddressFromCurrentNetwork(Contract.RNSAuction.key()); + address logic = _deployLogic(Contract.RNSAuction.key()); vm.prank(proxyAdmin.owner()); - vm.resumeGasMetering(); + ProxyAdmin(proxyAdmin).upgrade(ITransparentUpgradeableProxy(rnsAuctionProxy), logic); - vm.pauseGasMetering(); console.log("RNSAuction Logic is deployed at:", logic); _validataBulkClaimUnbiddedNames({ size: 20 }); // deploy rns operation contract new DeployRNSOperationScript().run(); - RNSOperation rnsOperation = RNSOperation(_config.getAddressFromCurrentNetwork(ContractKey.RNSOperation)); + RNSOperation rnsOperation = RNSOperation(config.getAddressFromCurrentNetwork(Contract.RNSOperation.key())); // transfer owner ship for RNSOperation vm.broadcast(rnsOperation.owner()); - rnsOperation.transferOwnership(config.rnsOperationOwner); + rnsOperation.transferOwnership(param.rnsOperationOwner); - assertTrue(rnsOperation.owner() == config.rnsOperationOwner); + assertTrue(rnsOperation.owner() == param.rnsOperationOwner); } function _validataBulkClaimUnbiddedNames(uint256 size) internal logFn("_validataBulkClaimUnbiddedNames") { - RNSAuction auction = RNSAuction(_config.getAddressFromCurrentNetwork(ContractKey.RNSAuction)); - RNSUnified rns = RNSUnified(_config.getAddressFromCurrentNetwork(ContractKey.RNSUnified)); + RNSAuction auction = RNSAuction(config.getAddressFromCurrentNetwork(Contract.RNSAuction.key())); + RNSUnified rns = RNSUnified(config.getAddressFromCurrentNetwork(Contract.RNSUnified.key())); uint256 auctionBalance = size; console.log("auctionBalance", auctionBalance); diff --git a/script/Debug.s.sol b/script/Debug.s.sol deleted file mode 100644 index 811e6082..00000000 --- a/script/Debug.s.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.19; - -import { RNSDeploy } from "./RNSDeploy.s.sol"; -import { ErrorHandler } from "@rns-contracts/libraries/ErrorHandler.sol"; - -contract Debug is RNSDeploy { - using ErrorHandler for *; - - function debug(uint256 forkBlock, address from, address to, uint256 value, bytes calldata callData) external { - if (forkBlock != 0) { - vm.rollFork(forkBlock); - } - vm.prank(from); - (bool success, bytes memory returnOrRevertData) = to.call{ value: value }(callData); - success.handleRevert(returnOrRevertData); - } -} diff --git a/script/GeneralConfig.sol b/script/GeneralConfig.sol new file mode 100644 index 00000000..7a1209b0 --- /dev/null +++ b/script/GeneralConfig.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { BaseGeneralConfig } from "foundry-deployment-kit/BaseGeneralConfig.sol"; +import { Contract } from "./utils/Contract.sol"; + +contract GeneralConfig is BaseGeneralConfig { + constructor() BaseGeneralConfig("", "deployments/") { } + + function _setUpContracts() internal virtual override { + _mapContractName(Contract.RNSUnified); + _mapContractName(Contract.RNSAuction); + _mapContractName(Contract.NameChecker); + _mapContractName(Contract.RNSOperation); + _mapContractName(Contract.RNSDomainPrice); + _mapContractName(Contract.PublicResolver); + _mapContractName(Contract.OwnedMulticaller); + _mapContractName(Contract.RNSReverseRegistrar); + _mapContractName(Contract.RONRegistrarController); + } + + function _mapContractName(Contract contractEnum) internal { + _contractNameMap[contractEnum.key()] = contractEnum.name(); + } +} diff --git a/script/Migration.s.sol b/script/Migration.s.sol new file mode 100644 index 00000000..726f084b --- /dev/null +++ b/script/Migration.s.sol @@ -0,0 +1,96 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { BaseMigration } from "foundry-deployment-kit/BaseMigration.s.sol"; +import { DefaultNetwork } from "foundry-deployment-kit/utils/DefaultNetwork.sol"; +import { GeneralConfig } from "./GeneralConfig.sol"; +import "./interfaces/ISharedArgument.sol"; + +abstract contract Migration is BaseMigration { + ISharedArgument public constant config = ISharedArgument(address(CONFIG)); + + function _configByteCode() internal virtual override returns (bytes memory) { + return abi.encodePacked(type(GeneralConfig).creationCode); + } + + function _sharedArguments() internal view virtual override returns (bytes memory rawArgs) { + ISharedArgument.SharedParameter memory param; + + param.auctionOperators = new address[](1); + param.controllerOperators = new address[](1); + param.domainPriceOperators = new address[](1); + + if (network() == DefaultNetwork.RoninTestnet.key()) { + param.minWord = 2; + param.maxWord = 3; + param.minCommitmentAge = 10 seconds; + param.maxCommitmentAge = 1 days; + param.gracePeriod = 90 days; + + { + param.renewalFees = new INSDomainPrice.RenewalFee[](3); + param.renewalFees[0] = INSDomainPrice.RenewalFee(5, uint256(5e18) / 365 days); + param.renewalFees[1] = INSDomainPrice.RenewalFee(4, uint256(100e18) / 365 days); + param.renewalFees[2] = INSDomainPrice.RenewalFee(3, uint256(300e18) / 365 days); + } + param.bidGapRatio = 1000; // 10% + param.taxRatio = 1500; // 15% + param.maxAcceptableAge = 24 hours; + param.domainPriceScaleRule = PeriodScaler({ ratio: 500, period: 30 days * 3 }); + + param.baseTokenURI = "https://metadata-rns.skymavis.one/saigon/"; + param.admin = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; + param.pauser = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; + + param.operator = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; + param.auctionOperators[0] = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; + param.controllerOperators[0] = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; + param.domainPriceOperators[0] = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; + + param.controller = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; + param.pyth = IPyth(0xA2aa501b19aff244D90cc15a4Cf739D2725B5729); + param.protectedSettler = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; + param.treasury = payable(0x968D0Cd7343f711216817E617d3f92a23dC91c07); + param.pythIdForRONUSD = 0x4cb9d530b042004b042e165ee0904b12fe534d40dac5fe1c71dfcdb522e6e3c2; + } else if (network() == DefaultNetwork.RoninMainnet.key()) { + address temporaryDeployer = 0x0F68eDBE14C8f68481771016d7E2871d6a35DE11; + + param.minWord = 2; + param.maxWord = 3; + + param.minCommitmentAge = 10 seconds; + param.maxCommitmentAge = 1 days; + param.gracePeriod = 90 days; + + { + param.renewalFees = new INSDomainPrice.RenewalFee[](4); + param.renewalFees[0] = INSDomainPrice.RenewalFee(5, uint256(5e18) / 365 days); + param.renewalFees[1] = INSDomainPrice.RenewalFee(4, uint256(100e18) / 365 days); + param.renewalFees[2] = INSDomainPrice.RenewalFee(3, uint256(300e18) / 365 days); + param.renewalFees[3] = INSDomainPrice.RenewalFee(2, uint256(300e18) / 365 days); + } + param.bidGapRatio = 1000; // 10% + param.taxRatio = 1500; // 15% + param.maxAcceptableAge = 24 hours; + param.domainPriceScaleRule = PeriodScaler({ ratio: 500, period: 30 days * 3 }); + + param.baseTokenURI = "https://metadata-rns.roninchain.com/ronin/"; + param.admin = temporaryDeployer; + param.pauser = temporaryDeployer; + param.protectedSettler = temporaryDeployer; + + param.auctionOperators[0] = temporaryDeployer; + param.controllerOperators[0] = temporaryDeployer; + param.domainPriceOperators[0] = 0x0A9E57c71af2b1194C5f573F4bB1e45696c49213; // Harry + + param.controller = 0xEd4A9F48a62Fb6FdcfB45Bb00C9f61D1A436E58C; + param.treasury = payable(0xEd4A9F48a62Fb6FdcfB45Bb00C9f61D1A436E58C); // Andy + param.pyth = IPyth(0x2880aB155794e7179c9eE2e38200202908C17B43); // Harry + param.pythIdForRONUSD = 0x97cfe19da9153ef7d647b011c5e355142280ddb16004378573e6494e499879f3; // Harry + } else { + revert("Missing param"); + } + + rawArgs = abi.encode(param); + } +} diff --git a/script/RNSDeploy.s.sol b/script/RNSDeploy.s.sol deleted file mode 100644 index dcdbd06a..00000000 --- a/script/RNSDeploy.s.sol +++ /dev/null @@ -1,122 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.19; - -import { IPyth, INSDomainPrice, PeriodScaler } from "@rns-contracts/RNSDomainPrice.sol"; -import { BaseDeploy, Network } from "foundry-deployment-kit/BaseDeploy.s.sol"; - -abstract contract RNSDeploy is BaseDeploy { - struct Config { - IPyth pyth; - address admin; - address pauser; - address overrider; - address controller; - uint8 minWord; - uint8 maxWord; - address rnsOperationOwner; - address operator; - address[] controllerOperators; - address[] auctionOperators; - address[] domainPriceOperators; - uint256 taxRatio; - uint64 gracePeriod; - string baseTokenURI; - uint256 bidGapRatio; - address protectedSettler; - address payable treasury; - uint256 maxAcceptableAge; - bytes32 pythIdForRONUSD; - uint256 maxCommitmentAge; - uint256 minCommitmentAge; - uint256 minRegistrationDuration; - PeriodScaler domainPriceScaleRule; - INSDomainPrice.RenewalFee[] renewalFees; - } - - function _buildMigrationConfig() internal view virtual returns (Config memory config) { - config.auctionOperators = new address[](1); - config.controllerOperators = new address[](1); - config.domainPriceOperators = new address[](1); - - if (_network == Network.RoninTestnet) { - config.minWord = 2; - config.maxWord = 3; - config.minCommitmentAge = 10 seconds; - config.maxCommitmentAge = 1 days; - config.gracePeriod = 90 days; - - { - config.renewalFees = new INSDomainPrice.RenewalFee[](3); - config.renewalFees[0] = INSDomainPrice.RenewalFee(5, uint256(5e18) / 365 days); - config.renewalFees[1] = INSDomainPrice.RenewalFee(4, uint256(100e18) / 365 days); - config.renewalFees[2] = INSDomainPrice.RenewalFee(3, uint256(300e18) / 365 days); - } - config.bidGapRatio = 1000; // 10% - config.taxRatio = 1500; // 15% - config.maxAcceptableAge = 24 hours; - config.domainPriceScaleRule = PeriodScaler({ ratio: 500, period: 30 days * 3 }); - - config.baseTokenURI = "https://metadata-rns.skymavis.one/saigon/"; - config.admin = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; - config.pauser = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; - - config.operator = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; - config.auctionOperators[0] = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; - config.controllerOperators[0] = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; - config.domainPriceOperators[0] = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; - - config.controller = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; - config.pyth = IPyth(0xA2aa501b19aff244D90cc15a4Cf739D2725B5729); - config.protectedSettler = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; - config.treasury = payable(0x968D0Cd7343f711216817E617d3f92a23dC91c07); - config.pythIdForRONUSD = 0x4cb9d530b042004b042e165ee0904b12fe534d40dac5fe1c71dfcdb522e6e3c2; - } else if (_network == Network.RoninMainnet) { - address temporaryDeployer = 0x0F68eDBE14C8f68481771016d7E2871d6a35DE11; - - config.minWord = 2; - config.maxWord = 3; - - config.minCommitmentAge = 10 seconds; - config.maxCommitmentAge = 1 days; - config.gracePeriod = 90 days; - - { - config.renewalFees = new INSDomainPrice.RenewalFee[](4); - config.renewalFees[0] = INSDomainPrice.RenewalFee(5, uint256(5e18) / 365 days); - config.renewalFees[1] = INSDomainPrice.RenewalFee(4, uint256(100e18) / 365 days); - config.renewalFees[2] = INSDomainPrice.RenewalFee(3, uint256(300e18) / 365 days); - config.renewalFees[3] = INSDomainPrice.RenewalFee(2, uint256(300e18) / 365 days); - } - config.bidGapRatio = 1000; // 10% - config.taxRatio = 1500; // 15% - config.maxAcceptableAge = 24 hours; - config.domainPriceScaleRule = PeriodScaler({ ratio: 500, period: 30 days * 3 }); - - config.baseTokenURI = "https://metadata-rns.roninchain.com/ronin/"; - config.admin = temporaryDeployer; - config.pauser = temporaryDeployer; - config.protectedSettler = temporaryDeployer; - - config.auctionOperators[0] = temporaryDeployer; - config.controllerOperators[0] = temporaryDeployer; - config.domainPriceOperators[0] = 0x0A9E57c71af2b1194C5f573F4bB1e45696c49213; // Harry - - config.controller = 0xEd4A9F48a62Fb6FdcfB45Bb00C9f61D1A436E58C; - config.treasury = payable(0xEd4A9F48a62Fb6FdcfB45Bb00C9f61D1A436E58C); // Andy - config.pyth = IPyth(0x2880aB155794e7179c9eE2e38200202908C17B43); // Harry - config.pythIdForRONUSD = 0x97cfe19da9153ef7d647b011c5e355142280ddb16004378573e6494e499879f3; // Harry - } else { - revert("Missing config"); - } - } - - function _buildMigrationRawConfig() internal view override returns (bytes memory rawConfig) { - Config memory config = _buildMigrationConfig(); - rawConfig = abi.encode(config); - } - - function getConfig() public view returns (Config memory config) { - bytes memory rawConfig = _config.getMigrationRawConfig(); - config = abi.decode(rawConfig, (Config)); - } -} diff --git a/script/contracts/NameCheckerDeploy.s.sol b/script/contracts/NameCheckerDeploy.s.sol index f1db6117..f434168b 100644 --- a/script/contracts/NameCheckerDeploy.s.sol +++ b/script/contracts/NameCheckerDeploy.s.sol @@ -1,17 +1,17 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { BaseDeploy, ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; +import { ISharedArgument, Migration } from "script/Migration.s.sol"; +import { Contract } from "script/utils/Contract.sol"; import { NameChecker } from "@rns-contracts/NameChecker.sol"; -import { RNSDeploy } from "../RNSDeploy.s.sol"; -contract NameCheckerDeploy is RNSDeploy { +contract NameCheckerDeploy is Migration { function _defaultArguments() internal virtual override returns (bytes memory args) { - Config memory config = getConfig(); - args = abi.encodeCall(NameChecker.initialize, (config.admin, config.minWord, config.maxWord)); + ISharedArgument.SharedParameter memory param = config.sharedArguments(); + args = abi.encodeCall(NameChecker.initialize, (param.admin, param.minWord, param.maxWord)); } - function run() public virtual trySetUp returns (NameChecker) { - return NameChecker(_deployProxy(ContractKey.NameChecker)); + function run() public virtual returns (NameChecker) { + return NameChecker(_deployProxy(Contract.NameChecker.key())); } } diff --git a/script/contracts/OwnedMulticallerDeploy.s.sol b/script/contracts/OwnedMulticallerDeploy.s.sol index ef1d35bb..a1ec4543 100644 --- a/script/contracts/OwnedMulticallerDeploy.s.sol +++ b/script/contracts/OwnedMulticallerDeploy.s.sol @@ -1,16 +1,16 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { BaseDeploy, ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; +import { ISharedArgument, Migration } from "script/Migration.s.sol"; +import { Contract } from "script/utils/Contract.sol"; import { OwnedMulticaller } from "@rns-contracts/utils/OwnedMulticaller.sol"; -import { RNSDeploy } from "../RNSDeploy.s.sol"; -contract OwnedMulticallerDeploy is RNSDeploy { +contract OwnedMulticallerDeploy is Migration { function _defaultArguments() internal virtual override returns (bytes memory args) { - args = abi.encode(_config.getSender()); + args = abi.encode(config.getSender()); } - function run() public virtual trySetUp returns (OwnedMulticaller) { - return OwnedMulticaller(_deployImmutable(ContractKey.OwnedMulticaller)); + function run() public virtual returns (OwnedMulticaller) { + return OwnedMulticaller(_deployImmutable(Contract.OwnedMulticaller.key())); } } diff --git a/script/contracts/PublicResolverDeploy.s.sol b/script/contracts/PublicResolverDeploy.s.sol index 72190be0..b848c19c 100644 --- a/script/contracts/PublicResolverDeploy.s.sol +++ b/script/contracts/PublicResolverDeploy.s.sol @@ -1,29 +1,29 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { BaseDeploy, ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; +import { Migration } from "script/Migration.s.sol"; +import { Contract } from "script/utils/Contract.sol"; import { PublicResolver } from "@rns-contracts/resolvers/PublicResolver.sol"; import { RNSUnified, RNSUnifiedDeploy } from "./RNSUnifiedDeploy.s.sol"; import { RNSReverseRegistrar, RNSReverseRegistrarDeploy } from "./RNSReverseRegistrarDeploy.s.sol"; -import { RNSDeploy } from "../RNSDeploy.s.sol"; -contract PublicResolverDeploy is RNSDeploy { +contract PublicResolverDeploy is Migration { function _injectDependencies() internal virtual override { - _setDependencyDeployScript(ContractKey.RNSUnified, new RNSUnifiedDeploy()); - _setDependencyDeployScript(ContractKey.RNSReverseRegistrar, new RNSReverseRegistrarDeploy()); + _setDependencyDeployScript(Contract.RNSUnified.key(), new RNSUnifiedDeploy()); + _setDependencyDeployScript(Contract.RNSReverseRegistrar.key(), new RNSReverseRegistrarDeploy()); } function _defaultArguments() internal virtual override returns (bytes memory args) { args = abi.encodeCall( PublicResolver.initialize, ( - RNSUnified(loadContractOrDeploy(ContractKey.RNSUnified)), - RNSReverseRegistrar(loadContractOrDeploy(ContractKey.RNSReverseRegistrar)) + RNSUnified(loadContractOrDeploy(Contract.RNSUnified.key())), + RNSReverseRegistrar(loadContractOrDeploy(Contract.RNSReverseRegistrar.key())) ) ); } - function run() public virtual trySetUp returns (PublicResolver) { - return PublicResolver(_deployProxy(ContractKey.PublicResolver)); + function run() public virtual returns (PublicResolver) { + return PublicResolver(_deployProxy(Contract.PublicResolver.key())); } } diff --git a/script/contracts/RNSAuctionDeploy.s.sol b/script/contracts/RNSAuctionDeploy.s.sol index d52d9243..a89c58a2 100644 --- a/script/contracts/RNSAuctionDeploy.s.sol +++ b/script/contracts/RNSAuctionDeploy.s.sol @@ -3,29 +3,29 @@ pragma solidity ^0.8.19; import { RNSAuction } from "@rns-contracts/RNSAuction.sol"; import { RNSUnified, RNSUnifiedDeploy } from "./RNSUnifiedDeploy.s.sol"; -import { BaseDeploy, ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; -import { RNSDeploy } from "../RNSDeploy.s.sol"; +import { ISharedArgument, Migration } from "script/Migration.s.sol"; +import { Contract } from "script/utils/Contract.sol"; -contract RNSAuctionDeploy is RNSDeploy { +contract RNSAuctionDeploy is Migration { function _injectDependencies() internal virtual override { - _setDependencyDeployScript(ContractKey.RNSUnified, new RNSUnifiedDeploy()); + _setDependencyDeployScript(Contract.RNSUnified.key(), new RNSUnifiedDeploy()); } function _defaultArguments() internal virtual override returns (bytes memory args) { - Config memory config = getConfig(); + ISharedArgument.SharedParameter memory param = config.sharedArguments(); args = abi.encodeCall( RNSAuction.initialize, ( - config.admin, - config.auctionOperators, - RNSUnified(loadContractOrDeploy(ContractKey.RNSUnified)), - config.treasury, - config.bidGapRatio + param.admin, + param.auctionOperators, + RNSUnified(loadContractOrDeploy(Contract.RNSUnified.key())), + param.treasury, + param.bidGapRatio ) ); } - function run() public virtual trySetUp returns (RNSAuction) { - return RNSAuction(_deployProxy(ContractKey.RNSAuction)); + function run() public virtual returns (RNSAuction) { + return RNSAuction(_deployProxy(Contract.RNSAuction.key())); } } diff --git a/script/contracts/RNSDomainPriceDeploy.s.sol b/script/contracts/RNSDomainPriceDeploy.s.sol index 78569ea2..4d30ebbb 100644 --- a/script/contracts/RNSDomainPriceDeploy.s.sol +++ b/script/contracts/RNSDomainPriceDeploy.s.sol @@ -3,33 +3,33 @@ pragma solidity ^0.8.19; import { RNSDomainPrice } from "@rns-contracts/RNSDomainPrice.sol"; import { RNSAuction, RNSAuctionDeploy } from "./RNSAuctionDeploy.s.sol"; -import { BaseDeploy, ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; -import { RNSDeploy } from "../RNSDeploy.s.sol"; +import { ISharedArgument, Migration } from "script/Migration.s.sol"; +import { Contract } from "script/utils/Contract.sol"; -contract RNSDomainPriceDeploy is RNSDeploy { +contract RNSDomainPriceDeploy is Migration { function _injectDependencies() internal virtual override { - _setDependencyDeployScript(ContractKey.RNSAuction, new RNSAuctionDeploy()); + _setDependencyDeployScript(Contract.RNSAuction.key(), new RNSAuctionDeploy()); } function _defaultArguments() internal virtual override returns (bytes memory args) { - Config memory config = getConfig(); + ISharedArgument.SharedParameter memory param = config.sharedArguments(); args = abi.encodeCall( RNSDomainPrice.initialize, ( - config.admin, - config.domainPriceOperators, - config.renewalFees, - config.taxRatio, - config.domainPriceScaleRule, - config.pyth, - RNSAuction(loadContractOrDeploy(ContractKey.RNSAuction)), - config.maxAcceptableAge, - config.pythIdForRONUSD + param.admin, + param.domainPriceOperators, + param.renewalFees, + param.taxRatio, + param.domainPriceScaleRule, + param.pyth, + RNSAuction(loadContractOrDeploy(Contract.RNSAuction.key())), + param.maxAcceptableAge, + param.pythIdForRONUSD ) ); } - function run() public virtual trySetUp returns (RNSDomainPrice) { - return RNSDomainPrice(_deployProxy(ContractKey.RNSDomainPrice)); + function run() public virtual returns (RNSDomainPrice) { + return RNSDomainPrice(_deployProxy(Contract.RNSDomainPrice.key())); } } diff --git a/script/contracts/RNSOperationDeploy.s.sol b/script/contracts/RNSOperationDeploy.s.sol index 86a1a814..57d02a50 100644 --- a/script/contracts/RNSOperationDeploy.s.sol +++ b/script/contracts/RNSOperationDeploy.s.sol @@ -1,21 +1,21 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; +import { Migration } from "script/Migration.s.sol"; +import { Contract } from "script/utils/Contract.sol"; import { RNSOperation } from "@rns-contracts/utils/RNSOperation.sol"; -import { RNSDeploy } from "../RNSDeploy.s.sol"; -contract RNSOperationDeploy is RNSDeploy { +contract RNSOperationDeploy is Migration { function _defaultArguments() internal virtual override returns (bytes memory args) { args = abi.encode( - _config.getAddressFromCurrentNetwork(ContractKey.RNSUnified), - _config.getAddressFromCurrentNetwork(ContractKey.PublicResolver), - _config.getAddressFromCurrentNetwork(ContractKey.RNSAuction), - _config.getAddressFromCurrentNetwork(ContractKey.RNSDomainPrice) + config.getAddressFromCurrentNetwork(Contract.RNSUnified.key()), + config.getAddressFromCurrentNetwork(Contract.PublicResolver.key()), + config.getAddressFromCurrentNetwork(Contract.RNSAuction.key()), + config.getAddressFromCurrentNetwork(Contract.RNSDomainPrice.key()) ); } - function run() public virtual trySetUp returns (RNSOperation) { - return RNSOperation(_deployImmutable(ContractKey.RNSOperation)); + function run() public virtual returns (RNSOperation) { + return RNSOperation(_deployImmutable(Contract.RNSOperation.key())); } } diff --git a/script/contracts/RNSReverseRegistrarDeploy.s.sol b/script/contracts/RNSReverseRegistrarDeploy.s.sol index 370a1c1e..f46c1b49 100644 --- a/script/contracts/RNSReverseRegistrarDeploy.s.sol +++ b/script/contracts/RNSReverseRegistrarDeploy.s.sol @@ -3,24 +3,24 @@ pragma solidity ^0.8.19; import { RNSReverseRegistrar } from "@rns-contracts/RNSReverseRegistrar.sol"; import { RNSUnified, RNSUnifiedDeploy } from "./RNSUnifiedDeploy.s.sol"; -import { BaseDeploy, ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; -import { RNSDeploy } from "../RNSDeploy.s.sol"; +import { ISharedArgument, Migration } from "script/Migration.s.sol"; +import { Contract } from "script/utils/Contract.sol"; -contract RNSReverseRegistrarDeploy is RNSDeploy { +contract RNSReverseRegistrarDeploy is Migration { function _injectDependencies() internal virtual override { - _setDependencyDeployScript(ContractKey.RNSUnified, new RNSUnifiedDeploy()); + _setDependencyDeployScript(Contract.RNSUnified.key(), new RNSUnifiedDeploy()); } function _defaultArguments() internal virtual override returns (bytes memory args) { - Config memory config = getConfig(); + ISharedArgument.SharedParameter memory param = config.sharedArguments(); address[] memory operators = new address[](1); - operators[0] = config.operator; + operators[0] = param.operator; args = abi.encodeCall( - RNSReverseRegistrar.initialize, (config.admin, RNSUnified(loadContractOrDeploy(ContractKey.RNSUnified))) + RNSReverseRegistrar.initialize, (param.admin, RNSUnified(loadContractOrDeploy(Contract.RNSUnified.key()))) ); } - function run() public virtual trySetUp returns (RNSReverseRegistrar) { - return RNSReverseRegistrar(_deployProxy(ContractKey.RNSReverseRegistrar)); + function run() public virtual returns (RNSReverseRegistrar) { + return RNSReverseRegistrar(_deployProxy(Contract.RNSReverseRegistrar.key())); } } diff --git a/script/contracts/RNSUnifiedDeploy.s.sol b/script/contracts/RNSUnifiedDeploy.s.sol index 406fa9e9..b438a845 100644 --- a/script/contracts/RNSUnifiedDeploy.s.sol +++ b/script/contracts/RNSUnifiedDeploy.s.sol @@ -2,19 +2,19 @@ pragma solidity ^0.8.19; import { RNSUnified } from "@rns-contracts/RNSUnified.sol"; -import { BaseDeploy, ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; -import { RNSDeploy } from "../RNSDeploy.s.sol"; +import { ISharedArgument, Migration } from "script/Migration.s.sol"; +import { Contract } from "script/utils/Contract.sol"; -contract RNSUnifiedDeploy is RNSDeploy { +contract RNSUnifiedDeploy is Migration { function _defaultArguments() internal view override returns (bytes memory args) { - Config memory config = getConfig(); + ISharedArgument.SharedParameter memory param = config.sharedArguments(); args = abi.encodeCall( RNSUnified.initialize, - (config.admin, config.pauser, config.controller, config.protectedSettler, config.gracePeriod, config.baseTokenURI) + (param.admin, param.pauser, param.controller, param.protectedSettler, param.gracePeriod, param.baseTokenURI) ); } - function run() public virtual trySetUp returns (RNSUnified) { - return RNSUnified(_deployProxy(ContractKey.RNSUnified)); + function run() public virtual returns (RNSUnified) { + return RNSUnified(_deployProxy(Contract.RNSUnified.key())); } } diff --git a/script/contracts/RONRegistrarControllerDeploy.s.sol b/script/contracts/RONRegistrarControllerDeploy.s.sol index 830d41d8..5656f4de 100644 --- a/script/contracts/RONRegistrarControllerDeploy.s.sol +++ b/script/contracts/RONRegistrarControllerDeploy.s.sol @@ -6,39 +6,39 @@ import { RNSUnified, RNSUnifiedDeploy } from "./RNSUnifiedDeploy.s.sol"; import { NameChecker, NameCheckerDeploy } from "./NameCheckerDeploy.s.sol"; import { RNSDomainPrice, RNSDomainPriceDeploy } from "./RNSDomainPriceDeploy.s.sol"; import { RNSReverseRegistrar, RNSReverseRegistrarDeploy } from "./RNSReverseRegistrarDeploy.s.sol"; -import { BaseDeploy, ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; -import { RNSDeploy } from "../RNSDeploy.s.sol"; +import { ISharedArgument, Migration } from "script/Migration.s.sol"; +import { Contract } from "script/utils/Contract.sol"; -contract RONRegistrarControllerDeploy is RNSDeploy { +contract RONRegistrarControllerDeploy is Migration { function _injectDependencies() internal virtual override { - _setDependencyDeployScript(ContractKey.RNSUnified, new RNSUnifiedDeploy()); - _setDependencyDeployScript(ContractKey.NameChecker, new NameCheckerDeploy()); - _setDependencyDeployScript(ContractKey.RNSDomainPrice, new RNSDomainPriceDeploy()); - _setDependencyDeployScript(ContractKey.RNSReverseRegistrar, new RNSReverseRegistrarDeploy()); + _setDependencyDeployScript(Contract.RNSUnified.key(), new RNSUnifiedDeploy()); + _setDependencyDeployScript(Contract.NameChecker.key(), new NameCheckerDeploy()); + _setDependencyDeployScript(Contract.RNSDomainPrice.key(), new RNSDomainPriceDeploy()); + _setDependencyDeployScript(Contract.RNSReverseRegistrar.key(), new RNSReverseRegistrarDeploy()); } function _defaultArguments() internal virtual override returns (bytes memory args) { - Config memory config = getConfig(); + ISharedArgument.SharedParameter memory param = config.sharedArguments(); address[] memory operators = new address[](1); - operators[0] = config.operator; + operators[0] = param.operator; args = abi.encodeCall( RONRegistrarController.initialize, ( - config.admin, - config.pauser, - config.treasury, - config.maxAcceptableAge, - config.minCommitmentAge, - config.minRegistrationDuration, - RNSUnified(loadContractOrDeploy(ContractKey.RNSUnified)), - NameChecker(loadContractOrDeploy(ContractKey.NameChecker)), - RNSDomainPrice(loadContractOrDeploy(ContractKey.RNSDomainPrice)), - RNSReverseRegistrar(loadContractOrDeploy(ContractKey.RNSReverseRegistrar)) + param.admin, + param.pauser, + param.treasury, + param.maxAcceptableAge, + param.minCommitmentAge, + param.minRegistrationDuration, + RNSUnified(loadContractOrDeploy(Contract.RNSUnified.key())), + NameChecker(loadContractOrDeploy(Contract.NameChecker.key())), + RNSDomainPrice(loadContractOrDeploy(Contract.RNSDomainPrice.key())), + RNSReverseRegistrar(loadContractOrDeploy(Contract.RNSReverseRegistrar.key())) ) ); } - function run() public virtual trySetUp returns (RONRegistrarController) { - return RONRegistrarController(_deployProxy(ContractKey.RONRegistrarController)); + function run() public virtual returns (RONRegistrarController) { + return RONRegistrarController(_deployProxy(Contract.RONRegistrarController.key())); } } diff --git a/script/interfaces/ISharedArgument.sol b/script/interfaces/ISharedArgument.sol new file mode 100644 index 00000000..f07a4671 --- /dev/null +++ b/script/interfaces/ISharedArgument.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { IGeneralConfig } from "foundry-deployment-kit/interfaces/IGeneralConfig.sol"; +import { IPyth, INSDomainPrice, PeriodScaler } from "@rns-contracts/RNSDomainPrice.sol"; + +interface ISharedArgument is IGeneralConfig { + struct SharedParameter { + IPyth pyth; + address admin; + address pauser; + address overrider; + address controller; + uint8 minWord; + uint8 maxWord; + address rnsOperationOwner; + address operator; + address[] controllerOperators; + address[] auctionOperators; + address[] domainPriceOperators; + uint256 taxRatio; + uint64 gracePeriod; + string baseTokenURI; + uint256 bidGapRatio; + address protectedSettler; + address payable treasury; + uint256 maxAcceptableAge; + bytes32 pythIdForRONUSD; + uint256 maxCommitmentAge; + uint256 minCommitmentAge; + uint256 minRegistrationDuration; + PeriodScaler domainPriceScaleRule; + INSDomainPrice.RenewalFee[] renewalFees; + } + + function sharedArguments() external view returns (SharedParameter memory param); +} diff --git a/script/utils/Contract.sol b/script/utils/Contract.sol new file mode 100644 index 00000000..05f9fd0c --- /dev/null +++ b/script/utils/Contract.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { LibString } from "lib/solady/src/utils/LibString.sol"; +import { TContract } from "foundry-deployment-kit/types/Types.sol"; + +enum Contract { + RNSUnified, + RNSAuction, + NameChecker, + RNSOperation, + RNSDomainPrice, + PublicResolver, + OwnedMulticaller, + RNSReverseRegistrar, + RONRegistrarController +} + +using { key, name } for Contract global; + +function key(Contract contractEnum) pure returns (TContract) { + return TContract.wrap(LibString.packOne(name(contractEnum))); +} + +function name(Contract contractEnum) pure returns (string memory) { + if (contractEnum == Contract.RNSUnified) return "RNSUnified"; + if (contractEnum == Contract.RNSAuction) return "RNSAuction"; + if (contractEnum == Contract.NameChecker) return "NameChecker"; + if (contractEnum == Contract.RNSOperation) return "RNSOperation"; + if (contractEnum == Contract.RNSDomainPrice) return "RNSDomainPrice"; + if (contractEnum == Contract.PublicResolver) return "PublicResolver"; + if (contractEnum == Contract.OwnedMulticaller) return "OwnedMulticaller"; + if (contractEnum == Contract.RNSReverseRegistrar) return "RNSReverseRegistrar"; + if (contractEnum == Contract.RONRegistrarController) return "RONRegistrarController"; + revert("Contract: Unknown contract"); +} diff --git a/test/RNSUnified/RNSUnified.t.sol b/test/RNSUnified/RNSUnified.t.sol index e541a2a3..7522c901 100644 --- a/test/RNSUnified/RNSUnified.t.sol +++ b/test/RNSUnified/RNSUnified.t.sol @@ -96,7 +96,13 @@ abstract contract RNSUnifiedTest is Test { address logic = address(new RNSUnified()); _rns = RNSUnified( address( - new TransparentUpgradeableProxy(logic, _proxyAdmin, abi.encodeCall(RNSUnified.initialize, (_admin, _pauser, _controller, _protectedSettler, GRACE_PERIOD, BASE_URI))) + new TransparentUpgradeableProxy( + logic, + _proxyAdmin, + abi.encodeCall( + RNSUnified.initialize, (_admin, _pauser, _controller, _protectedSettler, GRACE_PERIOD, BASE_URI) + ) + ) ) ); diff --git a/upload-sig.sh b/upload-sig.sh index a4a053c3..c6fd92fc 100755 --- a/upload-sig.sh +++ b/upload-sig.sh @@ -1,4 +1,3 @@ -set -ex # Default network value networkName="ronin-testnet" # Function to print usage and exit @@ -40,6 +39,7 @@ if [ ! -d "$folder" ]; then echo "Error: The specified folder does not exist for the selected network." exit 1 fi +index=0 for file in "$folder"/*.json; do # Check if the file exists and is a regular file if [ -f "$file" ] && [ "$(basename "$file")" != ".chainId" ]; then @@ -47,6 +47,8 @@ for file in "$folder"/*.json; do contractName=$(jq -r '.contractName' "$file") # Check if contractName and address are not empty if [ -n "$contractName" ]; then + # Increment the index + ((index++)) ( # Initialize arrays to store events and errors keys events_keys=() @@ -63,14 +65,20 @@ for file in "$folder"/*.json; do done <<<"$(echo "$errors" | jq -r 'keys[]')" # Combine keys from events and errors all_keys=("${events_keys[@]}" "${errors_keys[@]}") + echo cast upload-signature "${all_keys[@]}" # Call cast upload-signature cast upload-signature "${all_keys[@]}" - ) & + ) & else echo "Error: Missing contractName or address in $file" fi fi + # Check if index is a multiple of 10, then wait + if [ $((index % 10)) -eq 0 ]; then + wait + fi + done forge selectors upload --all &