@diamondslab/diamonds 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/dist/core/CallbackManager.d.ts +13 -0
  2. package/dist/core/CallbackManager.d.ts.map +1 -0
  3. package/dist/core/CallbackManager.js +95 -0
  4. package/dist/core/CallbackManager.js.map +1 -0
  5. package/dist/core/DeploymentManager.d.ts +10 -0
  6. package/dist/core/DeploymentManager.d.ts.map +1 -0
  7. package/dist/core/DeploymentManager.js +50 -0
  8. package/dist/core/DeploymentManager.js.map +1 -0
  9. package/dist/core/Diamond.d.ts +56 -0
  10. package/dist/core/Diamond.d.ts.map +1 -0
  11. package/dist/core/Diamond.js +152 -0
  12. package/dist/core/Diamond.js.map +1 -0
  13. package/dist/core/DiamondDeployer.d.ts +10 -0
  14. package/dist/core/DiamondDeployer.d.ts.map +1 -0
  15. package/dist/core/DiamondDeployer.js +33 -0
  16. package/dist/core/DiamondDeployer.js.map +1 -0
  17. package/{src/core/index.ts → dist/core/index.d.ts} +2 -1
  18. package/dist/core/index.d.ts.map +1 -0
  19. package/dist/core/index.js +12 -0
  20. package/dist/core/index.js.map +1 -0
  21. package/{src/index.ts → dist/index.d.ts} +1 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +22 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/repositories/DBDeploymentRepository.d.ts +2 -0
  26. package/dist/repositories/DBDeploymentRepository.d.ts.map +1 -0
  27. package/{src/repositories/DBDeploymentRepository.ts → dist/repositories/DBDeploymentRepository.js} +3 -4
  28. package/dist/repositories/DBDeploymentRepository.js.map +1 -0
  29. package/dist/repositories/DeploymentRepository.d.ts +8 -0
  30. package/dist/repositories/DeploymentRepository.d.ts.map +1 -0
  31. package/dist/repositories/DeploymentRepository.js +7 -0
  32. package/dist/repositories/DeploymentRepository.js.map +1 -0
  33. package/dist/repositories/FileDeploymentRepository.d.ts +18 -0
  34. package/dist/repositories/FileDeploymentRepository.d.ts.map +1 -0
  35. package/dist/repositories/FileDeploymentRepository.js +58 -0
  36. package/dist/repositories/FileDeploymentRepository.js.map +1 -0
  37. package/dist/repositories/databaseHandler.d.ts +2 -0
  38. package/dist/repositories/databaseHandler.d.ts.map +1 -0
  39. package/{src/repositories/databaseHandler.ts → dist/repositories/databaseHandler.js} +3 -3
  40. package/dist/repositories/databaseHandler.js.map +1 -0
  41. package/{src/repositories/index.ts → dist/repositories/index.d.ts} +1 -1
  42. package/dist/repositories/index.d.ts.map +1 -0
  43. package/dist/repositories/index.js +20 -0
  44. package/dist/repositories/index.js.map +1 -0
  45. package/dist/repositories/jsonFileHandler.d.ts +81 -0
  46. package/dist/repositories/jsonFileHandler.d.ts.map +1 -0
  47. package/dist/repositories/jsonFileHandler.js +223 -0
  48. package/dist/repositories/jsonFileHandler.js.map +1 -0
  49. package/dist/repositories/prismaDBHandler.d.ts +2 -0
  50. package/dist/repositories/prismaDBHandler.d.ts.map +1 -0
  51. package/{src/repositories/prismaDBHandler.ts → dist/repositories/prismaDBHandler.js} +3 -1
  52. package/dist/repositories/prismaDBHandler.js.map +1 -0
  53. package/dist/schemas/DeploymentSchema.d.ts +95 -0
  54. package/dist/schemas/DeploymentSchema.d.ts.map +1 -0
  55. package/dist/schemas/DeploymentSchema.js +56 -0
  56. package/dist/schemas/DeploymentSchema.js.map +1 -0
  57. package/{src/schemas/index.ts → dist/schemas/index.d.ts} +1 -0
  58. package/dist/schemas/index.d.ts.map +1 -0
  59. package/dist/schemas/index.js +18 -0
  60. package/dist/schemas/index.js.map +1 -0
  61. package/dist/strategies/BaseDeploymentStrategy.d.ts +41 -0
  62. package/dist/strategies/BaseDeploymentStrategy.d.ts.map +1 -0
  63. package/dist/strategies/BaseDeploymentStrategy.js +545 -0
  64. package/dist/strategies/BaseDeploymentStrategy.js.map +1 -0
  65. package/dist/strategies/DeploymentStrategy.d.ts +19 -0
  66. package/dist/strategies/DeploymentStrategy.d.ts.map +1 -0
  67. package/dist/strategies/DeploymentStrategy.js +3 -0
  68. package/dist/strategies/DeploymentStrategy.js.map +1 -0
  69. package/dist/strategies/LocalDeploymentStrategy.d.ts +4 -0
  70. package/dist/strategies/LocalDeploymentStrategy.d.ts.map +1 -0
  71. package/dist/strategies/LocalDeploymentStrategy.js +8 -0
  72. package/dist/strategies/LocalDeploymentStrategy.js.map +1 -0
  73. package/dist/strategies/OZDefenderDeploymentStrategy.d.ts +62 -0
  74. package/dist/strategies/OZDefenderDeploymentStrategy.d.ts.map +1 -0
  75. package/dist/strategies/OZDefenderDeploymentStrategy.js +757 -0
  76. package/dist/strategies/OZDefenderDeploymentStrategy.js.map +1 -0
  77. package/dist/strategies/RPCDeploymentStrategy.d.ts +139 -0
  78. package/dist/strategies/RPCDeploymentStrategy.d.ts.map +1 -0
  79. package/dist/strategies/RPCDeploymentStrategy.js +710 -0
  80. package/dist/strategies/RPCDeploymentStrategy.js.map +1 -0
  81. package/{src/strategies/index.ts → dist/strategies/index.d.ts} +2 -1
  82. package/dist/strategies/index.d.ts.map +1 -0
  83. package/dist/strategies/index.js +12 -0
  84. package/dist/strategies/index.js.map +1 -0
  85. package/dist/types/config.d.ts +35 -0
  86. package/dist/types/config.d.ts.map +1 -0
  87. package/dist/types/config.js +3 -0
  88. package/dist/types/config.js.map +1 -0
  89. package/dist/types/defender.d.ts +22 -0
  90. package/dist/types/defender.d.ts.map +1 -0
  91. package/dist/types/defender.js +3 -0
  92. package/dist/types/defender.js.map +1 -0
  93. package/dist/types/deployments.d.ts +71 -0
  94. package/dist/types/deployments.d.ts.map +1 -0
  95. package/dist/types/deployments.js +20 -0
  96. package/dist/types/deployments.js.map +1 -0
  97. package/{src/types/index.ts → dist/types/index.d.ts} +2 -1
  98. package/dist/types/index.d.ts.map +1 -0
  99. package/dist/types/index.js +21 -0
  100. package/dist/types/index.js.map +1 -0
  101. package/dist/types/rpc.d.ts +35 -0
  102. package/dist/types/rpc.d.ts.map +1 -0
  103. package/dist/types/rpc.js +3 -0
  104. package/dist/types/rpc.js.map +1 -0
  105. package/dist/utils/common.d.ts +20 -0
  106. package/dist/utils/common.d.ts.map +1 -0
  107. package/dist/utils/common.js +45 -0
  108. package/dist/utils/common.js.map +1 -0
  109. package/dist/utils/configurationResolver.d.ts +30 -0
  110. package/dist/utils/configurationResolver.d.ts.map +1 -0
  111. package/dist/utils/configurationResolver.js +151 -0
  112. package/dist/utils/configurationResolver.js.map +1 -0
  113. package/dist/utils/contractMapping.d.ts +29 -0
  114. package/dist/utils/contractMapping.d.ts.map +1 -0
  115. package/dist/utils/contractMapping.js +224 -0
  116. package/dist/utils/contractMapping.js.map +1 -0
  117. package/dist/utils/defenderClients.d.ts +5 -0
  118. package/dist/utils/defenderClients.d.ts.map +1 -0
  119. package/dist/utils/defenderClients.js +21 -0
  120. package/dist/utils/defenderClients.js.map +1 -0
  121. package/dist/utils/defenderStore.d.ts +14 -0
  122. package/dist/utils/defenderStore.d.ts.map +1 -0
  123. package/dist/utils/defenderStore.js +92 -0
  124. package/dist/utils/defenderStore.js.map +1 -0
  125. package/dist/utils/diamondAbiGenerator.d.ts +113 -0
  126. package/dist/utils/diamondAbiGenerator.d.ts.map +1 -0
  127. package/dist/utils/diamondAbiGenerator.js +415 -0
  128. package/dist/utils/diamondAbiGenerator.js.map +1 -0
  129. package/dist/utils/diffDeployedFacets.d.ts +26 -0
  130. package/dist/utils/diffDeployedFacets.d.ts.map +1 -0
  131. package/dist/utils/diffDeployedFacets.js +106 -0
  132. package/dist/utils/diffDeployedFacets.js.map +1 -0
  133. package/{src/utils/index.ts → dist/utils/index.d.ts} +2 -1
  134. package/dist/utils/index.d.ts.map +1 -0
  135. package/dist/utils/index.js +35 -0
  136. package/dist/utils/index.js.map +1 -0
  137. package/dist/utils/loupe.d.ts +44 -0
  138. package/dist/utils/loupe.d.ts.map +1 -0
  139. package/dist/utils/loupe.js +128 -0
  140. package/dist/utils/loupe.js.map +1 -0
  141. package/dist/utils/rpcStore.d.ts +36 -0
  142. package/dist/utils/rpcStore.d.ts.map +1 -0
  143. package/dist/utils/rpcStore.js +166 -0
  144. package/dist/utils/rpcStore.js.map +1 -0
  145. package/dist/utils/signer.d.ts +36 -0
  146. package/dist/utils/signer.d.ts.map +1 -0
  147. package/dist/utils/signer.js +91 -0
  148. package/dist/utils/signer.js.map +1 -0
  149. package/dist/utils/txlogging.d.ts +13 -0
  150. package/dist/utils/txlogging.d.ts.map +1 -0
  151. package/dist/utils/txlogging.js +87 -0
  152. package/dist/utils/txlogging.js.map +1 -0
  153. package/dist/utils/workspaceSetup.d.ts +32 -0
  154. package/dist/utils/workspaceSetup.d.ts.map +1 -0
  155. package/dist/utils/workspaceSetup.js +311 -0
  156. package/dist/utils/workspaceSetup.js.map +1 -0
  157. package/package.json +3 -7
  158. package/docs/DIAMOND_ABI_CONFIGURATION_SUMMARY.md +0 -40
  159. package/docs/DIAMOND_ABI_GENERATION.md +0 -220
  160. package/docs/DIAMOND_ABI_GENERATOR_EXAMPLES.md +0 -1204
  161. package/docs/DIAMOND_ABI_GENERATOR_IMPLEMENTATION.md +0 -947
  162. package/docs/DIAMOND_ABI_GENERATOR_QUICK_REFERENCE.md +0 -336
  163. package/docs/README-DEFENDER.md +0 -394
  164. package/docs/README_DIAMOND_ABI_GENERATOR.md +0 -303
  165. package/docs/ROADMAP.md +0 -250
  166. package/docs/assets/image.png +0 -0
  167. package/docs/defender-integration.md +0 -451
  168. package/docs/diamond_module-BaseStrategy_design-v2.uxf +0 -247
  169. package/docs/diamond_module-BaseStrategy_design.uxf +0 -272
  170. package/docs/monitoring-troubleshooting.md +0 -556
  171. package/docs/testing-guide.md +0 -713
  172. package/examples/Diamond_Config_and_Deployment_examples/diamonds/ProxyDiamond/callbacks/ERC20ProxyFacet.ts +0 -31
  173. package/examples/Diamond_Config_and_Deployment_examples/diamonds/ProxyDiamond/proxydiamond.config.json +0 -27
  174. package/examples/Local_Hardhat_Deployer_Script_example/LocalDiamondDeployer.ts +0 -180
  175. package/examples/OZ_Defender_Deployer_Script_example/OZDiamondDeployer.ts +0 -107
  176. package/examples/OZ_Defender_Deployer_Script_example/run-oz-deploy.ts +0 -17
  177. package/examples/Test_examples/ProxyDiamondDeployment.test.ts +0 -202
  178. package/examples/defender-deployment/.env.example +0 -35
  179. package/examples/defender-deployment/contracts/ExampleDiamond.sol +0 -41
  180. package/examples/defender-deployment/contracts/ExampleFacet1.sol +0 -84
  181. package/examples/defender-deployment/contracts/ExampleFacet2.sol +0 -104
  182. package/examples/defender-deployment/contracts/UpgradeFacet.sol +0 -92
  183. package/examples/defender-deployment/deploy-script.ts +0 -170
  184. package/examples/defender-deployment/diamond-config.json +0 -36
  185. package/examples/defender-deployment/upgrade-script.ts +0 -237
  186. package/examples/hardhat-diamonds-config.example.ts +0 -41
  187. package/src/core/CallbackManager.ts +0 -70
  188. package/src/core/DeploymentManager.ts +0 -64
  189. package/src/core/Diamond.ts +0 -197
  190. package/src/core/DiamondDeployer.ts +0 -36
  191. package/src/repositories/DeploymentRepository.ts +0 -12
  192. package/src/repositories/FileDeploymentRepository.ts +0 -67
  193. package/src/repositories/jsonFileHandler.ts +0 -252
  194. package/src/schemas/DeploymentSchema.ts +0 -71
  195. package/src/strategies/BaseDeploymentStrategy.ts +0 -649
  196. package/src/strategies/DeploymentStrategy.ts +0 -25
  197. package/src/strategies/LocalDeploymentStrategy.ts +0 -5
  198. package/src/strategies/OZDefenderDeploymentStrategy.ts +0 -849
  199. package/src/strategies/RPCDeploymentStrategy.ts +0 -881
  200. package/src/types/config.ts +0 -34
  201. package/src/types/defender.ts +0 -24
  202. package/src/types/deployments.ts +0 -102
  203. package/src/types/rpc.ts +0 -37
  204. package/src/utils/common.ts +0 -54
  205. package/src/utils/configurationResolver.ts +0 -141
  206. package/src/utils/contractMapping.ts +0 -220
  207. package/src/utils/defenderClients.ts +0 -22
  208. package/src/utils/defenderStore.ts +0 -62
  209. package/src/utils/diamondAbiGenerator.ts +0 -523
  210. package/src/utils/diffDeployedFacets.ts +0 -131
  211. package/src/utils/loupe.ts +0 -159
  212. package/src/utils/rpcStore.ts +0 -152
  213. package/src/utils/signer.ts +0 -93
  214. package/src/utils/txlogging.ts +0 -97
  215. package/src/utils/workspaceSetup.ts +0 -315
