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/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/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 diff --git a/lib/foundry-deployment-kit b/lib/foundry-deployment-kit index 6e09174f..0802f46c 160000 --- a/lib/foundry-deployment-kit +++ b/lib/foundry-deployment-kit @@ -1 +1 @@ -Subproject commit 6e09174fc651780ec1225b37d614a0297bd7de30 +Subproject commit 0802f46c47427b6e72739a51ece4e6138fd23b61 diff --git a/run.sh b/run.sh index 52ff9554..931b150b 100755 --- a/run.sh +++ b/run.sh @@ -1,27 +1 @@ -verify_arg="" -extra_argument="" -op_command="op run --env-file="./.env" --" - -for arg in "$@"; do - case $arg in - --trezor) - op_command="" - extra_argument+=trezor@ - ;; - --broadcast) - op_command="op run --env-file="./.env" --" - # verify_arg="--verify --verifier sourcify --verifier-url https://sourcify.roninchain.com/server/" - ;; - --log) - set -- "${@/#--log/}" - extra_argument+=log@ - ;; - *) ;; - esac -done - -# Remove the @ character from the end of extra_argument -extra_argument="${extra_argument%%@}" - -calldata=$(cast calldata 'run()') -${op_command} forge script ${verify_arg} --legacy ${@} --sig 'run(bytes,string)' ${calldata} "${extra_argument}" +source lib/foundry-deployment-kit/run.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..5bbc1067 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,12 +16,16 @@ 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; + uint256 internal _ronId; + uint256 internal _addrReverseId; + RNSUnified internal _rns; RNSAuction internal _auction; NameChecker internal _nameChecker; @@ -32,7 +36,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,35 +52,34 @@ contract Migration__20231015_Deploy is RNSDeploy { } uint256[] memory packedWords = _nameChecker.packBulk(_blacklistedWords); - vm.resumeGasMetering(); vm.startBroadcast(admin); _rns.grantRole(_rns.CONTROLLER_ROLE(), address(_auction)); _rns.grantRole(_rns.RESERVATION_ROLE(), address(_auction)); _rns.grantRole(_rns.CONTROLLER_ROLE(), address(_ronController)); - (, uint256 ronId) = _rns.mint(0x0, "ron", address(0), admin, _rns.MAX_EXPIRY()); + (, _ronId) = _rns.mint(0x0, "ron", address(0), admin, _rns.MAX_EXPIRY()); (, uint256 reverseId) = _rns.mint(0x0, "reverse", address(0), admin, _rns.MAX_EXPIRY()); - (, uint256 addrReverseId) = _rns.mint(reverseId, "addr", address(0), admin, _rns.MAX_EXPIRY()); + (, _addrReverseId) = _rns.mint(reverseId, "addr", address(0), admin, _rns.MAX_EXPIRY()); _rns.setApprovalForAll(address(_auction), true); _rns.setApprovalForAll(address(_ronController), true); - _rns.approve(address(_reverseRegistrar), addrReverseId); + _rns.approve(address(_reverseRegistrar), _addrReverseId); _reverseRegistrar.setDefaultResolver(_publicResolver); _nameChecker.setForbiddenWords({ packedWords: packedWords, shouldForbid: true }); vm.stopBroadcast(); - vm.pauseGasMetering(); + } + function _postCheck() internal override { _validateAuction(); _validateController(); _validateDomainPrice(); _validateReverseRegistrar(); _validateNameChecker(); - _validateRNSUnified(ronId, addrReverseId); - - console2.log(StdStyle.green(unicode"✅ All checks are passed")); + _validateRNSUnified(_ronId, _addrReverseId); + console.log(unicode"✅ All checks are passed"); } function _validateController() internal logFn("_validateController") { @@ -90,7 +93,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 +106,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 +116,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 +149,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 +194,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 +211,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 +223,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 +237,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..0b602d51 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.rnsDomainPrice.overrider = param.rnsDomainPrice.domainPriceOperators[0]; + } 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..42ff6657 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.RNSDomainPriceParam memory param = config.sharedArguments().rnsDomainPrice; + _upgradeProxy(Contract.RNSDomainPrice.key()); - console2.log("operator", config.operator); - console2.log("overrider", config.overrider); + console.log("operator", param.domainPriceOperators[0]); + console.log("overrider", param.overrider); - RNSDomainPrice domainPrice = RNSDomainPrice(_config.getAddressFromCurrentNetwork(ContractKey.RNSDomainPrice)); + RNSDomainPrice domainPrice = RNSDomainPrice(loadContract(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..29be1b88 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(loadContract(Contract.RNSDomainPrice.key())); - Config memory config = getConfig(); + ISharedArgument.RNSDomainPriceParam memory param = config.sharedArguments().rnsDomainPrice; 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..69dabe09 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(loadContract(Contract.RNSUnified.key())); + address resolver = loadContract(Contract.PublicResolver.key()); + OwnedMulticaller multicall = OwnedMulticaller(loadContract(Contract.OwnedMulticaller.key())); - console2.log(_config.getAddressFromCurrentNetwork(ContractKey.OwnedMulticaller)); + console.log(loadContract(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..8842cc9d 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(loadContract(Contract.RNSUnified.key())); + OwnedMulticaller multicall = OwnedMulticaller(loadContractOrDeploy(Contract.OwnedMulticaller.key())); + address auction = loadContract(Contract.RNSAuction.key()); + address ronController = loadContract(Contract.RONRegistrarController.key()); + address reverseRegistrar = loadContract(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..2a7ed7c9 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,12 +16,16 @@ 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; + uint256 internal _ronId; + uint256 internal _addrReverseId; + RNSUnified internal _rns; RNSAuction internal _auction; NameChecker internal _nameChecker; @@ -32,7 +36,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,32 +47,31 @@ 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)); _rns.grantRole(_rns.RESERVATION_ROLE(), address(_auction)); _rns.grantRole(_rns.CONTROLLER_ROLE(), address(_ronController)); - (, uint256 ronId) = _rns.mint(0x0, "ron", address(0), admin, _rns.MAX_EXPIRY()); + (, _ronId) = _rns.mint(0x0, "ron", address(0), admin, _rns.MAX_EXPIRY()); (, uint256 reverseId) = _rns.mint(0x0, "reverse", address(0), admin, _rns.MAX_EXPIRY()); - (, uint256 addrReverseId) = _rns.mint(reverseId, "addr", address(0), admin, _rns.MAX_EXPIRY()); + (, _addrReverseId) = _rns.mint(reverseId, "addr", address(0), admin, _rns.MAX_EXPIRY()); _rns.setApprovalForAll(address(_auction), true); _rns.setApprovalForAll(address(_ronController), true); - _rns.approve(address(_reverseRegistrar), addrReverseId); + _rns.approve(address(_reverseRegistrar), _addrReverseId); _reverseRegistrar.setDefaultResolver(_publicResolver); vm.stopBroadcast(); - vm.pauseGasMetering(); + } + function _postCheck() internal override { _validateController(); _validateReverseRegistrar(); - _validateRNSUnified(ronId, addrReverseId); + _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 +85,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 +98,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 +108,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 +141,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 +177,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 +194,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 +206,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 +220,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..fd86c0d8 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(loadContract(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..e5f5465c 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(loadContract(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..5589d3bf 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(loadContract(Contract.RNSAuction.key())); + RNSUnified rns = RNSUnified(loadContract(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..7f8bce69 100644 --- a/script/20231124-deploy-rns-operation/20231124_DeployRNSOperation.s.sol +++ b/script/20231124-deploy-rns-operation/20231124_DeployRNSOperation.s.sol @@ -3,23 +3,28 @@ 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 { - RNSOperation rnsOperation = new RNSOperationDeploy().run(); + RNSUnified private rns; + RNSAuction private auction; + RNSOperation private rnsOperation; + RNSDomainPrice private domainPrice; - RNSDomainPrice domainPrice = RNSDomainPrice(_config.getAddressFromCurrentNetwork(ContractKey.RNSDomainPrice)); - RNSUnified rns = RNSUnified(_config.getAddressFromCurrentNetwork(ContractKey.RNSUnified)); - RNSAuction auction = RNSAuction(_config.getAddressFromCurrentNetwork(ContractKey.RNSAuction)); + function run() public { + rnsOperation = new RNSOperationDeploy().run(); + + domainPrice = RNSDomainPrice(loadContract(Contract.RNSDomainPrice.key())); + rns = RNSUnified(loadContract(Contract.RNSUnified.key())); + auction = RNSAuction(loadContract(Contract.RNSAuction.key())); address admin = rns.ownerOf(LibRNSDomain.RON_ID); @@ -27,22 +32,23 @@ 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); - _validateBulkSetProtected(rns, rnsOperation); - _validateBulkOverrideRenewalFees(domainPrice, rnsOperation); - _validateReclaimAuctionNames({ rns: rns, auction: auction, rnsOperation: rnsOperation, searchSize: 20 }); + function _postCheck() internal override { + _validateBulkMint(); + _validateBulkSetProtected(); + _validateBulkOverrideRenewalFees(); + _validateReclaimAuctionNames({ searchSize: 20 }); } - function _validateBulkOverrideRenewalFees(RNSDomainPrice domainPrice, RNSOperation rnsOperation) - internal - logFn("_validateBulkOverrideRenewalFees") - { + function _validateBulkOverrideRenewalFees() internal logFn("_validateBulkOverrideRenewalFees") { string memory label = "tudo-provip-maximum-ultra"; string[] memory labels = new string[](1); labels[0] = label; @@ -56,12 +62,7 @@ contract Migration__20231124_DeployRNSOperation is RNSDeploy { assertEq(domainPrice.getOverriddenRenewalFee(label), Math.mulDiv(yearlyUSDPrices[0], 1 ether, 365 days)); } - function _validateReclaimAuctionNames( - RNSUnified rns, - RNSAuction auction, - RNSOperation rnsOperation, - uint256 searchSize - ) internal logFn("_validateReclaimAuctionNames") { + function _validateReclaimAuctionNames(uint256 searchSize) internal logFn("_validateReclaimAuctionNames") { INSAuction.DomainAuction[] memory domainAuctions = new INSAuction.DomainAuction[](searchSize); uint256[] memory reservedIds = new uint256[](searchSize); for (uint256 i; i < searchSize; ++i) { @@ -89,7 +90,7 @@ contract Migration__20231124_DeployRNSOperation is RNSDeploy { rnsOperation.reclaimUnbiddedNames({ tos: tos, labels: labels, allowFailure: false }); } - function _validateBulkMint(RNSUnified rns, RNSOperation rnsOperation) internal logFn("_validateBulkMint") { + function _validateBulkMint() internal logFn("_validateBulkMint") { address to = makeAddr("to"); address[] memory tos = new address[](1); tos[0] = to; @@ -104,10 +105,7 @@ contract Migration__20231124_DeployRNSOperation is RNSDeploy { assertEq(rns.ownerOf(id), to); } - function _validateBulkSetProtected(RNSUnified rns, RNSOperation rnsOperation) - internal - logFn("_validateBulkSetProtected") - { + function _validateBulkSetProtected() internal logFn("_validateBulkSetProtected") { string[] memory labels = new string[](1); labels[0] = "tudo-provip-maximum-utra"; 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..370a36f1 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.rnsOperation.admin = 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..e057f5a6 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.RNSOperationParam memory param = config.sharedArguments().rnsOperation; - ProxyAdmin proxyAdmin = ProxyAdmin(_config.getAddressFromCurrentNetwork(ContractKey.ProxyAdmin)); - address rnsAuctionProxy = _config.getAddressFromCurrentNetwork(ContractKey.RNSAuction); - address logic = _deployLogic(ContractKey.RNSAuction); + ProxyAdmin proxyAdmin = ProxyAdmin(loadContract(DefaultContract.ProxyAdmin.key())); + address rnsAuctionProxy = loadContract(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(loadContract(Contract.RNSOperation.key())); // transfer owner ship for RNSOperation vm.broadcast(rnsOperation.owner()); - rnsOperation.transferOwnership(config.rnsOperationOwner); + rnsOperation.transferOwnership(param.admin); - assertTrue(rnsOperation.owner() == config.rnsOperationOwner); + assertTrue(rnsOperation.owner() == param.admin); } function _validataBulkClaimUnbiddedNames(uint256 size) internal logFn("_validataBulkClaimUnbiddedNames") { - RNSAuction auction = RNSAuction(_config.getAddressFromCurrentNetwork(ContractKey.RNSAuction)); - RNSUnified rns = RNSUnified(_config.getAddressFromCurrentNetwork(ContractKey.RNSUnified)); + RNSAuction auction = RNSAuction(loadContract(Contract.RNSAuction.key())); + RNSUnified rns = RNSUnified(loadContract(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..8e572558 --- /dev/null +++ b/script/Migration.s.sol @@ -0,0 +1,149 @@ +// 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; + + if (network() == DefaultNetwork.RoninTestnet.key()) { + address defaultAdmin = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; + address defaultPauser = defaultAdmin; + address defaultOperator = defaultAdmin; + address defaultController = defaultAdmin; + + // NameChecker + param.nameChecker.minWord = 2; + param.nameChecker.maxWord = 3; + param.nameChecker.admin = defaultAdmin; + + // OwnedMulticaller + param.ownedMulticaller.admin = defaultAdmin; + + // RNSOperation + param.rnsOperation.admin = defaultAdmin; + + // PublicResolver + param.publicResolver.admin = defaultAdmin; + + // RNSAuction + param.rnsAuction.admin = defaultAdmin; + param.rnsAuction.bidGapRatio = 1000; // 10% + param.rnsAuction.treasury = payable(defaultAdmin); + param.rnsAuction.auctionOperators = _toSingletonArray(defaultOperator); + + // RONRegistrarController + param.ronRegistrarController.admin = defaultAdmin; + param.ronRegistrarController.pauser = defaultPauser; + param.ronRegistrarController.operator = defaultOperator; + param.ronRegistrarController.treasury = payable(defaultAdmin); + param.ronRegistrarController.maxAcceptableAge = 1 days; + param.ronRegistrarController.minRegistrationDuration = 1 days; + param.ronRegistrarController.minCommitmentAge = 10 seconds; + + // RNSDomainPrice + param.rnsDomainPrice.admin = defaultAdmin; + param.rnsDomainPrice.domainPriceOperators = _toSingletonArray(defaultOperator); + param.rnsDomainPrice.renewalFees = new INSDomainPrice.RenewalFee[](3); + param.rnsDomainPrice.renewalFees[0] = INSDomainPrice.RenewalFee(5, uint256(5e18) / 365 days); + param.rnsDomainPrice.renewalFees[1] = INSDomainPrice.RenewalFee(4, uint256(100e18) / 365 days); + param.rnsDomainPrice.renewalFees[2] = INSDomainPrice.RenewalFee(3, uint256(300e18) / 365 days); + param.rnsDomainPrice.taxRatio = 1500; // 15% + param.rnsDomainPrice.maxAcceptableAge = 24 hours; + param.rnsDomainPrice.pyth = IPyth(0xA2aa501b19aff244D90cc15a4Cf739D2725B5729); + param.rnsDomainPrice.domainPriceScaleRule = PeriodScaler({ ratio: 500, period: 30 days * 3 }); + param.rnsDomainPrice.pythIdForRONUSD = 0x4cb9d530b042004b042e165ee0904b12fe534d40dac5fe1c71dfcdb522e6e3c2; + + // RNSUnified + param.rnsUnified.admin = defaultAdmin; + param.rnsUnified.pauser = defaultPauser; + param.rnsUnified.controller = defaultController; + param.rnsUnified.protectedSettler = defaultAdmin; + param.rnsUnified.gracePeriod = 90 days; + param.rnsUnified.baseTokenURI = "https://metadata-rns.skymavis.one/saigon/"; + } else if (network() == DefaultNetwork.RoninMainnet.key()) { + address duke = 0x0F68eDBE14C8f68481771016d7E2871d6a35DE11; + address andy = 0xEd4A9F48a62Fb6FdcfB45Bb00C9f61D1A436E58C; + address harry = 0x0A9E57c71af2b1194C5f573F4bB1e45696c49213; + + address temporaryDeployer = duke; + address temporaryAdmin = duke; + address temporaryPauser = duke; + address temporaryOperator = duke; + address temporaryController = andy; + + address operator = harry; + address payable treasury = payable(andy); + + // NameChecker + param.nameChecker.minWord = 2; + param.nameChecker.maxWord = 3; + param.nameChecker.admin = temporaryAdmin; + + // OwnedMulticaller + param.ownedMulticaller.admin = temporaryDeployer; + + // RNSOperation + param.rnsOperation.admin = temporaryDeployer; + + // PublicResolver + param.publicResolver.admin = temporaryAdmin; + + // RNSAuction + param.rnsAuction.admin = temporaryAdmin; + param.rnsAuction.bidGapRatio = 1000; // 10% + param.rnsAuction.treasury = payable(temporaryAdmin); + param.rnsAuction.auctionOperators = _toSingletonArray(temporaryOperator); + + // RONRegistrarController + param.ronRegistrarController.admin = temporaryAdmin; + param.ronRegistrarController.pauser = temporaryPauser; + param.ronRegistrarController.operator = temporaryOperator; + param.ronRegistrarController.treasury = treasury; + param.ronRegistrarController.maxAcceptableAge = 1 days; + param.ronRegistrarController.minRegistrationDuration = 1 days; + param.ronRegistrarController.minCommitmentAge = 10 seconds; + + // RNSDomainPrice + param.rnsDomainPrice.admin = temporaryAdmin; + param.rnsDomainPrice.domainPriceOperators = _toSingletonArray(operator); + param.rnsDomainPrice.renewalFees = new INSDomainPrice.RenewalFee[](4); + param.rnsDomainPrice.renewalFees[0] = INSDomainPrice.RenewalFee(5, uint256(5e18) / 365 days); + param.rnsDomainPrice.renewalFees[1] = INSDomainPrice.RenewalFee(4, uint256(100e18) / 365 days); + param.rnsDomainPrice.renewalFees[2] = INSDomainPrice.RenewalFee(3, uint256(300e18) / 365 days); + param.rnsDomainPrice.renewalFees[3] = INSDomainPrice.RenewalFee(2, uint256(300e18) / 365 days); + param.rnsDomainPrice.taxRatio = 1500; // 15% + param.rnsDomainPrice.maxAcceptableAge = 24 hours; + param.rnsDomainPrice.pyth = IPyth(0x2880aB155794e7179c9eE2e38200202908C17B43); + param.rnsDomainPrice.domainPriceScaleRule = PeriodScaler({ ratio: 500, period: 30 days * 3 }); + param.rnsDomainPrice.pythIdForRONUSD = 0x97cfe19da9153ef7d647b011c5e355142280ddb16004378573e6494e499879f3; + + // RNSUnified + param.rnsUnified.admin = temporaryAdmin; + param.rnsUnified.pauser = temporaryPauser; + param.rnsUnified.controller = temporaryController; + param.rnsUnified.protectedSettler = temporaryAdmin; + param.rnsUnified.gracePeriod = 90 days; + param.rnsUnified.baseTokenURI = "https://metadata-rns.roninchain.com/ronin/"; + } else { + revert("Missing param"); + } + + rawArgs = abi.encode(param); + } + + function _toSingletonArray(address addr) internal pure returns (address[] memory arr) { + arr = new address[](1); + arr[0] = addr; + } +} 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..cbf39f5d 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.NameCheckerParam memory param = config.sharedArguments().nameChecker; + 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..664f8fca 100644 --- a/script/contracts/OwnedMulticallerDeploy.s.sol +++ b/script/contracts/OwnedMulticallerDeploy.s.sol @@ -1,16 +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 { 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()); + ISharedArgument.OwnedMulticallerParam memory param = config.sharedArguments().ownedMulticaller; + args = abi.encode(param.admin); } - 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..569ddbfe 100644 --- a/script/contracts/PublicResolverDeploy.s.sol +++ b/script/contracts/PublicResolverDeploy.s.sol @@ -1,29 +1,34 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { BaseDeploy, ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; +import { Migration, ISharedArgument } 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) { + ISharedArgument.PublicResolverParam memory param = config.sharedArguments().publicResolver; args = abi.encodeCall( PublicResolver.initialize, ( - RNSUnified(loadContractOrDeploy(ContractKey.RNSUnified)), - RNSReverseRegistrar(loadContractOrDeploy(ContractKey.RNSReverseRegistrar)) + address(param.rnsUnified) == address(0x0) + ? RNSUnified(loadContractOrDeploy(Contract.RNSUnified.key())) + : param.rnsUnified, + address(param.rnsReverseRegistrar) == address(0x0) + ? RNSReverseRegistrar(loadContractOrDeploy(Contract.RNSReverseRegistrar.key())) + : param.rnsReverseRegistrar ) ); } - 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..d3ce9997 100644 --- a/script/contracts/RNSAuctionDeploy.s.sol +++ b/script/contracts/RNSAuctionDeploy.s.sol @@ -3,29 +3,31 @@ 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.RNSAuctionParam memory param = config.sharedArguments().rnsAuction; args = abi.encodeCall( RNSAuction.initialize, ( - config.admin, - config.auctionOperators, - RNSUnified(loadContractOrDeploy(ContractKey.RNSUnified)), - config.treasury, - config.bidGapRatio + param.admin, + param.auctionOperators, + address(param.rnsUnified) == address(0x0) + ? RNSUnified(loadContractOrDeploy(Contract.RNSUnified.key())) + : param.rnsUnified, + 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..03a121f1 100644 --- a/script/contracts/RNSDomainPriceDeploy.s.sol +++ b/script/contracts/RNSDomainPriceDeploy.s.sol @@ -3,33 +3,35 @@ 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.RNSDomainPriceParam memory param = config.sharedArguments().rnsDomainPrice; 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, + address(param.rnsAuction) == address(0x0) + ? RNSAuction(loadContractOrDeploy(Contract.RNSAuction.key())) + : param.rnsAuction, + 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..e8f7fe6e 100644 --- a/script/contracts/RNSOperationDeploy.s.sol +++ b/script/contracts/RNSOperationDeploy.s.sol @@ -1,21 +1,22 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import { ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; +import { Migration, ISharedArgument } 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) { + ISharedArgument.RNSOperationParam memory param = config.sharedArguments().rnsOperation; args = abi.encode( - _config.getAddressFromCurrentNetwork(ContractKey.RNSUnified), - _config.getAddressFromCurrentNetwork(ContractKey.PublicResolver), - _config.getAddressFromCurrentNetwork(ContractKey.RNSAuction), - _config.getAddressFromCurrentNetwork(ContractKey.RNSDomainPrice) + param.rnsUnified == address(0x0) ? loadContract(Contract.RNSUnified.key()) : param.rnsUnified, + param.publicResolver == address(0x0) ? loadContract(Contract.PublicResolver.key()) : param.publicResolver, + param.rnsAuction == address(0x0) ? loadContract(Contract.RNSAuction.key()) : param.rnsAuction, + param.rnsDomainPrice == address(0x0) ? loadContract(Contract.RNSDomainPrice.key()) : param.rnsDomainPrice ); } - 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..94547f56 100644 --- a/script/contracts/RNSReverseRegistrarDeploy.s.sol +++ b/script/contracts/RNSReverseRegistrarDeploy.s.sol @@ -3,24 +3,28 @@ 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(); - address[] memory operators = new address[](1); - operators[0] = config.operator; + ISharedArgument.RNSReverseRegistrarParam memory param = config.sharedArguments().rnsReverseRegistrar; args = abi.encodeCall( - RNSReverseRegistrar.initialize, (config.admin, RNSUnified(loadContractOrDeploy(ContractKey.RNSUnified))) + RNSReverseRegistrar.initialize, + ( + param.admin, + address(param.rnsUnified) == address(0x0) + ? RNSUnified(loadContractOrDeploy(Contract.RNSUnified.key())) + : param.rnsUnified + ) ); } - 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..3389921a 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.RNSUnifiedParam memory param = config.sharedArguments().rnsUnified; 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..b09ead1a 100644 --- a/script/contracts/RONRegistrarControllerDeploy.s.sol +++ b/script/contracts/RONRegistrarControllerDeploy.s.sol @@ -6,39 +6,45 @@ 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(); - address[] memory operators = new address[](1); - operators[0] = config.operator; + ISharedArgument.RONRegistrarControllerParam memory param = config.sharedArguments().ronRegistrarController; 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, + address(param.rnsUnified) == address(0x0) + ? RNSUnified(loadContractOrDeploy(Contract.RNSUnified.key())) + : param.rnsUnified, + address(param.nameChecker) == address(0x0) + ? NameChecker(loadContractOrDeploy(Contract.NameChecker.key())) + : param.nameChecker, + address(param.rnsDomainPrice) == address(0x0) + ? RNSDomainPrice(loadContractOrDeploy(Contract.RNSDomainPrice.key())) + : param.rnsDomainPrice, + address(param.rnsReverseRegistrar) == address(0x0) + ? RNSReverseRegistrar(loadContractOrDeploy(Contract.RNSReverseRegistrar.key())) + : param.rnsReverseRegistrar ) ); } - 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..39afa945 --- /dev/null +++ b/script/interfaces/ISharedArgument.sol @@ -0,0 +1,102 @@ +// 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"; +import { NameChecker } from "@rns-contracts/NameChecker.sol"; +import { PublicResolver } from "@rns-contracts/resolvers/PublicResolver.sol"; +import { RNSAuction } from "@rns-contracts/RNSAuction.sol"; +import { RNSReverseRegistrar } from "@rns-contracts/RNSReverseRegistrar.sol"; +import { RNSUnified } from "@rns-contracts/RNSUnified.sol"; +import { RNSDomainPrice } from "@rns-contracts/RNSDomainPrice.sol"; +import { RNSOperation } from "@rns-contracts/utils/RNSOperation.sol"; +import { OwnedMulticaller } from "@rns-contracts/utils/OwnedMulticaller.sol"; + +interface ISharedArgument is IGeneralConfig { + struct NameCheckerParam { + address admin; + uint8 minWord; + uint8 maxWord; + } + + struct OwnedMulticallerParam { + address admin; + } + + struct PublicResolverParam { + address admin; + RNSUnified rnsUnified; + RNSReverseRegistrar rnsReverseRegistrar; + } + + struct RNSAuctionParam { + address admin; + address[] auctionOperators; + RNSUnified rnsUnified; + address payable treasury; + uint256 bidGapRatio; + } + + struct RNSDomainPriceParam { + address admin; + address overrider; + address[] domainPriceOperators; + INSDomainPrice.RenewalFee[] renewalFees; + uint256 taxRatio; + PeriodScaler domainPriceScaleRule; + IPyth pyth; + RNSAuction rnsAuction; + uint256 maxAcceptableAge; + bytes32 pythIdForRONUSD; + } + + struct RNSOperationParam { + address admin; + address rnsUnified; + address publicResolver; + address rnsAuction; + address rnsDomainPrice; + } + + struct RNSReverseRegistrarParam { + address admin; + RNSUnified rnsUnified; + } + + struct RNSUnifiedParam { + address admin; + address pauser; + address controller; + address protectedSettler; + uint64 gracePeriod; + string baseTokenURI; + } + + struct RONRegistrarControllerParam { + address admin; + address pauser; + address operator; + address payable treasury; + uint256 maxAcceptableAge; + uint256 minCommitmentAge; + uint256 minRegistrationDuration; + RNSUnified rnsUnified; + NameChecker nameChecker; + RNSDomainPrice rnsDomainPrice; + RNSReverseRegistrar rnsReverseRegistrar; + } + + struct SharedParameter { + NameCheckerParam nameChecker; + OwnedMulticallerParam ownedMulticaller; + PublicResolverParam publicResolver; + RNSAuctionParam rnsAuction; + RNSDomainPriceParam rnsDomainPrice; + RNSOperationParam rnsOperation; + RNSReverseRegistrarParam rnsReverseRegistrar; + RNSUnifiedParam rnsUnified; + RONRegistrarControllerParam ronRegistrarController; + } + + 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/src/RNSAuction.sol b/src/RNSAuction.sol index 86f66cfa..2a5d41a2 100644 --- a/src/RNSAuction.sol +++ b/src/RNSAuction.sol @@ -309,7 +309,6 @@ contract RNSAuction is Initializable, AccessControlEnumerable, INSAuction { /** * @inheritdoc INSAuction */ - function setBidGapRatio(uint256 ratio) external onlyRole(DEFAULT_ADMIN_ROLE) { _setBidGapRatio(ratio); } 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..ea7cb2b9 100755 --- a/upload-sig.sh +++ b/upload-sig.sh @@ -1,78 +1 @@ -set -ex -# Default network value -networkName="ronin-testnet" -# Function to print usage and exit -usage() { - echo "Usage: $0 -c " - echo " -c: Specify the network (ronin-testnet or ronin-mainnet)" - exit 1 -} -# Parse command-line options -while getopts "c:" opt; do - case $opt in - c) - case "$OPTARG" in - ronin-testnet) - child_folder="ronin-testnet" - networkName="ronin-testnet" - ;; - ronin-mainnet) - child_folder="ronin-mainnet" - networkName="ronin-mainnet" - ;; - *) - echo "Unknown network specified: $OPTARG" - usage - ;; - esac - ;; - *) - usage - ;; - esac -done -# Shift the processed options out of the argument list -shift $((OPTIND - 1)) -# Define the deployments folder by concatenating it with the child folder -folder="deployments/$child_folder" -# Check if the specified folder exists -if [ ! -d "$folder" ]; then - echo "Error: The specified folder does not exist for the selected network." - exit 1 -fi -for file in "$folder"/*.json; do - # Check if the file exists and is a regular file - if [ -f "$file" ] && [ "$(basename "$file")" != ".chainId" ]; then - # Extract contractName and address from the JSON file - contractName=$(jq -r '.contractName' "$file") - # Check if contractName and address are not empty - if [ -n "$contractName" ]; then - ( - # Initialize arrays to store events and errors keys - events_keys=() - errors_keys=() - # Get events and errors JSON data - events=$(forge inspect $contractName events) - errors=$(forge inspect $contractName errors) - # Extract keys and populate the arrays - while read -r key; do - events_keys+=("\"event $key\"") - done <<<"$(echo "$events" | jq -r 'keys[]')" - while read -r key; do - errors_keys+=("\"$key\"") - done <<<"$(echo "$errors" | jq -r 'keys[]')" - # Combine keys from events and errors - all_keys=("${events_keys[@]}" "${errors_keys[@]}") - # Call cast upload-signature - cast upload-signature "${all_keys[@]}" - ) & - else - echo "Error: Missing contractName or address in $file" - fi - fi - -done - -forge selectors upload --all & - -wait +source lib/foundry-deployment-kit/upload-sig.sh \ No newline at end of file