From 8ffed4d9e7e1c0569d2d9a70f456e205c78e98b3 Mon Sep 17 00:00:00 2001
From: TuDo1403 <tudo.dev@gmail.com>
Date: Thu, 16 May 2024 22:48:54 +0700
Subject: [PATCH] script: add revoke role script

---
 .gitignore                                    |  2 +-
 .../01_Revoke_Roles.s.sol                     | 43 +++++++++++++++++++
 2 files changed, 44 insertions(+), 1 deletion(-)
 create mode 100644 script/20240516-revoke-roles/01_Revoke_Roles.s.sol

diff --git a/.gitignore b/.gitignore
index 516242c..986bc1f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,4 +23,4 @@ yarn-error.log
 .yarnrc.yml
 script/data/*
 dependencies
-deployments/**/exported_address
\ No newline at end of file
+deployments/**/exported_address
diff --git a/script/20240516-revoke-roles/01_Revoke_Roles.s.sol b/script/20240516-revoke-roles/01_Revoke_Roles.s.sol
new file mode 100644
index 0000000..0f00b59
--- /dev/null
+++ b/script/20240516-revoke-roles/01_Revoke_Roles.s.sol
@@ -0,0 +1,43 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.19;
+
+import { Migration } from "script/Migration.s.sol";
+import { Contract } from "script/utils/Contract.sol";
+import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
+import { ERC721 } from "@openzeppelin/contracts/token/ERC721/ERC721.sol";
+import { AccessControlEnumerable } from "@openzeppelin/contracts/access/AccessControlEnumerable.sol";
+import { LibRNSDomain } from "src/libraries/LibRNSDomain.sol";
+import { DefaultNetwork } from "foundry-deployment-kit/utils/DefaultNetwork.sol";
+
+contract Migration__01_Revoke_Roles is Migration {
+  address duke = 0x0F68eDBE14C8f68481771016d7E2871d6a35DE11;
+  address multisig = 0x1FF1edE0242317b8C4229fC59E64DD93952019ef;
+
+  function run() external onlyOn(DefaultNetwork.RoninMainnet.key()) {
+    address[] memory contracts = new address[](5);
+    contracts[0] = loadContract(Contract.RNSDomainPrice.key());
+    contracts[1] = loadContract(Contract.RONRegistrarController.key());
+    contracts[2] = loadContract(Contract.NameChecker.key());
+    contracts[3] = loadContract(Contract.RNSUnified.key());
+    contracts[4] = loadContract(Contract.RNSAuction.key());
+
+    vm.startBroadcast(duke);
+
+    Ownable(loadContract(Contract.OwnedMulticaller.key())).transferOwnership(multisig);
+    Ownable(loadContract(Contract.RNSReverseRegistrar.key())).transferOwnership(multisig);
+    // Transfer .ron domain ownership to multisig
+    ERC721(loadContract(Contract.RNSUnified.key())).transferFrom(duke, multisig, LibRNSDomain.RON_ID);
+
+    for (uint256 i; i < contracts.length; i++) {
+      AccessControlEnumerable(contracts[i]).grantRole(0x0, multisig);
+      AccessControlEnumerable(contracts[i]).renounceRole(0x0, duke);
+
+      assertTrue(
+        AccessControlEnumerable(contracts[i]).getRoleMemberCount(0x0) > 0,
+        string.concat("Role is empty", "contract: ", vm.toString(contracts[i]))
+      );
+    }
+
+    vm.stopBroadcast();
+  }
+}