@@ -1,84 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.17;
3
-
4
- contract ExampleFacet1 {
5
- bytes32 constant STORAGE_POSITION = keccak256("example.facet1.storage");
6
-
7
- struct FacetStorage {
8
- uint256 value;
9
- bool initialized;
10
- address owner;
11
- string name;
12
- }
13
-
14
- function facetStorage() internal pure returns (FacetStorage storage fs) {
15
- bytes32 position = STORAGE_POSITION;
16
- assembly {
17
- fs.slot := position
18
- }
19
- }
20
-
21
- event Initialized(address indexed owner, string name);
22
- event ValueSet(uint256 oldValue, uint256 newValue);
23
- event UpgradedToV1(uint256 timestamp);
24
-
25
- function initialize() external {
26
- FacetStorage storage fs = facetStorage();
27
- require(!fs.initialized, "Already initialized");
28
-
29
- fs.initialized = true;
30
- fs.owner = msg.sender;
31
- fs.name = "ExampleFacet1";
32
- fs.value = 100;
33
-
34
- emit Initialized(msg.sender, fs.name);
35
- }
36
-
37
- function setValue(uint256 _value) external {
38
- FacetStorage storage fs = facetStorage();
39
- require(fs.initialized, "Not initialized");
40
- require(msg.sender == fs.owner, "Not owner");
41
-
42
- uint256 oldValue = fs.value;
43
- fs.value = _value;
44
-
45
- emit ValueSet(oldValue, _value);
46
- }
47
-
48
- function getValue() external view returns (uint256) {
49
- FacetStorage storage fs = facetStorage();
50
- return fs.value;
51
- }
52
-
53
- function getName() external view returns (string memory) {
54
- FacetStorage storage fs = facetStorage();
55
- return fs.name;
56
- }
57
-
58
- function getOwner() external view returns (address) {
59
- FacetStorage storage fs = facetStorage();
60
- return fs.owner;
61
- }
62
-
63
- function isInitialized() external view returns (bool) {
64
- FacetStorage storage fs = facetStorage();
65
- return fs.initialized;
66
- }
67
-
68
- // Version 1.0 upgrade function
69
- function upgradeToV1() external {
70
- FacetStorage storage fs = facetStorage();
71
- require(fs.initialized, "Not initialized");
72
- require(msg.sender == fs.owner, "Not owner");
73
-
74
- // Upgrade logic here
75
- fs.name = "ExampleFacet1_V1";
76
-
77
- emit UpgradedToV1(block.timestamp);
78
- }
79
-
80
- // Version selector for upgrades
81
- function version() external pure returns (string memory) {
82
- return "1.0.0";
83
- }
84
- }
@@ -1,104 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.17;
3
-
4
- contract ExampleFacet2 {
5
- bytes32 constant STORAGE_POSITION = keccak256("example.facet2.storage");
6
-
7
- struct FacetStorage {
8
- mapping(address => uint256) balances;
9
- uint256 totalSupply;
10
- bool setupComplete;
11
- uint256 setupTimestamp;
12
- }
13
-
14
- function facetStorage() internal pure returns (FacetStorage storage fs) {
15
- bytes32 position = STORAGE_POSITION;
16
- assembly {
17
- fs.slot := position
18
- }
19
- }
20
-
21
- event Setup(uint256 timestamp);
22
- event BalanceUpdated(address indexed account, uint256 oldBalance, uint256 newBalance);
23
- event Transfer(address indexed from, address indexed to, uint256 amount);
24
-
25
- function setup() external {
26
- FacetStorage storage fs = facetStorage();
27
- require(!fs.setupComplete, "Already setup");
28
-
29
- fs.setupComplete = true;
30
- fs.setupTimestamp = block.timestamp;
31
- fs.totalSupply = 1000000; // 1M tokens
32
- fs.balances[msg.sender] = fs.totalSupply;
33
-
34
- emit Setup(block.timestamp);
35
- emit BalanceUpdated(msg.sender, 0, fs.totalSupply);
36
- }
37
-
38
- function isSetupComplete() external view returns (bool) {
39
- FacetStorage storage fs = facetStorage();
40
- return fs.setupComplete;
41
- }
42
-
43
- function getSetupTimestamp() external view returns (uint256) {
44
- FacetStorage storage fs = facetStorage();
45
- return fs.setupTimestamp;
46
- }
47
-
48
- function balanceOf(address account) external view returns (uint256) {
49
- FacetStorage storage fs = facetStorage();
50
- return fs.balances[account];
51
- }
52
-
53
- function totalSupply() external view returns (uint256) {
54
- FacetStorage storage fs = facetStorage();
55
- return fs.totalSupply;
56
- }
57
-
58
- function transfer(address to, uint256 amount) external returns (bool) {
59
- FacetStorage storage fs = facetStorage();
60
- require(fs.setupComplete, "Not setup");
61
- require(fs.balances[msg.sender] >= amount, "Insufficient balance");
62
-
63
- uint256 fromBalance = fs.balances[msg.sender];
64
- uint256 toBalance = fs.balances[to];
65
-
66
- fs.balances[msg.sender] = fromBalance - amount;
67
- fs.balances[to] = toBalance + amount;
68
-
69
- emit BalanceUpdated(msg.sender, fromBalance, fs.balances[msg.sender]);
70
- emit BalanceUpdated(to, toBalance, fs.balances[to]);
71
- emit Transfer(msg.sender, to, amount);
72
-
73
- return true;
74
- }
75
-
76
- function mint(address to, uint256 amount) external returns (bool) {
77
- FacetStorage storage fs = facetStorage();
78
- require(fs.setupComplete, "Not setup");
79
-
80
- uint256 oldBalance = fs.balances[to];
81
- fs.balances[to] = oldBalance + amount;
82
- fs.totalSupply += amount;
83
-
84
- emit BalanceUpdated(to, oldBalance, fs.balances[to]);
85
- emit Transfer(address(0), to, amount);
86
-
87
- return true;
88
- }
89
-
90
- function burn(uint256 amount) external returns (bool) {
91
- FacetStorage storage fs = facetStorage();
92
- require(fs.setupComplete, "Not setup");
93
- require(fs.balances[msg.sender] >= amount, "Insufficient balance");
94
-
95
- uint256 oldBalance = fs.balances[msg.sender];
96
- fs.balances[msg.sender] = oldBalance - amount;
97
- fs.totalSupply -= amount;
98
-
99
- emit BalanceUpdated(msg.sender, oldBalance, fs.balances[msg.sender]);
100
- emit Transfer(msg.sender, address(0), amount);
101
-
102
- return true;
103
- }
104
- }
@@ -1,92 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.17;
3
-
4
- contract UpgradeFacet {
5
- bytes32 constant STORAGE_POSITION = keccak256("upgrade.facet.storage");
6
-
7
- struct FacetStorage {
8
- uint256 upgradeCount;
9
- mapping(uint256 => uint256) upgradeTimestamps;
10
- bool initialized;
11
- string[] upgradeLog;
12
- }
13
-
14
- function facetStorage() internal pure returns (FacetStorage storage fs) {
15
- bytes32 position = STORAGE_POSITION;
16
- assembly {
17
- fs.slot := position
18
- }
19
- }
20
-
21
- event Initialized(uint256 timestamp);
22
- event UpgradeLogged(uint256 indexed upgradeId, string description, uint256 timestamp);
23
- event SystemUpgraded(string version, uint256 timestamp);
24
-
25
- function initialize() external {
26
- FacetStorage storage fs = facetStorage();
27
- require(!fs.initialized, "Already initialized");
28
-
29
- fs.initialized = true;
30
- fs.upgradeCount = 0;
31
-
32
- emit Initialized(block.timestamp);
33
- }
34
-
35
- function logUpgrade(string memory description) external {
36
- FacetStorage storage fs = facetStorage();
37
- require(fs.initialized, "Not initialized");
38
-
39
- uint256 upgradeId = fs.upgradeCount++;
40
- fs.upgradeTimestamps[upgradeId] = block.timestamp;
41
- fs.upgradeLog.push(description);
42
-
43
- emit UpgradeLogged(upgradeId, description, block.timestamp);
44
- }
45
-
46
- function getUpgradeCount() external view returns (uint256) {
47
- FacetStorage storage fs = facetStorage();
48
- return fs.upgradeCount;
49
- }
50
-
51
- function getUpgradeTimestamp(uint256 upgradeId) external view returns (uint256) {
52
- FacetStorage storage fs = facetStorage();
53
- require(upgradeId < fs.upgradeCount, "Invalid upgrade ID");
54
- return fs.upgradeTimestamps[upgradeId];
55
- }
56
-
57
- function getUpgradeLog() external view returns (string[] memory) {
58
- FacetStorage storage fs = facetStorage();
59
- return fs.upgradeLog;
60
- }
61
-
62
- function getLatestUpgrade() external view returns (string memory, uint256) {
63
- FacetStorage storage fs = facetStorage();
64
- require(fs.upgradeCount > 0, "No upgrades logged");
65
-
66
- uint256 latestId = fs.upgradeCount - 1;
67
- return (fs.upgradeLog[latestId], fs.upgradeTimestamps[latestId]);
68
- }
69
-
70
- function markSystemUpgrade(string memory _version) external {
71
- FacetStorage storage fs = facetStorage();
72
- require(fs.initialized, "Not initialized");
73
-
74
- string memory description = string(abi.encodePacked("System upgrade to version ", _version));
75
-
76
- uint256 upgradeId = fs.upgradeCount++;
77
- fs.upgradeTimestamps[upgradeId] = block.timestamp;
78
- fs.upgradeLog.push(description);
79
-
80
- emit UpgradeLogged(upgradeId, description, block.timestamp);
81
- emit SystemUpgraded(_version, block.timestamp);
82
- }
83
-
84
- function isInitialized() external view returns (bool) {
85
- FacetStorage storage fs = facetStorage();
86
- return fs.initialized;
87
- }
88
-
89
- function version() external pure returns (string memory) {
90
- return "1.0.0";
91
- }
92
- }
@@ -1,170 +0,0 @@
1
- import { ethers } from 'hardhat';
2
- import { Diamond } from '../../src/core/Diamond';
3
- import { DiamondDeployer } from '../../src/core/DiamondDeployer';
4
- import { FileDeploymentRepository } from '../../src/repositories/FileDeploymentRepository';
5
- import { OZDefenderDeploymentStrategy } from '../../src/strategies/OZDefenderDeploymentStrategy';
6
- import * as path from 'path';
7
- import * as fs from 'fs-extra';
8
-
9
- async function main() {
10
- console.log('🚀 Starting Defender deployment...');
11
-
12
- // Get network information
13
- const network = await ethers.provider.getNetwork();
14
- const signers = await ethers.getSigners();
15
- const deployer = signers[0];
16
-
17
- console.log(`📍 Network: ${network.name} (${network.chainId})`);
18
- console.log(`👤 Deployer: ${deployer.address}`);
19
-
20
- // Load configuration
21
- const configPath = path.join(__dirname, 'diamond-config.json');
22
- const exampleConfig = {
23
- diamondName: 'ExampleDiamond',
24
- networkName: network.name,
25
- chainId: network.chainId,
26
- deploymentsPath: path.join(__dirname, 'deployments'),
27
- contractsPath: path.join(__dirname, 'contracts'),
28
- callbacksPath: path.join(__dirname, 'callbacks'),
29
- configFilePath: configPath,
30
- deployedDiamondDataFilePath: path.join(__dirname, 'deployments', `examplediamond-${network.name}-${network.chainId}.json`)
31
- };
32
-
33
- // Ensure directories exist
34
- await fs.ensureDir(exampleConfig.deploymentsPath);
35
- await fs.ensureDir(exampleConfig.callbacksPath);
36
-
37
- // Create diamond instance
38
- const repository = new FileDeploymentRepository(exampleConfig);
39
- const diamond = new Diamond(exampleConfig, repository);
40
-
41
- // Setup provider and signer
42
- diamond.setProvider(ethers.provider);
43
- diamond.setSigner(deployer);
44
-
45
- // Validate environment variables
46
- const requiredEnvVars = [
47
- 'DEFENDER_API_KEY',
48
- 'DEFENDER_API_SECRET',
49
- 'DEFENDER_RELAYER_ADDRESS',
50
- 'DEFENDER_SAFE_ADDRESS'
51
- ];
52
-
53
- for (const envVar of requiredEnvVars) {
54
- if (!process.env[envVar]) {
55
- console.error(`❌ Missing required environment variable: ${envVar}`);
56
- console.log('Please check your .env file and ensure all Defender credentials are set.');
57
- process.exit(1);
58
- }
59
- }
60
-
61
- // Create Defender strategy
62
- const strategy = new OZDefenderDeploymentStrategy(
63
- process.env.DEFENDER_API_KEY!,
64
- process.env.DEFENDER_API_SECRET!,
65
- process.env.DEFENDER_RELAYER_ADDRESS!,
66
- process.env.AUTO_APPROVE === 'true',
67
- process.env.DEFENDER_SAFE_ADDRESS!,
68
- 'Safe',
69
- true // verbose logging
70
- );
71
-
72
- console.log('🛡️ Defender strategy configured');
73
- console.log(`⚙️ Auto-approve: ${process.env.AUTO_APPROVE === 'true' ? 'enabled' : 'disabled'}`);
74
-
75
- // Execute deployment
76
- const diamondDeployer = new DiamondDeployer(diamond, strategy);
77
-
78
- try {
79
- await diamondDeployer.deployDiamond();
80
-
81
- console.log('\n✅ Deployment completed successfully!');
82
-
83
- // Output deployment information
84
- const deployedData = diamond.getDeployedDiamondData();
85
- console.log('\n📊 Deployment Summary:');
86
- console.log(`Diamond Address: ${deployedData.DiamondAddress}`);
87
- console.log(`Deployer Address: ${deployedData.DeployerAddress}`);
88
- console.log(`Network: ${network.name} (Chain ID: ${network.chainId})`);
89
-
90
- console.log('\n📋 Deployed Facets:');
91
- if (deployedData.DeployedFacets) {
92
- Object.entries(deployedData.DeployedFacets).forEach(([name, facet]) => {
93
- console.log(` ${name}:`);
94
- console.log(` Address: ${facet.address}`);
95
- console.log(` Version: ${facet.version}`);
96
- console.log(` Selectors: ${facet.funcSelectors?.length || 0}`);
97
- if (facet.tx_hash) {
98
- console.log(` TX Hash: ${facet.tx_hash}`);
99
- }
100
- });
101
- }
102
-
103
- // Save deployment summary
104
- const summary = {
105
- timestamp: new Date().toISOString(),
106
- network: network.name,
107
- chainId: network.chainId,
108
- deployerAddress: deployer.address,
109
- diamondAddress: deployedData.DiamondAddress,
110
- facets: deployedData.DeployedFacets,
111
- deploymentMethod: 'OpenZeppelin Defender'
112
- };
113
-
114
- const summaryPath = path.join(exampleConfig.deploymentsPath, 'deployment-summary.json');
115
- await fs.writeJson(summaryPath, summary, { spaces: 2 });
116
-
117
- console.log(`\n📄 Deployment summary saved to: ${summaryPath}`);
118
-
119
- // Display next steps
120
- console.log('\n🎯 Next Steps:');
121
- console.log('1. Verify contracts on block explorer');
122
- console.log('2. Test diamond functionality');
123
- console.log('3. Set up monitoring and alerts');
124
- console.log('4. Prepare upgrade scenarios');
125
-
126
- if (process.env.AUTO_APPROVE !== 'true') {
127
- console.log('\n⚠️ Note: Auto-approval is disabled. Check your Defender dashboard for pending proposals.');
128
- }
129
-
130
- } catch (error) {
131
- console.error('\n❌ Deployment failed:', error);
132
-
133
- // Save error information for debugging
134
- const errorInfo = {
135
- timestamp: new Date().toISOString(),
136
- error: error instanceof Error ? {
137
- message: error.message,
138
- stack: error.stack,
139
- name: error.name
140
- } : String(error),
141
- network: network.name,
142
- chainId: network.chainId,
143
- deployerAddress: deployer.address
144
- };
145
-
146
- const errorPath = path.join(exampleConfig.deploymentsPath, 'deployment-error.json');
147
- await fs.writeJson(errorPath, errorInfo, { spaces: 2 });
148
-
149
- console.log(`\n🔍 Error details saved to: ${errorPath}`);
150
- console.log('\nTroubleshooting tips:');
151
- console.log('1. Check your Defender API credentials');
152
- console.log('2. Ensure sufficient balance for gas fees');
153
- console.log('3. Verify network connectivity');
154
- console.log('4. Check Defender dashboard for detailed logs');
155
-
156
- process.exit(1);
157
- }
158
- }
159
-
160
- // Handle script execution
161
- if (require.main === module) {
162
- main()
163
- .then(() => process.exit(0))
164
- .catch((error) => {
165
- console.error('Unhandled error:', error);
166
- process.exit(1);
167
- });
168
- }
169
-
170
- export { main as deployWithDefender };
@@ -1,36 +0,0 @@
1
- {
2
- "protocolVersion": 0.0,
3
- "protocolInitFacet": "ExampleFacet1",
4
- "facets": {
5
- "DiamondCutFacet": {
6
- "priority": 10,
7
- "versions": {
8
- "0.0": {}
9
- }
10
- },
11
- "DiamondLoupeFacet": {
12
- "priority": 20,
13
- "versions": {
14
- "0.0": {}
15
- }
16
- },
17
- "ExampleFacet1": {
18
- "priority": 30,
19
- "versions": {
20
- "0.0": {
21
- "deployInit": "initialize()",
22
- "callbacks": ["logDeployment"]
23
- }
24
- }
25
- },
26
- "ExampleFacet2": {
27
- "priority": 40,
28
- "versions": {
29
- "0.0": {
30
- "deployInit": "setup()",
31
- "callbacks": ["validateSetup"]
32
- }
33
- }
34
- }
35
- }
36
- }