@diamondslab/diamonds 1.0.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 (229) hide show
  1. package/README.md +618 -0
  2. package/diamonds/README.md +3 -0
  3. package/dist/core/CallbackManager.d.ts +13 -0
  4. package/dist/core/CallbackManager.d.ts.map +1 -0
  5. package/dist/core/CallbackManager.js +95 -0
  6. package/dist/core/CallbackManager.js.map +1 -0
  7. package/dist/core/DeploymentManager.d.ts +10 -0
  8. package/dist/core/DeploymentManager.d.ts.map +1 -0
  9. package/dist/core/DeploymentManager.js +50 -0
  10. package/dist/core/DeploymentManager.js.map +1 -0
  11. package/dist/core/Diamond.d.ts +58 -0
  12. package/dist/core/Diamond.d.ts.map +1 -0
  13. package/dist/core/Diamond.js +146 -0
  14. package/dist/core/Diamond.js.map +1 -0
  15. package/dist/core/DiamondDeployer.d.ts +10 -0
  16. package/dist/core/DiamondDeployer.d.ts.map +1 -0
  17. package/dist/core/DiamondDeployer.js +33 -0
  18. package/dist/core/DiamondDeployer.js.map +1 -0
  19. package/dist/core/index.d.ts +5 -0
  20. package/dist/core/index.d.ts.map +1 -0
  21. package/dist/core/index.js +12 -0
  22. package/dist/core/index.js.map +1 -0
  23. package/dist/index.d.ts +6 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +22 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/repositories/DBDeploymentRepository.d.ts +1 -0
  28. package/dist/repositories/DBDeploymentRepository.d.ts.map +1 -0
  29. package/dist/repositories/DBDeploymentRepository.js +20 -0
  30. package/dist/repositories/DBDeploymentRepository.js.map +1 -0
  31. package/dist/repositories/DeploymentRepository.d.ts +8 -0
  32. package/dist/repositories/DeploymentRepository.d.ts.map +1 -0
  33. package/dist/repositories/DeploymentRepository.js +7 -0
  34. package/dist/repositories/DeploymentRepository.js.map +1 -0
  35. package/dist/repositories/FileDeploymentRepository.d.ts +18 -0
  36. package/dist/repositories/FileDeploymentRepository.d.ts.map +1 -0
  37. package/dist/repositories/FileDeploymentRepository.js +58 -0
  38. package/dist/repositories/FileDeploymentRepository.js.map +1 -0
  39. package/dist/repositories/databaseHandler.d.ts +1 -0
  40. package/dist/repositories/databaseHandler.d.ts.map +1 -0
  41. package/dist/repositories/databaseHandler.js +13 -0
  42. package/dist/repositories/databaseHandler.js.map +1 -0
  43. package/dist/repositories/index.d.ts +4 -0
  44. package/dist/repositories/index.d.ts.map +1 -0
  45. package/dist/repositories/index.js +20 -0
  46. package/dist/repositories/index.js.map +1 -0
  47. package/dist/repositories/jsonFileHandler.d.ts +81 -0
  48. package/dist/repositories/jsonFileHandler.d.ts.map +1 -0
  49. package/dist/repositories/jsonFileHandler.js +223 -0
  50. package/dist/repositories/jsonFileHandler.js.map +1 -0
  51. package/dist/repositories/prismaDBHandler.d.ts +1 -0
  52. package/dist/repositories/prismaDBHandler.d.ts.map +1 -0
  53. package/dist/repositories/prismaDBHandler.js +11 -0
  54. package/dist/repositories/prismaDBHandler.js.map +1 -0
  55. package/dist/schemas/DeploymentSchema.d.ts +309 -0
  56. package/dist/schemas/DeploymentSchema.d.ts.map +1 -0
  57. package/dist/schemas/DeploymentSchema.js +56 -0
  58. package/dist/schemas/DeploymentSchema.js.map +1 -0
  59. package/dist/schemas/index.d.ts +2 -0
  60. package/dist/schemas/index.d.ts.map +1 -0
  61. package/dist/schemas/index.js +18 -0
  62. package/dist/schemas/index.js.map +1 -0
  63. package/dist/strategies/BaseDeploymentStrategy.d.ts +41 -0
  64. package/dist/strategies/BaseDeploymentStrategy.d.ts.map +1 -0
  65. package/dist/strategies/BaseDeploymentStrategy.js +545 -0
  66. package/dist/strategies/BaseDeploymentStrategy.js.map +1 -0
  67. package/dist/strategies/DeploymentStrategy.d.ts +19 -0
  68. package/dist/strategies/DeploymentStrategy.d.ts.map +1 -0
  69. package/dist/strategies/DeploymentStrategy.js +3 -0
  70. package/dist/strategies/DeploymentStrategy.js.map +1 -0
  71. package/dist/strategies/LocalDeploymentStrategy.d.ts +4 -0
  72. package/dist/strategies/LocalDeploymentStrategy.d.ts.map +1 -0
  73. package/dist/strategies/LocalDeploymentStrategy.js +8 -0
  74. package/dist/strategies/LocalDeploymentStrategy.js.map +1 -0
  75. package/dist/strategies/OZDefenderDeploymentStrategy.d.ts +62 -0
  76. package/dist/strategies/OZDefenderDeploymentStrategy.d.ts.map +1 -0
  77. package/dist/strategies/OZDefenderDeploymentStrategy.js +757 -0
  78. package/dist/strategies/OZDefenderDeploymentStrategy.js.map +1 -0
  79. package/dist/strategies/RPCDeploymentStrategy.d.ts +139 -0
  80. package/dist/strategies/RPCDeploymentStrategy.d.ts.map +1 -0
  81. package/dist/strategies/RPCDeploymentStrategy.js +710 -0
  82. package/dist/strategies/RPCDeploymentStrategy.js.map +1 -0
  83. package/dist/strategies/index.d.ts +6 -0
  84. package/dist/strategies/index.d.ts.map +1 -0
  85. package/dist/strategies/index.js +12 -0
  86. package/dist/strategies/index.js.map +1 -0
  87. package/dist/types/config.d.ts +26 -0
  88. package/dist/types/config.d.ts.map +1 -0
  89. package/dist/types/config.js +3 -0
  90. package/dist/types/config.js.map +1 -0
  91. package/dist/types/defender.d.ts +22 -0
  92. package/dist/types/defender.d.ts.map +1 -0
  93. package/dist/types/defender.js +3 -0
  94. package/dist/types/defender.js.map +1 -0
  95. package/dist/types/deployments.d.ts +71 -0
  96. package/dist/types/deployments.d.ts.map +1 -0
  97. package/dist/types/deployments.js +20 -0
  98. package/dist/types/deployments.js.map +1 -0
  99. package/dist/types/index.d.ts +5 -0
  100. package/dist/types/index.d.ts.map +1 -0
  101. package/dist/types/index.js +21 -0
  102. package/dist/types/index.js.map +1 -0
  103. package/dist/types/rpc.d.ts +35 -0
  104. package/dist/types/rpc.d.ts.map +1 -0
  105. package/dist/types/rpc.js +3 -0
  106. package/dist/types/rpc.js.map +1 -0
  107. package/dist/utils/common.d.ts +20 -0
  108. package/dist/utils/common.d.ts.map +1 -0
  109. package/dist/utils/common.js +45 -0
  110. package/dist/utils/common.js.map +1 -0
  111. package/dist/utils/configurationResolver.d.ts +30 -0
  112. package/dist/utils/configurationResolver.d.ts.map +1 -0
  113. package/dist/utils/configurationResolver.js +151 -0
  114. package/dist/utils/configurationResolver.js.map +1 -0
  115. package/dist/utils/contractMapping.d.ts +29 -0
  116. package/dist/utils/contractMapping.d.ts.map +1 -0
  117. package/dist/utils/contractMapping.js +224 -0
  118. package/dist/utils/contractMapping.js.map +1 -0
  119. package/dist/utils/defenderClients.d.ts +5 -0
  120. package/dist/utils/defenderClients.d.ts.map +1 -0
  121. package/dist/utils/defenderClients.js +21 -0
  122. package/dist/utils/defenderClients.js.map +1 -0
  123. package/dist/utils/defenderStore.d.ts +14 -0
  124. package/dist/utils/defenderStore.d.ts.map +1 -0
  125. package/dist/utils/defenderStore.js +92 -0
  126. package/dist/utils/defenderStore.js.map +1 -0
  127. package/dist/utils/diamondAbiGenerator.d.ts +113 -0
  128. package/dist/utils/diamondAbiGenerator.d.ts.map +1 -0
  129. package/dist/utils/diamondAbiGenerator.js +415 -0
  130. package/dist/utils/diamondAbiGenerator.js.map +1 -0
  131. package/dist/utils/diffDeployedFacets.d.ts +26 -0
  132. package/dist/utils/diffDeployedFacets.d.ts.map +1 -0
  133. package/dist/utils/diffDeployedFacets.js +106 -0
  134. package/dist/utils/diffDeployedFacets.js.map +1 -0
  135. package/dist/utils/index.d.ts +16 -0
  136. package/dist/utils/index.d.ts.map +1 -0
  137. package/dist/utils/index.js +35 -0
  138. package/dist/utils/index.js.map +1 -0
  139. package/dist/utils/loupe.d.ts +44 -0
  140. package/dist/utils/loupe.d.ts.map +1 -0
  141. package/dist/utils/loupe.js +128 -0
  142. package/dist/utils/loupe.js.map +1 -0
  143. package/dist/utils/rpcStore.d.ts +36 -0
  144. package/dist/utils/rpcStore.d.ts.map +1 -0
  145. package/dist/utils/rpcStore.js +166 -0
  146. package/dist/utils/rpcStore.js.map +1 -0
  147. package/dist/utils/signer.d.ts +36 -0
  148. package/dist/utils/signer.d.ts.map +1 -0
  149. package/dist/utils/signer.js +91 -0
  150. package/dist/utils/signer.js.map +1 -0
  151. package/dist/utils/txlogging.d.ts +13 -0
  152. package/dist/utils/txlogging.d.ts.map +1 -0
  153. package/dist/utils/txlogging.js +87 -0
  154. package/dist/utils/txlogging.js.map +1 -0
  155. package/dist/utils/workspaceSetup.d.ts +32 -0
  156. package/dist/utils/workspaceSetup.d.ts.map +1 -0
  157. package/dist/utils/workspaceSetup.js +311 -0
  158. package/dist/utils/workspaceSetup.js.map +1 -0
  159. package/docs/DIAMOND_ABI_CONFIGURATION_SUMMARY.md +40 -0
  160. package/docs/DIAMOND_ABI_GENERATION.md +220 -0
  161. package/docs/DIAMOND_ABI_GENERATOR_EXAMPLES.md +1204 -0
  162. package/docs/DIAMOND_ABI_GENERATOR_IMPLEMENTATION.md +947 -0
  163. package/docs/DIAMOND_ABI_GENERATOR_QUICK_REFERENCE.md +336 -0
  164. package/docs/README-DEFENDER.md +394 -0
  165. package/docs/README_DIAMOND_ABI_GENERATOR.md +303 -0
  166. package/docs/ROADMAP.md +250 -0
  167. package/docs/assets/image.png +0 -0
  168. package/docs/defender-integration.md +451 -0
  169. package/docs/diamond_module-BaseStrategy_design-v2.uxf +247 -0
  170. package/docs/diamond_module-BaseStrategy_design.uxf +272 -0
  171. package/docs/monitoring-troubleshooting.md +556 -0
  172. package/docs/testing-guide.md +713 -0
  173. package/examples/Diamond_Config_and_Deployment_examples/diamonds/ProxyDiamond/callbacks/ERC20ProxyFacet.ts +31 -0
  174. package/examples/Diamond_Config_and_Deployment_examples/diamonds/ProxyDiamond/proxydiamond.config.json +27 -0
  175. package/examples/Local_Hardhat_Deployer_Script_example/LocalDiamondDeployer.ts +180 -0
  176. package/examples/OZ_Defender_Deployer_Script_example/OZDiamondDeployer.ts +107 -0
  177. package/examples/OZ_Defender_Deployer_Script_example/run-oz-deploy.ts +17 -0
  178. package/examples/Test_examples/ProxyDiamondDeployment.test.ts +202 -0
  179. package/examples/defender-deployment/.env.example +35 -0
  180. package/examples/defender-deployment/README.md +415 -0
  181. package/examples/defender-deployment/contracts/ExampleDiamond.sol +41 -0
  182. package/examples/defender-deployment/contracts/ExampleFacet1.sol +84 -0
  183. package/examples/defender-deployment/contracts/ExampleFacet2.sol +104 -0
  184. package/examples/defender-deployment/contracts/UpgradeFacet.sol +92 -0
  185. package/examples/defender-deployment/deploy-script.ts +170 -0
  186. package/examples/defender-deployment/diamond-config.json +36 -0
  187. package/examples/defender-deployment/upgrade-script.ts +237 -0
  188. package/examples/hardhat-diamonds-config.example.ts +41 -0
  189. package/package.json +228 -0
  190. package/src/core/CallbackManager.ts +70 -0
  191. package/src/core/DeploymentManager.ts +64 -0
  192. package/src/core/Diamond.ts +197 -0
  193. package/src/core/DiamondDeployer.ts +36 -0
  194. package/src/core/index.ts +4 -0
  195. package/src/index.ts +5 -0
  196. package/src/repositories/DBDeploymentRepository.ts +22 -0
  197. package/src/repositories/DeploymentRepository.ts +12 -0
  198. package/src/repositories/FileDeploymentRepository.ts +67 -0
  199. package/src/repositories/databaseHandler.ts +14 -0
  200. package/src/repositories/index.ts +4 -0
  201. package/src/repositories/jsonFileHandler.ts +252 -0
  202. package/src/repositories/prismaDBHandler.ts +10 -0
  203. package/src/schemas/DeploymentSchema.ts +71 -0
  204. package/src/schemas/index.ts +1 -0
  205. package/src/strategies/BaseDeploymentStrategy.ts +649 -0
  206. package/src/strategies/DeploymentStrategy.ts +25 -0
  207. package/src/strategies/LocalDeploymentStrategy.ts +5 -0
  208. package/src/strategies/OZDefenderDeploymentStrategy.ts +849 -0
  209. package/src/strategies/RPCDeploymentStrategy.ts +881 -0
  210. package/src/strategies/index.ts +5 -0
  211. package/src/types/config.ts +34 -0
  212. package/src/types/defender.ts +24 -0
  213. package/src/types/deployments.ts +102 -0
  214. package/src/types/index.ts +4 -0
  215. package/src/types/rpc.ts +37 -0
  216. package/src/utils/common.ts +54 -0
  217. package/src/utils/configurationResolver.ts +141 -0
  218. package/src/utils/contractMapping.ts +220 -0
  219. package/src/utils/defenderClients.ts +22 -0
  220. package/src/utils/defenderStore.ts +62 -0
  221. package/src/utils/diamondAbiGenerator.ts +523 -0
  222. package/src/utils/diffDeployedFacets.ts +131 -0
  223. package/src/utils/index.ts +15 -0
  224. package/src/utils/loupe.ts +159 -0
  225. package/src/utils/rpcStore.ts +152 -0
  226. package/src/utils/signer.ts +93 -0
  227. package/src/utils/txlogging.ts +97 -0
  228. package/src/utils/workspaceSetup.ts +315 -0
  229. package/test/README.md +136 -0
@@ -0,0 +1,247 @@
1
+ <diagram program="umletino" version="15.1"><zoom_level>9</zoom_level><help_text>lt=&lt;&lt;
2
+ exclusionFilter</help_text><element><id>UMLClass</id><coordinates><x>486</x><y>487</y><w>225</w><h>108</h></coordinates><panel_attributes>prioritySortedDeployedFuncSelectors
3
+ --
4
+ &gt; funcSel: 0x
5
+ &gt; facetAddress: 0x address
6
+ &gt; priority: int
7
+
8
+ From previous deployment file
9
+ sorted by priority
10
+ group=group-0
11
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>477</x><y>631</y><w>234</w><h>369</h></coordinates><panel_attributes>functionSelectorRegistry
12
+ --
13
+ &gt; key: 0x function selector
14
+ &gt; facetAddress: 0x address
15
+ &gt; priority: number
16
+ &gt; status: enum {
17
+ deployed,
18
+ add
19
+ replace
20
+ remove
21
+
22
+ Initiallly includes all selectors from deployedFuncSelectors as deployed
23
+
24
+ style=wordwrap
25
+
26
+ group=group-0
27
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>405</x><y>1054</y><w>189</w><h>36</h></coordinates><panel_attributes>*5. DiamonCut Transaction*
28
+
29
+ fontsize=15
30
+
31
+ group=group-0
32
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>585</x><y>586</y><w>27</w><h>63</h></coordinates><panel_attributes>lt=&lt;&lt;-
33
+ group=group-0
34
+ layer=3</panel_attributes><additional_attributes>10;50;10;10</additional_attributes></element><element><id>UMLClass</id><coordinates><x>801</x><y>469</y><w>207</w><h>99</h></coordinates><panel_attributes>higherPriorityDeployedFuncSelectors
35
+ --
36
+ &gt; funcSel: 0x
37
+ &gt; priority: int
38
+
39
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>801</x><y>829</y><w>189</w><h>63</h></coordinates><panel_attributes>lowerPriorityDeployedFuncSelectors
40
+ --
41
+ &gt; funcSel: 0x
42
+ &gt; priority: int
43
+
44
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>1323</x><y>397</y><w>135</w><h>72</h></coordinates><panel_attributes>lt=&lt;&lt;-
45
+ </panel_attributes><additional_attributes>10;10;130;60</additional_attributes></element><element><id>UMLClass</id><coordinates><x>1152</x><y>316</y><w>180</w><h>135</h></coordinates><panel_attributes>diamond.newDeployedFacets
46
+ --
47
+ &gt; facetName {
48
+ &gt; facetAddress: 0x address
49
+ &gt; tx_hash: string
50
+ &gt; initFunction: string
51
+ &gt; priority: int
52
+ &gt; version: number
53
+ &gt; allFuncSels: string[ ]
54
+ &gt; deployInclude: string[ ];
55
+ &gt; verified: boolean;
56
+ }
57
+
58
+ style=wordwrap
59
+ layer=3
60
+ </panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>1125</x><y>163</y><w>189</w><h>90</h></coordinates><panel_attributes>facetConfig
61
+ --
62
+ &gt; facetName:
63
+ &gt;&gt; address
64
+ &gt;&gt; priority
65
+ &gt;&gt; versions
66
+ layer=3
67
+ </panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>198</x><y>163</y><w>252</w><h>180</h></coordinates><panel_attributes>*deployedDiamondData*
68
+ --
69
+ &gt; DiamondAddress: 0x address
70
+ &gt; DiamondDeployer: 0x address
71
+ &gt; Version: float
72
+ &gt; Facets: [
73
+ &gt; facetName:
74
+ &gt; address
75
+ &gt; version
76
+ &gt; functionSelectors: funcSelector[ ]
77
+
78
+ group=group-0
79
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>882</x><y>172</y><w>189</w><h>81</h></coordinates><panel_attributes>diamond.config.facets
80
+ --
81
+ ProtocolInitFacet: string facetName
82
+ exlude: 0x[ ] (function selectors to be excluded from all facets)</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>702</x><y>631</y><w>126</w><h>81</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>120;10;10;70</additional_attributes></element><element><id>UMLUseCase</id><coordinates><x>810</x><y>622</y><w>171</w><h>36</h></coordinates><panel_attributes>lt=-
83
+ priority split
84
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>441</x><y>190</y><w>117</w><h>54</h></coordinates><panel_attributes>*facets*
85
+
86
+ lt=&lt;&lt;-
87
+
88
+ layer=3
89
+ group=group-0</panel_attributes><additional_attributes>110;22;10;20</additional_attributes></element><element><id>Relation</id><coordinates><x>972</x><y>694</y><w>108</w><h>99</h></coordinates><panel_attributes>lt=&lt;&lt;.</panel_attributes><additional_attributes>10;90;100;10</additional_attributes></element><element><id>Relation</id><coordinates><x>891</x><y>559</y><w>27</w><h>81</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;10;10;70</additional_attributes></element><element><id>Relation</id><coordinates><x>1206</x><y>244</y><w>63</w><h>90</h></coordinates><panel_attributes>lt=&lt;&lt;-
90
+
91
+ </panel_attributes><additional_attributes>50;80;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>1062</x><y>199</y><w>81</w><h>27</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>70;10;10;10</additional_attributes></element><element><id>UMLClass</id><coordinates><x>1440</x><y>433</y><w>90</w><h>36</h></coordinates><panel_attributes>facetContractAbi
92
+ layer=3
93
+ </panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>702</x><y>379</y><w>144</w><h>306</h></coordinates><panel_attributes>add/replace
94
+ lt=&lt;&lt;-</panel_attributes><additional_attributes>10;320;140;10</additional_attributes></element><element><id>Relation</id><coordinates><x>891</x><y>406</y><w>27</w><h>81</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;10;10;70</additional_attributes></element><element><id>Relation</id><coordinates><x>972</x><y>370</y><w>198</w><h>54</h></coordinates><panel_attributes>lt=&lt;&lt;.
95
+
96
+ confirm function selector
97
+ in facet</panel_attributes><additional_attributes>10;20;200;20</additional_attributes></element><element><id>UMLUseCase</id><coordinates><x>828</x><y>352</y><w>153</w><h>63</h></coordinates><panel_attributes>lt=.
98
+ adhoc
99
+ inclusion Filter
100
+ fg=red
101
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLUseCase</id><coordinates><x>549</x><y>424</y><w>108</w><h>36</h></coordinates><panel_attributes>lt=.
102
+ prioritySort
103
+
104
+ group=group-0
105
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>648</x><y>217</y><w>252</w><h>243</h></coordinates><panel_attributes>lt=&lt;&lt;.</panel_attributes><additional_attributes>10;250;80;250;80;10;260;10</additional_attributes></element><element><id>Relation</id><coordinates><x>594</x><y>451</y><w>27</w><h>54</h></coordinates><panel_attributes>lt=&lt;&lt;-
106
+ group=group-0
107
+ layer=3</panel_attributes><additional_attributes>10;40;10;10</additional_attributes></element><element><id>UMLUseCase</id><coordinates><x>1071</x><y>568</y><w>126</w><h>63</h></coordinates><panel_attributes>lt=.
108
+ priority removal filter
109
+ halign=center
110
+ style=wordwrap
111
+ fg=red
112
+ layer=3
113
+ </panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>999</x><y>505</y><w>90</w><h>108</h></coordinates><panel_attributes>lt=&lt;&lt;.
114
+ bg=red
115
+ fg=red</panel_attributes><additional_attributes>80;100;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>1134</x><y>442</y><w>72</w><h>144</h></coordinates><panel_attributes>lt=&lt;&lt;-
116
+ </panel_attributes><additional_attributes>17;140;60;10</additional_attributes></element><element><id>Relation</id><coordinates><x>675</x><y>190</y><w>225</w><h>36</h></coordinates><panel_attributes>facets in config
117
+ lt=&lt;&lt;.</panel_attributes><additional_attributes>10;20;230;20</additional_attributes></element><element><id>UMLClass</id><coordinates><x>495</x><y>280</y><w>216</w><h>99</h></coordinates><panel_attributes>filteredDeployedFacets
118
+ --
119
+ &gt; facetName:
120
+ &gt; address
121
+ &gt; version
122
+ &gt; status: deployed | remove
123
+ &gt; functionSelectors: [ ]functionselector
124
+
125
+ group=group-0
126
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLUseCase</id><coordinates><x>540</x><y>190</y><w>144</w><h>45</h></coordinates><panel_attributes>lt=.
127
+ removedFacetFilter
128
+ group=group-0
129
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>594</x><y>226</y><w>27</w><h>72</h></coordinates><panel_attributes>lt=&lt;&lt;-
130
+ group=group-0
131
+ layer=3</panel_attributes><additional_attributes>10;60;10;10</additional_attributes></element><element><id>UMLUseCase</id><coordinates><x>819</x><y>919</y><w>153</w><h>63</h></coordinates><panel_attributes>lt=.
132
+ replace existing lower priority filter
133
+ fg=red
134
+ style=wordwrap
135
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>891</x><y>883</y><w>27</w><h>54</h></coordinates><panel_attributes>lt=&lt;&lt;.</panel_attributes><additional_attributes>10;40;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>594</x><y>370</y><w>27</w><h>72</h></coordinates><panel_attributes>lt=&lt;&lt;-
136
+ group=group-0
137
+ layer=3</panel_attributes><additional_attributes>10;60;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>702</x><y>928</y><w>135</w><h>36</h></coordinates><panel_attributes>lt=&lt;&lt;-
138
+ replace existing</panel_attributes><additional_attributes>10;20;130;20</additional_attributes></element><element><id>Relation</id><coordinates><x>621</x><y>973</y><w>297</w><h>72</h></coordinates><panel_attributes>lt=&lt;&lt;-
139
+ add new function selectors</panel_attributes><additional_attributes>10;30;10;60;310;60;310;10</additional_attributes></element><element><id>Relation</id><coordinates><x>495</x><y>991</y><w>126</w><h>81</h></coordinates><panel_attributes>lt=&lt;&lt;-
140
+ add,replace,remove
141
+
142
+ group=group-0
143
+ layer=3</panel_attributes><additional_attributes>10;70;10;10</additional_attributes></element><element><id>UMLGeneric</id><coordinates><x>774</x><y>271</y><w>864</w><h>783</h></coordinates><panel_attributes>*3. Iterate over facets*
144
+ - Perform Filtering
145
+ - Update FunctionSelectorRegistry
146
+ bg=dark_gray
147
+ halign=left
148
+ valign=top
149
+ fontsize=16</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>1278</x><y>595</y><w>369</w><h>423</h></coordinates><panel_attributes>Filtering Details
150
+ --
151
+ --
152
+ *1. adhoc inclusion filter*
153
+ This is essentially an "override higher priority" function. Currently, if a multiple facets list the same FuncSel as 'include' the LOWER PRIORITY will be used.
154
+
155
+ A. Confirm this FuncSel is in the facet list and the higherPriorityDeployedFuncSelectors, return if not.
156
+ B. FuncSels present in Facet Config 'include' list and already in Registry but associated with higher priority facets will have the Registry updated with the new Facet Address. Additionally:
157
+ i. If the FuncSel is already be set to 'add' or 'replace' then these should remain.
158
+ ii. If the status is set to 'deployed' then set status to 'replace'
159
+ iii. If the status is set to 'remove' then set status to 'replace'
160
+
161
+ *2. Priority Removal Filter*
162
+ Removes FunSels that are already being included by other higher priority facets (different names) and aren't being overridden by the adhoc include list
163
+
164
+ 3. Replace Existing from Same Facet Name
165
+
166
+ *4. Replace Existing Lower Priority Filter*
167
+ Change facet address for FuncSels.
168
+ Set status to `replace` for existing `deploy` FuncSels, facets that are first time deployments of lower priority will not have been processed yet there is no need to account for FuncSels marked as 'add'.
169
+
170
+ *5. Add New Function Selectors*
171
+ Remaining FuncSels are added.
172
+
173
+
174
+ style=wordwrap
175
+ bg=blue
176
+ layer=2
177
+
178
+ </panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>189</x><y>388</y><w>261</w><h>612</h></coordinates><panel_attributes>Diamonds Module Base Strategy
179
+ --
180
+ --
181
+
182
+ Function Selector DiamondCut Process
183
+
184
+ 1. Deploy Facet contracts for new versions
185
+ 2. Create functionSelectorRegistry from deployedf facets
186
+
187
+ 3. Iterate over facets in facetConfig
188
+ a. Perform facet function selector filtering
189
+ b. Update action functionSelectorRegistry
190
+
191
+ 4. Protocol Wide Exclusion Filter: Remove FuncSels in ProtocolExclude
192
+
193
+ 5. DiamondCut Transaction
194
+
195
+ fontsize=14
196
+ style=wordwrap
197
+ bg=blue
198
+ halign=left
199
+ transparency=0
200
+ </panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>1359</x><y>163</y><w>234</w><h>90</h></coordinates><panel_attributes>*1. Deploy Facets*
201
+ --
202
+ Version comparison / existance
203
+ Config -&gt; deployedDiamondData
204
+ Deploy New Facets
205
+
206
+ bg=dark_gray
207
+
208
+ fontsize=15</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>1305</x><y>199</y><w>72</w><h>27</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>60;10;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>1476</x><y>244</y><w>27</w><h>207</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;210;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>954</x><y>694</y><w>126</w><h>27</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;10;120;10</additional_attributes></element><element><id>Text</id><coordinates><x>576</x><y>100</y><w>792</w><h>63</h></coordinates><panel_attributes>*Base Strategy: Facet Deployment and Upgrades, Function Selector &amp; DiamondCut Process*
209
+
210
+ fg=#a3ffff
211
+ fontsize=19
212
+ valign=top
213
+ halign=center
214
+ style=autoresize</panel_attributes><additional_attributes></additional_attributes></element><element><id>Text</id><coordinates><x>873</x><y>37</y><w>225</w><h>72</h></coordinates><panel_attributes>*Diamonds Module*
215
+ fontsize=25
216
+ valign=top
217
+ halign=center
218
+ style=autoresize
219
+ </panel_attributes><additional_attributes></additional_attributes></element><element><id>Text</id><coordinates><x>612</x><y>73</y><w>738</w><h>36</h></coordinates><panel_attributes>Robust Extensible Deployment of ERC-2535 Diamond Proxy Standard Contract Systems
220
+
221
+ fontsize=13
222
+ valign=top
223
+ halign=center
224
+ style=wordwrap</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>468</x><y>163</y><w>261</w><h>846</h></coordinates><panel_attributes>*2. Create FunctionSelectorRegistry*
225
+
226
+ fontsize=15
227
+ fg=white
228
+ bg=#8F20EF
229
+ layer=1
230
+ transparency=97
231
+ group=group-0</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>1062</x><y>676</y><w>189</w><h>63</h></coordinates><panel_attributes>priorityFilteredNewDeployedFacets
232
+ --
233
+ id: Long="36548"
234
+ [waiting for message]</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLUseCase</id><coordinates><x>837</x><y>676</y><w>126</w><h>63</h></coordinates><panel_attributes>lt=.
235
+ replace existing
236
+ same facet filter
237
+ halign=center
238
+ style=wordwrap
239
+ fg=red
240
+ layer=3
241
+ </panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>954</x><y>442</y><w>216</w><h>207</h></coordinates><panel_attributes>lt=&lt;&lt;.</panel_attributes><additional_attributes>10;210;220;10</additional_attributes></element><element><id>Relation</id><coordinates><x>1125</x><y>622</y><w>63</w><h>72</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>50;60;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>702</x><y>676</y><w>171</w><h>72</h></coordinates><panel_attributes>lt=&lt;&lt;-
242
+ replace for same name facet</panel_attributes><additional_attributes>10;60;170;10</additional_attributes></element><element><id>UMLUseCase</id><coordinates><x>810</x><y>757</y><w>171</w><h>36</h></coordinates><panel_attributes>lt=-
243
+ priority split
244
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>702</x><y>766</y><w>126</w><h>45</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>120;10;10;30</additional_attributes></element><element><id>UMLClass</id><coordinates><x>1053</x><y>955</y><w>189</w><h>63</h></coordinates><panel_attributes>remove Function selectors that have same facet name but different address
245
+ --
246
+ id: Long="36548"
247
+ [waiting for message]</panel_attributes><additional_attributes></additional_attributes></element></diagram>
@@ -0,0 +1,272 @@
1
+ <diagram program="umletino" version="15.1"><zoom_level>8</zoom_level><help_text>lt=&lt;&lt;
2
+ exclusionFilter</help_text><element><id>UMLClass</id><coordinates><x>264</x><y>400</y><w>200</w><h>96</h></coordinates><panel_attributes>prioritySortedDeployedFuncSelectors
3
+ --
4
+ &gt; funcSel: 0x
5
+ &gt; facetAddress: 0x address
6
+ &gt; priority: int
7
+
8
+ From previous deployment file
9
+ sorted by priority
10
+ group=group-0
11
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>256</x><y>528</y><w>208</w><h>328</h></coordinates><panel_attributes>functionSelectorRegistry
12
+ --
13
+ &gt; key: 0x function selector
14
+ &gt; facetAddress: 0x address
15
+ &gt; priority: number
16
+ &gt; status: enum {
17
+ deployed,
18
+ add
19
+ replace
20
+ remove
21
+
22
+ Initiallly includes all selectors from deployedFuncSelectors as deployed
23
+
24
+ style=wordwrap
25
+
26
+ group=group-0
27
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>1320</x><y>424</y><w>168</w><h>168</h></coordinates><panel_attributes>facetFuncSelectors
28
+ --
29
+ &gt; facaddress: 0x address
30
+ &gt; funcSel: 0x
31
+
32
+ all functionSelectors contained in current Facet.
33
+
34
+ style=wordwrap
35
+ layer=3
36
+ group=group-3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>192</x><y>904</y><w>168</w><h>32</h></coordinates><panel_attributes>*5. DiamonCut Transaction*
37
+
38
+ fontsize=15
39
+
40
+ group=group-0
41
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>352</x><y>488</y><w>24</w><h>56</h></coordinates><panel_attributes>lt=&lt;&lt;-
42
+ group=group-0
43
+ layer=3</panel_attributes><additional_attributes>10;50;10;10</additional_attributes></element><element><id>UMLClass</id><coordinates><x>616</x><y>608</y><w>184</w><h>88</h></coordinates><panel_attributes>higherPriorityDeployedFuncSelectors
44
+ --
45
+ &gt; funcSel: 0x
46
+ &gt; priority: int
47
+
48
+ layer=3
49
+ group=group-3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>616</x><y>800</y><w>168</w><h>56</h></coordinates><panel_attributes>lowerPriorityDeployedFuncSelectors
50
+ --
51
+ &gt; funcSel: 0x
52
+ &gt; priority: int
53
+
54
+ layer=3
55
+ group=group-3</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>1104</x><y>496</y><w>72</w><h>24</h></coordinates><panel_attributes>lt=&lt;&lt;-
56
+ group=group-3</panel_attributes><additional_attributes>10;10;70;10</additional_attributes></element><element><id>UMLClass</id><coordinates><x>624</x><y>408</y><w>168</w><h>56</h></coordinates><panel_attributes>facetIncludeFunctionSelectors
57
+ --
58
+ &gt; funcSel: 0x
59
+ layer=3
60
+ group=group-3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>904</x><y>456</y><w>208</w><h>112</h></coordinates><panel_attributes>exclusionFilteredFacetFunctionSelectors
61
+ --
62
+ &gt; facetAddress: 0x address
63
+ &gt; priority: int
64
+ &gt; funcSel: 0x
65
+
66
+
67
+
68
+ style=wordwrap
69
+ layer=3
70
+ group=group-3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>1128</x><y>392</y><w>168</w><h>56</h></coordinates><panel_attributes>facetExcludeFunctionSelectors
71
+ --
72
+ &gt; funcSel: 0x
73
+ layer=3
74
+ group=group-3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>952</x><y>256</y><w>168</w><h>88</h></coordinates><panel_attributes>facetConfig
75
+ --
76
+ &gt; facetName:
77
+ &gt;&gt; address
78
+ &gt;&gt; priority
79
+ &gt;&gt; versions
80
+ layer=3
81
+ group=group-3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>8</x><y>112</y><w>224</w><h>160</h></coordinates><panel_attributes>*deployedDiamondData*
82
+ --
83
+ &gt; DiamondAddress: 0x address
84
+ &gt; DiamondDeployer: 0x address
85
+ &gt; Version: float
86
+ &gt; Facets: [
87
+ &gt; facetName:
88
+ &gt; address
89
+ &gt; version
90
+ &gt; functionSelectors: funcSelector[ ]
91
+
92
+ group=group-0
93
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>952</x><y>120</y><w>168</w><h>72</h></coordinates><panel_attributes>diamond.config
94
+ --
95
+ ProtocolInitFacet: string facetName
96
+ exlude: 0x[ ] (function selectors to be excluded from all facets)</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>696</x><y>336</y><w>320</w><h>88</h></coordinates><panel_attributes>lt=&lt;&lt;-
97
+
98
+ group=group-3</panel_attributes><additional_attributes>10;90;10;20;380;20;380;10</additional_attributes></element><element><id>Relation</id><coordinates><x>456</x><y>736</y><w>184</w><h>24</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>210;10;10;10</additional_attributes></element><element><id>UMLUseCase</id><coordinates><x>624</x><y>728</y><w>152</w><h>32</h></coordinates><panel_attributes>lt=-
99
+ priority split
100
+ layer=3
101
+ group=group-3</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>224</x><y>136</y><w>104</w><h>48</h></coordinates><panel_attributes>*facets*
102
+
103
+ lt=&lt;&lt;-
104
+
105
+ layer=3
106
+ group=group-0</panel_attributes><additional_attributes>110;22;10;20</additional_attributes></element><element><id>Relation</id><coordinates><x>696</x><y>752</y><w>24</w><h>64</h></coordinates><panel_attributes>lt=&lt;&lt;-
107
+ group=group-3</panel_attributes><additional_attributes>10;60;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>696</x><y>688</y><w>24</w><h>56</h></coordinates><panel_attributes>lt=&lt;&lt;-
108
+ group=group-3</panel_attributes><additional_attributes>10;10;10;50</additional_attributes></element><element><id>Relation</id><coordinates><x>1056</x><y>336</y><w>176</w><h>72</h></coordinates><panel_attributes>lt=&lt;&lt;-
109
+
110
+ group=group-3</panel_attributes><additional_attributes>200;70;200;20;10;20;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>1024</x><y>184</y><w>24</w><h>88</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;90;10;10</additional_attributes></element><element><id>UMLClass</id><coordinates><x>1368</x><y>336</y><w>80</w><h>32</h></coordinates><panel_attributes>facetContractAbi
111
+ layer=3
112
+ group=group-3</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>1400</x><y>360</y><w>24</w><h>80</h></coordinates><panel_attributes>lt=&lt;&lt;-
113
+ group=group-3</panel_attributes><additional_attributes>10;80;10;10</additional_attributes></element><element><id>UMLUseCase</id><coordinates><x>1160</x><y>480</y><w>120</w><h>48</h></coordinates><panel_attributes>lt=.
114
+ adhoc
115
+ exclusion filter
116
+ fg=red
117
+ layer=3
118
+ group=group-3</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>1208</x><y>440</y><w>24</w><h>56</h></coordinates><panel_attributes>lt=&lt;&lt;.
119
+ group=group-3</panel_attributes><additional_attributes>10;50;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>1272</x><y>496</y><w>64</w><h>24</h></coordinates><panel_attributes>lt=&lt;&lt;-
120
+ group=group-3</panel_attributes><additional_attributes>10;10;60;10</additional_attributes></element><element><id>Relation</id><coordinates><x>456</x><y>544</y><w>200</w><h>32</h></coordinates><panel_attributes>add/replace
121
+ lt=&lt;&lt;-</panel_attributes><additional_attributes>10;20;230;20</additional_attributes></element><element><id>Relation</id><coordinates><x>696</x><y>576</y><w>24</w><h>48</h></coordinates><panel_attributes>lt=&lt;&lt;-
122
+ group=group-3</panel_attributes><additional_attributes>10;10;10;40</additional_attributes></element><element><id>Relation</id><coordinates><x>712</x><y>488</y><w>208</w><h>56</h></coordinates><panel_attributes>lt=&lt;&lt;.
123
+
124
+ confirm function selector
125
+ in facet
126
+ group=group-3</panel_attributes><additional_attributes>10;50;10;20;240;20</additional_attributes></element><element><id>UMLUseCase</id><coordinates><x>640</x><y>528</y><w>136</w><h>56</h></coordinates><panel_attributes>lt=.
127
+ adhoc
128
+ inclusion Filter
129
+ fg=red
130
+ layer=3
131
+ group=group-3</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>696</x><y>456</y><w>24</w><h>88</h></coordinates><panel_attributes>lt=&lt;&lt;-
132
+ group=group-3</panel_attributes><additional_attributes>10;90;10;10</additional_attributes></element><element><id>UMLUseCase</id><coordinates><x>320</x><y>344</y><w>96</w><h>32</h></coordinates><panel_attributes>lt=.
133
+ prioritySort
134
+
135
+ group=group-0
136
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>408</x><y>160</y><w>560</w><h>216</h></coordinates><panel_attributes>lt=&lt;&lt;.</panel_attributes><additional_attributes>10;250;80;250;80;10;680;10</additional_attributes></element><element><id>Relation</id><coordinates><x>360</x><y>368</y><w>24</w><h>48</h></coordinates><panel_attributes>lt=&lt;&lt;-
137
+ group=group-0
138
+ layer=3</panel_attributes><additional_attributes>10;40;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>1112</x><y>296</y><w>312</w><h>56</h></coordinates><panel_attributes>lt=&lt;&lt;-
139
+ group=group-3</panel_attributes><additional_attributes>370;50;370;10;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>768</x><y>560</y><w>248</w><h>200</h></coordinates><panel_attributes>lt=&lt;&lt;.
140
+ group=group-3</panel_attributes><additional_attributes>10;230;290;230;290;10</additional_attributes></element><element><id>UMLUseCase</id><coordinates><x>832</x><y>624</y><w>112</w><h>56</h></coordinates><panel_attributes>lt=.
141
+ priority removal filter
142
+ halign=center
143
+ style=wordwrap
144
+ fg=red
145
+ layer=3
146
+ </panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>792</x><y>640</y><w>56</w><h>24</h></coordinates><panel_attributes>lt=&lt;&lt;.
147
+ bg=red
148
+ fg=red</panel_attributes><additional_attributes>50;10;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>928</x><y>560</y><w>48</w><h>112</h></coordinates><panel_attributes>lt=&lt;&lt;-
149
+ group=group-3</panel_attributes><additional_attributes>17;120;40;120;40;10</additional_attributes></element><element><id>Relation</id><coordinates><x>432</x><y>136</y><w>536</w><h>32</h></coordinates><panel_attributes>facets in config
150
+ lt=&lt;&lt;.</panel_attributes><additional_attributes>10;20;650;20</additional_attributes></element><element><id>UMLClass</id><coordinates><x>272</x><y>216</y><w>192</w><h>88</h></coordinates><panel_attributes>filteredDeployedFacets
151
+ --
152
+ &gt; facetName:
153
+ &gt; address
154
+ &gt; version
155
+ &gt; status: deployed | remove
156
+ &gt; functionSelectors: [ ]functionselector
157
+
158
+ group=group-0
159
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLUseCase</id><coordinates><x>312</x><y>136</y><w>128</w><h>40</h></coordinates><panel_attributes>lt=.
160
+ removedFacetFilter
161
+ group=group-0
162
+ layer=3</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>360</x><y>168</y><w>24</w><h>64</h></coordinates><panel_attributes>lt=&lt;&lt;-
163
+ group=group-0
164
+ layer=3</panel_attributes><additional_attributes>10;60;10;10</additional_attributes></element><element><id>UMLUseCase</id><coordinates><x>632</x><y>912</y><w>136</w><h>56</h></coordinates><panel_attributes>lt=.
165
+ replace existing lower priority filter
166
+ fg=red
167
+ style=wordwrap
168
+ layer=3
169
+ group=group-3</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>696</x><y>848</y><w>24</w><h>80</h></coordinates><panel_attributes>lt=&lt;&lt;.
170
+ group=group-3</panel_attributes><additional_attributes>10;80;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>360</x><y>296</y><w>24</w><h>64</h></coordinates><panel_attributes>lt=&lt;&lt;-
171
+ group=group-0
172
+ layer=3</panel_attributes><additional_attributes>10;60;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>440</x><y>848</y><w>208</w><h>112</h></coordinates><panel_attributes>lt=&lt;&lt;-
173
+ replace existing</panel_attributes><additional_attributes>10;10;10;120;240;120</additional_attributes></element><element><id>UMLUseCase</id><coordinates><x>504</x><y>176</y><w>112</w><h>56</h></coordinates><panel_attributes>*4. Protocol Wide*
174
+ *Exclusion Filter*
175
+
176
+ fontsize=14
177
+ bg=dark_gray</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>384</x><y>848</y><w>336</w><h>152</h></coordinates><panel_attributes>lt=&lt;&lt;-
178
+ add new function selectors</panel_attributes><additional_attributes>10;10;10;170;400;170;400;150</additional_attributes></element><element><id>Relation</id><coordinates><x>272</x><y>848</y><w>104</w><h>72</h></coordinates><panel_attributes>lt=&lt;&lt;-
179
+ add,replace,remove
180
+
181
+ group=group-0
182
+ layer=3</panel_attributes><additional_attributes>10;70;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>608</x><y>184</y><w>416</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;30;500;30;500;10</additional_attributes></element><element><id>Relation</id><coordinates><x>456</x><y>224</y><w>96</w><h>328</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;390;100;390;100;10</additional_attributes></element><element><id>UMLGeneric</id><coordinates><x>592</x><y>240</y><w>904</w><h>776</h></coordinates><panel_attributes>*3. Iterate over facets*
183
+ - Perform Filtering
184
+ - Update FunctionSelectorRegistry
185
+ bg=dark_gray
186
+ halign=left
187
+ valign=top
188
+ fontsize=16
189
+ group=group-3</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>1016</x><y>600</y><w>472</w><h>360</h></coordinates><panel_attributes>Filtering Details
190
+ --
191
+ --
192
+ *1. adhoc exclusion filter*
193
+ FuncSels in Facet Config 'exclude' list will be removed from future processing. This is priority over 'include'
194
+
195
+ *2. adhoc inclusion filter*
196
+ This is essentially an "override higher priority" function. Currently, if a multiple facets list the same FuncSel as 'include' the LOWER PRIORITY will be used.
197
+
198
+ A. Confirm this FuncSel is in the facet list and the higherPriorityDeployedFuncSelectors, return if not.
199
+ B. FuncSels present in Facet Config 'include' list and already in Registry but associated with higher priority facets will have the Registry updated with the new Facet Address. Additionally:
200
+ i. If the FuncSel is already be set to 'add' or 'replace' then these should remain.
201
+ ii. If the status is set to 'deployed' then set status to 'replace'
202
+ iii. If the status is set to 'remove' then set status to 'replace'
203
+
204
+ *3. Priority Remove Filter*
205
+ Removes FunSels that are already being included by higher priority facets and aren't being overridden by the adhoc include list
206
+
207
+ *4. Replace Existing Lower Priority Filter*
208
+ Change facet address for FuncSels.
209
+ Set status to `replace` for existing `deploy` FuncSels, facets that are first time deployments of lower priority will not have been processed yet there is no need to account for FuncSels marked as 'add'.
210
+
211
+ *5. Add New Function Selectors*
212
+ Remaining FuncSels are added.
213
+
214
+
215
+ style=wordwrap
216
+ bg=blue
217
+ layer=2
218
+ group=group-3
219
+ </panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>0</x><y>312</y><w>232</w><h>544</h></coordinates><panel_attributes>Diamonds Module Base Strategy
220
+ --
221
+ --
222
+
223
+ Function Selector DiamondCut Process
224
+
225
+ 1. Deploy Facet contracts for new versions
226
+ 2. Create functionSelectorRegistry from deployedf facets
227
+
228
+ 3. Iterate over facets in facetConfig
229
+ a. Perform facet function selector filtering
230
+ b. Update action functionSelectorRegistry
231
+
232
+ 4. Protocol Wide Exclusion Filter: Remove FuncSels in ProtocolExclude
233
+
234
+ 5. DiamondCut Transaction
235
+
236
+ fontsize=14
237
+ style=wordwrap
238
+ bg=blue
239
+ halign=left
240
+ transparency=0
241
+ </panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>1200</x><y>104</y><w>184</w><h>96</h></coordinates><panel_attributes>*1. Deploy Facets*
242
+ --
243
+ Version comparison / existance
244
+ Config -&gt; deployedDiamondData
245
+ Deploy New Facets
246
+
247
+ bg=dark_gray
248
+ style=autoresize
249
+ fontsize=15</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>1112</x><y>136</y><w>104</w><h>24</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>110;10;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>1304</x><y>192</y><w>24</w><h>64</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;60;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>760</x><y>672</y><w>160</w><h>288</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>10;340;160;340;160;110;180;90;160;70;160;10</additional_attributes></element><element><id>Text</id><coordinates><x>360</x><y>56</y><w>672</w><h>56</h></coordinates><panel_attributes>*Base Strategy: Facet Deployment and Upgrades, Function Selector &amp; DiamondCut Process*
250
+
251
+ fg=#a3ffff
252
+ fontsize=19
253
+ valign=top
254
+ halign=center
255
+ style=autoresize</panel_attributes><additional_attributes></additional_attributes></element><element><id>Text</id><coordinates><x>616</x><y>0</y><w>184</w><h>64</h></coordinates><panel_attributes>*Diamonds Module*
256
+ fontsize=25
257
+ valign=top
258
+ halign=center
259
+ style=autoresize
260
+ </panel_attributes><additional_attributes></additional_attributes></element><element><id>Text</id><coordinates><x>376</x><y>32</y><w>656</w><h>32</h></coordinates><panel_attributes>Robust Extensible Deployment of ERC-2535 Diamond Proxy Standard Contract Systems
261
+
262
+ fontsize=13
263
+ valign=top
264
+ halign=center
265
+ style=wordwrap</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>248</x><y>112</y><w>232</w><h>752</h></coordinates><panel_attributes>*2. Create FunctionSelectorRegistry*
266
+
267
+ fontsize=15
268
+ fg=white
269
+ bg=#8F20EF
270
+ layer=1
271
+ transparency=97
272
+ group=group-0</panel_attributes><additional_attributes></additional_attributes></element></diagram>