@etherisc/gif-next 0.0.2-a196164-289 → 0.0.2-a38075a-779

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 (405) hide show
  1. package/README.md +211 -27
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +176 -23
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +267 -54
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +129 -23
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -188
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +15 -227
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -213
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +334 -99
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +365 -80
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/AccessManagedUpgradeableInitializeable.sol/AccessManagedUpgradeableInitializeable.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagedUpgradeableInitializeable.sol/AccessManagedUpgradeableInitializeable.json +137 -0
  46. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  47. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  48. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  49. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +775 -0
  50. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  51. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  52. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  53. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  54. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  55. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +789 -1139
  56. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  57. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  58. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +485 -0
  60. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  61. package/artifacts/contracts/instance/Instance.sol/Instance.json +2350 -1201
  62. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +940 -0
  64. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  66. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  68. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +970 -0
  70. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +512 -0
  72. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +272 -0
  74. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +194 -41
  76. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  77. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +1 -1
  78. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  79. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  80. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  81. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  82. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
  83. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  84. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  85. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  86. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  87. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  88. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  89. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  90. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  91. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  92. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  93. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  94. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  95. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  96. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  97. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  98. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  99. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +293 -84
  101. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +267 -58
  103. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  104. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
  105. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  106. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +121 -60
  107. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  108. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +118 -38
  109. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  110. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +280 -33
  111. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  112. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +158 -69
  113. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  114. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +477 -58
  115. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  116. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +464 -0
  117. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  118. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +327 -125
  119. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  120. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +488 -0
  121. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  122. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  123. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  124. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +377 -37
  125. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  126. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +947 -0
  127. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  128. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  129. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  130. package/artifacts/contracts/registry/Registry.sol/Registry.json +487 -123
  131. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  132. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1293 -0
  133. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  134. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +517 -0
  135. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  136. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  137. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  138. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  139. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  140. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  141. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  142. package/artifacts/contracts/{instance/module/component/ComponentModule.sol/ComponentModule.json → shared/INftOwnable.sol/INftOwnable.json} +67 -57
  143. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  145. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  146. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/IService.sol/IService.json} +114 -80
  147. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  148. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  149. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  150. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  151. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  152. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  153. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  154. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  155. package/artifacts/contracts/{instance/base/IService.sol/IService.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +172 -71
  156. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  157. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/Service.sol/Service.json} +149 -144
  158. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  159. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  160. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  161. package/artifacts/contracts/shared/{Proxy.sol/ProxyWithProxyAdminGetter.json → UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json} +4 -4
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  163. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -25
  164. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  166. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  168. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  170. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  171. package/artifacts/contracts/test/TestService.sol/TestService.json +201 -67
  172. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  173. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  174. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  175. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  176. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  177. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +27 -34
  178. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  179. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  180. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  181. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  184. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  185. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  192. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  193. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  194. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  195. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  197. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  198. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  199. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  201. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  202. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  203. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  204. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  205. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  206. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  207. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  208. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  209. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  210. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  211. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  212. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  213. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  214. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  215. package/contracts/components/BaseComponent.sol +26 -29
  216. package/contracts/components/Distribution.sol +49 -18
  217. package/contracts/components/IBaseComponent.sol +9 -3
  218. package/contracts/components/IDistributionComponent.sol +3 -6
  219. package/contracts/components/IPoolComponent.sol +7 -12
  220. package/contracts/components/IProductComponent.sol +4 -7
  221. package/contracts/components/Pool.sol +111 -79
  222. package/contracts/components/Product.sol +109 -47
  223. package/contracts/experiment/cloning/Cloner.sol +47 -0
  224. package/contracts/instance/AccessManagedUpgradeableInitializeable.sol +17 -0
  225. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  226. package/contracts/instance/BundleManager.sol +129 -0
  227. package/contracts/instance/Cloneable.sol +46 -0
  228. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  229. package/contracts/instance/IInstance.sol +48 -45
  230. package/contracts/instance/IInstanceBase.sol +26 -0
  231. package/contracts/instance/IInstanceService.sol +32 -0
  232. package/contracts/instance/Instance.sol +437 -57
  233. package/contracts/instance/InstanceAccessManager.sol +288 -0
  234. package/contracts/instance/InstanceBase.sol +41 -0
  235. package/contracts/instance/InstanceReader.sol +315 -0
  236. package/contracts/instance/InstanceService.sol +233 -0
  237. package/contracts/instance/InstanceServiceManager.sol +57 -0
  238. package/contracts/instance/ObjectManager.sol +95 -0
  239. package/contracts/instance/base/ComponentServiceBase.sol +102 -10
  240. package/contracts/instance/base/IInstanceBase.sol +3 -2
  241. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  242. package/contracts/instance/base/ILifecycle.sol +3 -3
  243. package/contracts/instance/base/KeyValueStore.sol +49 -38
  244. package/contracts/instance/base/Lifecycle.sol +1 -1
  245. package/contracts/instance/module/IAccess.sol +38 -0
  246. package/contracts/instance/module/IBundle.sol +20 -0
  247. package/contracts/instance/module/IDistribution.sol +39 -0
  248. package/contracts/instance/module/IPolicy.sol +45 -0
  249. package/contracts/instance/module/IRisk.sol +11 -0
  250. package/contracts/instance/module/ISetup.sol +46 -0
  251. package/contracts/instance/module/ITreasury.sol +23 -0
  252. package/contracts/instance/service/ComponentOwnerService.sol +232 -72
  253. package/contracts/instance/service/DistributionService.sol +49 -20
  254. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  255. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  256. package/contracts/instance/service/IDistributionService.sol +1 -1
  257. package/contracts/instance/service/IPoolService.sol +17 -3
  258. package/contracts/instance/service/IProductService.sol +9 -6
  259. package/contracts/instance/service/PoolService.sol +190 -52
  260. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  261. package/contracts/instance/service/ProductService.sol +195 -134
  262. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  263. package/contracts/registry/ChainNft.sol +80 -37
  264. package/contracts/registry/IRegistry.sol +49 -25
  265. package/contracts/registry/IRegistryService.sol +50 -0
  266. package/contracts/registry/ITransferInterceptor.sol +6 -0
  267. package/contracts/registry/Registry.sol +336 -269
  268. package/contracts/registry/RegistryService.sol +358 -0
  269. package/contracts/registry/RegistryServiceManager.sol +80 -0
  270. package/contracts/registry/TokenRegistry.sol +111 -0
  271. package/contracts/shared/ContractDeployerLib.sol +72 -0
  272. package/contracts/shared/ERC165.sol +6 -2
  273. package/contracts/shared/INftOwnable.sol +22 -0
  274. package/contracts/shared/IRegisterable.sol +8 -15
  275. package/contracts/{instance/base → shared}/IService.sol +3 -3
  276. package/contracts/shared/IVersionable.sol +44 -13
  277. package/contracts/shared/NftOwnable.sol +134 -0
  278. package/contracts/shared/ProxyManager.sol +94 -0
  279. package/contracts/shared/Registerable.sol +63 -59
  280. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  281. package/contracts/shared/Service.sol +55 -0
  282. package/contracts/shared/TokenHandler.sol +27 -0
  283. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  284. package/contracts/shared/Versionable.sol +110 -62
  285. package/contracts/test/TestFee.sol +2 -2
  286. package/contracts/test/TestRegisterable.sol +5 -6
  287. package/contracts/test/TestRoleId.sol +1 -1
  288. package/contracts/test/TestService.sol +5 -13
  289. package/contracts/types/DistributorType.sol +55 -0
  290. package/contracts/types/Fee.sol +3 -3
  291. package/contracts/types/Key32.sol +8 -3
  292. package/contracts/types/NftIdSet.sol +26 -24
  293. package/contracts/types/NumberId.sol +52 -0
  294. package/contracts/types/ObjectType.sol +35 -14
  295. package/contracts/types/Referral.sol +85 -0
  296. package/contracts/types/RoleId.sol +61 -9
  297. package/contracts/types/StateId.sol +5 -1
  298. package/contracts/types/Timestamp.sol +7 -3
  299. package/contracts/types/UFixed.sol +128 -12
  300. package/contracts/types/Version.sol +5 -1
  301. package/package.json +4 -3
  302. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  303. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  304. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  305. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  306. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  307. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  308. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  309. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  310. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  311. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +0 -10
  312. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  313. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  314. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  315. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  316. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  317. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  318. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  319. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  320. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  321. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  322. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  323. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -117
  324. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  325. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  326. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  327. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  328. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  329. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  330. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  331. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -284
  332. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  333. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
  334. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  335. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  336. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  337. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -144
  338. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  339. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -144
  340. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  341. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  342. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  343. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  344. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  345. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  346. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  347. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -511
  348. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  349. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  350. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  351. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -511
  352. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  353. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  354. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  355. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  356. package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.dbg.json +0 -4
  357. package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.json +0 -711
  358. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  359. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  360. package/artifacts/contracts/shared/Proxy.sol/Proxy.dbg.json +0 -4
  361. package/artifacts/contracts/shared/Proxy.sol/Proxy.json +0 -235
  362. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +0 -4
  363. package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.dbg.json +0 -4
  364. package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.json +0 -228
  365. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  366. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -405
  367. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  368. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -578
  369. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  370. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -575
  371. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  372. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  373. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  374. package/contracts/experiment/statemachine/README.md +0 -112
  375. package/contracts/instance/IInstanceLinked.sol +0 -8
  376. package/contracts/instance/base/InstanceBase.sol +0 -91
  377. package/contracts/instance/base/ModuleBase.sol +0 -57
  378. package/contracts/instance/base/ServiceBase.sol +0 -37
  379. package/contracts/instance/module/access/Access.sol +0 -149
  380. package/contracts/instance/module/access/IAccess.sol +0 -53
  381. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  382. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  383. package/contracts/instance/module/component/ComponentModule.sol +0 -70
  384. package/contracts/instance/module/component/IComponent.sol +0 -28
  385. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  386. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  387. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  388. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  389. package/contracts/instance/module/pool/IPoolModule.sol +0 -40
  390. package/contracts/instance/module/pool/PoolModule.sol +0 -90
  391. package/contracts/instance/module/risk/IRisk.sol +0 -26
  392. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  393. package/contracts/instance/module/treasury/ITreasury.sol +0 -82
  394. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  395. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -138
  396. package/contracts/registry/IChainNft.sol +0 -21
  397. package/contracts/registry/IRegistryLinked.sol +0 -8
  398. package/contracts/registry/RegistryUpgradeable.sol +0 -548
  399. package/contracts/shared/IOwnable.sol +0 -6
  400. package/contracts/shared/Proxy.sol +0 -89
  401. package/contracts/shared/VersionableUpgradeable.sol +0 -120
  402. package/contracts/test/TestDistribution.sol +0 -21
  403. package/contracts/test/TestPool.sol +0 -25
  404. package/contracts/test/TestProduct.sol +0 -72
  405. package/contracts/types/ReferralId.sol +0 -48
@@ -1,548 +0,0 @@
1
- // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.20;
3
-
4
- import {Initializable} from "@openzeppelin5/contracts/proxy/utils/Initializable.sol";
5
-
6
- import {IRegisterable} from "../shared/IRegisterable.sol";
7
- import {IService} from "../instance/base/IService.sol";
8
-
9
- import {IChainNft} from "./IChainNft.sol";
10
- import {ChainNft} from "./ChainNft.sol";
11
- import {IRegistry} from "./IRegistry.sol";
12
- import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
13
- import {Version, VersionPart, VersionLib} from "../types/Version.sol";
14
- import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
15
-
16
- import {VersionableUpgradeable} from "../shared/VersionableUpgradeable.sol";
17
-
18
-
19
- /// IMPORTANT
20
- // Upgradeable contract MUST:
21
- // 1) inherit from Versionable
22
- // 2) implement version() function
23
- // 3) implement initialize() function with initializer modifier
24
- // 4) implement upgrade() function with reinitializer(version().toInt()) modifier
25
- // 5) have onlyInitialising modifier for each function callable during deployment and/or upgrade
26
- // 6) use default empty constructor -> _disableInitializer() called from Versionable contructor
27
- // 7) use namespace storage
28
- contract RegistryUpgradeable is
29
- VersionableUpgradeable,
30
- IRegisterable,
31
- IRegistry
32
- {
33
- //--- constants -----------------------------------------------------------------
34
- string public constant EMPTY_URI = "";
35
-
36
- // keccak256(abi.encode(uint256(keccak256("etherisc.storage.Registry")) - 1)) & ~bytes32(uint256(0xff));
37
- bytes32 internal constant STORAGE_LOCATION_V1 = 0x6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa300;
38
-
39
- //--- storage layout -------------------------------------------------------------
40
-
41
- // @custom:storage-location erc7201:etherisc.storage.Registry
42
- struct StorageV1 {
43
- mapping(NftId nftId => ObjectInfo info) info;
44
- mapping(address object => NftId nftId) nftIdByAddress;
45
- mapping(ObjectType objectType => bool) isValidType;
46
- mapping(ObjectType objectType => mapping(ObjectType objectParentType => bool)) isValidParentType;
47
-
48
- mapping(NftId nftId => string stringValue) name;
49
- mapping(bytes32 serviceNameHash => mapping(VersionPart majorVersion => address service)) service;
50
-
51
- NftId nftId;
52
- IChainNft chainNft;
53
- ChainNft chainNftInternal;
54
- address initialOwner;
55
- /// @dev will own protocol nft and registry nft(s) minted during initialize
56
- address _protocolOwner;
57
- }
58
-
59
- //--- state --------------------------------------------------------------------
60
-
61
- //--- external/public state changing functions --------------------------------
62
-
63
- function register(
64
- address objectAddress
65
- )
66
- // TODO add authz (only services may register components etc)
67
- // we have to check how we do authz for registring services (just restrict to protocol owner/registry owner)
68
- external
69
- virtual override
70
- returns (NftId nftId)
71
- {
72
- StorageV1 storage $ = _getStorageV1();
73
-
74
- require(
75
- $.nftIdByAddress[objectAddress].eqz(),
76
- "ERROR:REG-002:ALREADY_REGISTERED"
77
- );
78
-
79
- IRegisterable registerable = IRegisterable(objectAddress);
80
- require(
81
- registerable.supportsInterface(type(IRegisterable).interfaceId),
82
- "ERROR:REG-003:NOT_REGISTERABLE"
83
- );
84
-
85
- ObjectType objectType = registerable.getType();
86
- require(
87
- $.isValidType[objectType],
88
- "ERROR:REG-004:TYPE_INVALID"
89
- );
90
-
91
- NftId parentNftId = registerable.getParentNftId();
92
- require(
93
- isRegistered(parentNftId),
94
- "ERROR:REG-005:PARENT_NOT_REGISTERED"
95
- );
96
-
97
- require(
98
- $.isValidParentType[objectType][$.info[parentNftId].objectType],
99
- "ERROR:REG-006:PARENT_TYPE_INVALID"
100
- );
101
-
102
- // also check that nftId and parentNFtId are on the same chain if applicable
103
-
104
- // nft minting
105
- uint256 mintedTokenId = $.chainNft.mint(
106
- registerable.getOwner(),
107
- EMPTY_URI
108
- );
109
-
110
- nftId = toNftId(mintedTokenId);
111
-
112
- // special case services
113
- if(registerable.getType() == SERVICE()) {
114
- IService service = IService(objectAddress);
115
- require(
116
- service.supportsInterface(type(IService).interfaceId),
117
- "ERROR:REG-007:NOTservice"
118
- );
119
-
120
- string memory serviceName = service.getName();
121
- VersionPart majorVersion = service.getMajorVersion();
122
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
123
-
124
- // service specific state
125
- $.name[nftId] = serviceName;
126
-
127
- require(
128
- $.service[serviceNameHash][majorVersion] == address(0),
129
- "ERROR:REG-008:ALREADY_REGISTERED"
130
- );
131
- $.service[serviceNameHash][majorVersion] = objectAddress;
132
- }
133
-
134
- // create object info and link nft id with it
135
- _registerObjectInfo(registerable, nftId);
136
- }
137
-
138
-
139
- function registerObjectForInstance(
140
- NftId parentNftId,
141
- ObjectType objectType,
142
- address initialOwner,
143
- bytes memory data
144
- )
145
- external
146
- virtual override
147
- returns (
148
- // TODO add onlyRegisteredInstance
149
- NftId nftId
150
- )
151
- {
152
- StorageV1 storage $ = _getStorageV1();
153
-
154
- // TODO add more validation
155
- require(
156
- objectType == POLICY() || objectType == BUNDLE(),
157
- "ERROR:REG-010:TYPE_INVALID"
158
- );
159
-
160
- uint256 mintedTokenId = $.chainNft.mint(initialOwner, EMPTY_URI);
161
- nftId = toNftId(mintedTokenId);
162
-
163
- ObjectInfo memory info = ObjectInfo(
164
- nftId,
165
- parentNftId,
166
- objectType,
167
- address(0),
168
- initialOwner,
169
- data
170
- );
171
-
172
- $.info[nftId] = info;
173
-
174
- // add logging
175
- }
176
-
177
- //--- external/public view and pure functions --------------------------------
178
-
179
- function getObjectCount() external view override returns (uint256) {
180
- return _getStorageV1().chainNft.totalSupply();
181
- }
182
-
183
- function getNftId(
184
- address object
185
- ) external view override returns (NftId id) {
186
- return _getStorageV1().nftIdByAddress[object];
187
- }
188
-
189
- function isRegistered(
190
- NftId nftId
191
- ) public view override returns (bool) {
192
- return _getStorageV1().info[nftId].objectType.gtz();
193
- }
194
-
195
- function isRegistered(
196
- address object
197
- ) external view override returns (bool) {
198
- return _getStorageV1().nftIdByAddress[object].gtz();
199
- }
200
-
201
- function getObjectInfo(
202
- NftId nftId
203
- ) external view override returns (ObjectInfo memory info) {
204
- return _getStorageV1().info[nftId];
205
- }
206
-
207
- function getName(
208
- NftId nftId
209
- ) external view returns (string memory name) {
210
- return _getStorageV1().name[nftId];
211
- }
212
-
213
- function getOwner(
214
- NftId nftId
215
- ) external view override returns (address) {
216
- return _getStorageV1().chainNft.ownerOf(nftId.toInt());
217
- }
218
-
219
- function getChainNft() external view override returns (IChainNft) {
220
- return _getStorageV1().chainNft;
221
- }
222
-
223
- // special case to retrive a gif service
224
- function getServiceAddress(
225
- string memory serviceName,
226
- VersionPart majorVersion
227
- ) external view override returns (address serviceAddress) {
228
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
229
- return _getStorageV1().service[serviceNameHash][majorVersion];
230
- }
231
-
232
- function getProtocolOwner() external view override returns (address) {
233
- return _getStorageV1()._protocolOwner;
234
- }
235
-
236
- //--- from Registerable --------------------------------------
237
- // TODO
238
- // 1) Registerable can not register itself -> otherwise register have to trust owner address provided by registerable
239
- // registerable owner MUST call register and provide registerable address
240
- // it will work if component was delegate called ??? NO
241
- // owner-DELEGATE_CALL->component.register()-CALL->registryService->register()
242
- // owner-CALL->proxy-DELEGATE_CALL->compoment.register()-CALL->registryService->register()
243
- // 2) Who is msg.sender here???
244
- // Registration of Instance or Service (any deployed by GIF contract) msg.sender is done in proxe contructor
245
- function register() external pure override returns (NftId nftId) {
246
- return zeroNftId();
247
- }
248
-
249
- function getType() external pure override returns (ObjectType objectType) {
250
- return REGISTRY();
251
- }
252
-
253
- function getOwner() public view override returns (address owner) {
254
- StorageV1 storage $ = _getStorageV1();
255
- return $.nftId.gtz() ? this.getOwner($.nftId) : $.initialOwner;
256
- }
257
-
258
- function getNftId() public view override (IRegisterable, IRegistry) returns (NftId nftId) {
259
- return _getStorageV1().nftId;
260
- }
261
-
262
- function getParentNftId() public view returns (NftId nftId) {
263
- StorageV1 storage $ = _getStorageV1();
264
- // we're the global registry
265
- /*if(block.chainid == 1) {
266
- return toNftId($.chainNftInternal.PROTOCOL_NFT_ID());
267
- }
268
- else {
269
- return toNftId($.chainNftInternal.GLOBAL_REGISTRY_ID());
270
- }*/
271
- nftId = $.info[$.nftId].parentNftId;
272
- }
273
-
274
- function getData() public pure returns (bytes memory data) {
275
- return "";
276
- }
277
-
278
- //--- from IRegistryLinked --------------------------------------
279
-
280
- function getRegistry() external view override returns (IRegistry registry) {
281
- return this;
282
- }
283
-
284
- //--- from Versionable --------------------------------------
285
-
286
- /// @dev the protocol owner will get ownership of the
287
- // protocol nft and the global registry nft minted in this
288
- // initializer function
289
- function initialize(
290
- address implementation,
291
- address activatedBy,
292
- bytes memory data
293
- )
294
- public
295
- virtual override
296
- initializer
297
- {
298
- _updateVersionHistory(implementation, activatedBy);
299
- _initializeV01(data);
300
- }
301
-
302
- // can not upgrade to the first version
303
- function upgrade(
304
- address implementation,
305
- address activatedBy,
306
- bytes memory data
307
- )
308
- external
309
- virtual
310
- {
311
- revert();
312
- }
313
-
314
- function getVersion() public pure virtual override returns (Version) {
315
- return VersionLib.toVersion(1, 0, 0);
316
- }
317
-
318
- //--- IERC165 support -----------------------------------
319
-
320
- function supportsInterface(bytes4 interfaceId) external pure override returns (bool) {
321
- return interfaceId == type(IRegistry).interfaceId;
322
- }
323
-
324
- //--- all intenal and private functions -----------------------------------
325
-
326
- function _initializeV01(bytes memory data)
327
- internal
328
- onlyInitializing
329
- {
330
- StorageV1 storage $ = _getStorageV1();
331
-
332
- require(
333
- address($.chainNft) == address(0),
334
- "ERROR:REG-001:ALREADY_INITIALIZED"
335
- );
336
-
337
- address protocolOwner = abi.decode(data, (address));
338
- $.initialOwner = msg.sender; // TODO here delegate call from proxy constructor, msg.sender is proxy deployer -> Proxy.sol
339
- $._protocolOwner = protocolOwner;
340
-
341
- // deploy NFT
342
- $.chainNftInternal = new ChainNft(address(this));// adds 10kb to deployment size
343
- $.chainNft = IChainNft($.chainNftInternal);
344
-
345
- // initial registry setup
346
- _registerProtocol();
347
- $.nftId = _registerRegistry();
348
-
349
- // setup rules for further registrations
350
- _setupValidTypes();
351
- _setupValidParentTypes();
352
- }
353
-
354
- /// @dev defines which types are allowed to register
355
- function _setupValidTypes() internal onlyInitializing {
356
- StorageV1 storage $ = _getStorageV1();
357
- $.isValidType[REGISTRY()] = true; // only for global registry
358
- $.isValidType[TOKEN()] = true;
359
- $.isValidType[SERVICE()] = true;
360
- $.isValidType[INSTANCE()] = true;
361
- $.isValidType[STAKE()] = true;
362
- $.isValidType[PRODUCT()] = true;
363
- $.isValidType[ORACLE()] = true;
364
- $.isValidType[POOL()] = true;
365
- $.isValidType[DISTRIBUTION()] = true;
366
- $.isValidType[POLICY()] = true;
367
- $.isValidType[BUNDLE()] = true;
368
- }
369
-
370
- /// @dev defines which types - parent type relations are allowed to register
371
- function _setupValidParentTypes() internal onlyInitializing {
372
- StorageV1 storage $ = _getStorageV1();
373
- // registry as parent
374
- $.isValidParentType[TOKEN()][REGISTRY()] = true;
375
- $.isValidParentType[SERVICE()][REGISTRY()] = true;
376
- $.isValidParentType[INSTANCE()][REGISTRY()] = true;
377
-
378
- // instance as parent
379
- $.isValidParentType[PRODUCT()][INSTANCE()] = true;
380
- $.isValidParentType[DISTRIBUTION()][INSTANCE()] = true;
381
- $.isValidParentType[ORACLE()][INSTANCE()] = true;
382
- $.isValidParentType[POOL()][INSTANCE()] = true;
383
-
384
- // product as parent
385
- $.isValidParentType[POLICY()][PRODUCT()] = true;
386
-
387
- // pool as parent
388
- $.isValidParentType[BUNDLE()][POOL()] = true;
389
- $.isValidParentType[STAKE()][POOL()] = true;
390
- }
391
-
392
- /// @dev protocol registration used to anchor the dip ecosystem relations
393
- function _registerProtocol()
394
- virtual
395
- internal
396
- onlyInitializing
397
- {
398
- StorageV1 storage $ = _getStorageV1();
399
-
400
- uint256 protocolId = $.chainNftInternal.PROTOCOL_NFT_ID();
401
- $.chainNftInternal.mint($._protocolOwner, protocolId);
402
-
403
- NftId protocolNftid = toNftId(protocolId);
404
- ObjectInfo memory protocolInfo = ObjectInfo(
405
- protocolNftid,
406
- zeroNftId(), // parent nft id
407
- PROTOCOL(),
408
- address(0), // contract address
409
- $._protocolOwner,
410
- "" // data
411
- );
412
-
413
- $.info[protocolNftid] = protocolInfo;
414
- }
415
-
416
- /// @dev registry registration
417
- /// might also register the global registry when not on mainnet
418
- function _registerRegistry()
419
- virtual
420
- internal
421
- onlyInitializing
422
- returns (NftId registryNftId)
423
- {
424
- StorageV1 storage $ = _getStorageV1();
425
-
426
- uint256 registryId = $.chainNftInternal.calculateTokenId(2);
427
- registryNftId = toNftId(registryId);
428
-
429
- // we're not the global registry
430
- if(registryId != $.chainNftInternal.GLOBAL_REGISTRY_ID()) {
431
- _registerGlobalRegistry();
432
- }
433
-
434
- $.chainNftInternal.mint($._protocolOwner, registryId);
435
-
436
- // TODO error when deploying registry proxy
437
- // in that case "this" is proxy address, "msg.sender" is proxy deployer, here in delegate call
438
- // _registerObjectInfo() treats "this" as "IRegisterable"
439
- // thus registerable.anyFunction() calls proxy...
440
- /*_registerObjectInfo(this, registryNftId);*/
441
-
442
- NftId parentNftId;
443
- // we're the global registry
444
- if(block.chainid == 1) {
445
- parentNftId = toNftId($.chainNftInternal.PROTOCOL_NFT_ID());
446
- }
447
- else {
448
- parentNftId = toNftId($.chainNftInternal.GLOBAL_REGISTRY_ID());
449
- }
450
- ObjectInfo memory registryInfo = ObjectInfo(
451
- registryNftId,
452
- parentNftId, // registerable is proxy address, when in delegate call
453
- REGISTRY(),
454
- address(this), // proxy address
455
- $._protocolOwner, // registry owner is different from proxy owner
456
- ""
457
- );
458
-
459
- $.info[registryNftId] = registryInfo;
460
- $.nftIdByAddress[address(this)] = registryNftId;
461
-
462
- // add logging
463
- }
464
-
465
-
466
- /// @dev global registry registration for non mainnet registries
467
- function _registerGlobalRegistry()
468
- virtual
469
- internal
470
- onlyInitializing
471
- {
472
- StorageV1 storage $ = _getStorageV1();
473
-
474
- uint256 globalRegistryId = $.chainNftInternal.GLOBAL_REGISTRY_ID();
475
- $.chainNftInternal.mint($._protocolOwner, globalRegistryId);
476
-
477
- NftId globalRegistryNftId = toNftId(globalRegistryId);
478
- ObjectInfo memory globalRegistryInfo = ObjectInfo(
479
- globalRegistryNftId,
480
- toNftId($.chainNftInternal.PROTOCOL_NFT_ID()),
481
- REGISTRY(),
482
- address(0), // contract address
483
- $._protocolOwner,
484
- "" // data
485
- );
486
-
487
- $.info[globalRegistryNftId] = globalRegistryInfo;
488
- }
489
-
490
- function _registerObjectInfo(
491
- IRegisterable registerable,
492
- NftId nftId
493
- )
494
- internal
495
- virtual
496
- onlyInitializing
497
- {
498
- address objectAddress = address(registerable);
499
- ObjectInfo memory info = ObjectInfo(
500
- nftId,
501
- registerable.getParentNftId(),
502
- registerable.getType(),
503
- objectAddress,
504
- registerable.getOwner(),
505
- registerable.getData()
506
- );
507
-
508
- StorageV1 storage $ = _getStorageV1();
509
- $.info[nftId] = info;
510
- $.nftIdByAddress[objectAddress] = nftId;
511
-
512
- // add logging
513
- }
514
-
515
- // TODO: private or internal ?
516
- // 1) new version have access only to its own storage slot (if previous versions did not expose theirs)
517
- // - have to chain initializers
518
- // + simple
519
- // - slow/costly, initialization gas usage will grow faster then 1)
520
- // - initialization functions count/code likely will grow with each new version
521
- // - new functions have access only to a local storage slot
522
- // 2) each intializer of each version have access to each "registry storage locations" he knows about ->
523
- // + no initializers chaining
524
- // + new variables can be added to older versions storage hmmm...redefine storage struct
525
- function _getStorageV1()
526
- private
527
- pure
528
- returns (StorageV1 storage s)
529
- {
530
- // solhint-disable no-inline-assembly
531
- assembly {
532
- s.slot := STORAGE_LOCATION_V1
533
- }
534
- }
535
- }
536
-
537
- /*
538
- **************** New implementation is set from delegate call ******************
539
- Implementation controled proxy?
540
- 1). Proxy allows implV1 to change proxy.implementation variable to a new one (e.g. ImplV2) -> this is called reinitialization
541
- 2). calls to proxy after reinitialization will point to new implementation -> like switching context -> old implementsations cuts itself from proxy
542
- 2). Proxy can have:
543
- a). safe implementation which it uses after construction by default
544
- safe implementation allows one reinitialization to implementation needed (can be done in one call after initialization)
545
- b). two impelemtations
546
- the first for upgrades (have reinitialize function which changes the address the second one)
547
- the second for appication specific stuff
548
- */
@@ -1,6 +0,0 @@
1
- // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
3
-
4
- interface IOwnable {
5
- function getOwner() external view returns (address owner);
6
- }
@@ -1,89 +0,0 @@
1
- // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.20;
3
-
4
- import {Ownable} from "@openzeppelin5/contracts/access/Ownable.sol";
5
- import {ProxyAdmin} from "@openzeppelin5/contracts/proxy/transparent/ProxyAdmin.sol";
6
- import {TransparentUpgradeableProxy, ITransparentUpgradeableProxy} from "@openzeppelin5/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
7
-
8
- import {IVersionable} from "./IVersionable.sol";
9
-
10
- contract ProxyWithProxyAdminGetter is TransparentUpgradeableProxy {
11
-
12
- constructor(address implementation, address initialProxyAdminOwner, bytes memory data)
13
- TransparentUpgradeableProxy(implementation, initialProxyAdminOwner, data)
14
- {}
15
-
16
- function getProxyAdmin() external returns (ProxyAdmin) { return ProxyAdmin(_proxyAdmin()); }
17
- }
18
-
19
- contract Proxy is Ownable {
20
-
21
- // TODO use contract functions selectors ???
22
- string public constant INITIALIZE_SIGNATURE = "initialize(address,address,bytes)";
23
- string public constant UPGRADE_SIGNATURE = "upgrade(address,address,bytes)";
24
-
25
- ProxyWithProxyAdminGetter private _proxy;
26
- bool private _isDeployed;
27
-
28
- /// @dev only used to capture proxy owner
29
- constructor()
30
- Ownable(msg.sender)
31
- {
32
- }
33
-
34
- function getDeployData(address implementation, address proxyOwner, bytes memory deployData) public pure returns (bytes memory data) {
35
- return abi.encodeWithSignature(INITIALIZE_SIGNATURE, implementation, proxyOwner, deployData);
36
- }
37
-
38
- function getUpgradeData(address implementation, address proxyOwner, bytes memory upgradeData) public pure returns (bytes memory data) {
39
- return abi.encodeWithSignature(UPGRADE_SIGNATURE, implementation, proxyOwner, upgradeData);
40
- }
41
-
42
- /// @dev deploy initial contract
43
- function deploy(address initialImplementation, bytes memory deployData)
44
- external
45
- onlyOwner()
46
- returns (IVersionable versionable)
47
- {
48
- require(!_isDeployed, "ERROR:PRX-010:ALREADY_DEPLOYED");
49
-
50
- address currentProxyOwner = owner();
51
- address initialProxyAdminOwner = address(this);
52
- bytes memory data = getDeployData(initialImplementation, currentProxyOwner, deployData);
53
-
54
- _proxy = new ProxyWithProxyAdminGetter(
55
- initialImplementation,
56
- initialProxyAdminOwner,
57
- data
58
- );
59
-
60
- _isDeployed = true;
61
- versionable = IVersionable(address(_proxy));
62
- }
63
-
64
- /// @dev upgrade existing contract
65
- function upgrade(address newImplementation, bytes memory upgradeData)
66
- external
67
- onlyOwner
68
- returns (IVersionable versionable)
69
- {
70
- require(_isDeployed, "ERROR:PRX-020:NOT_YET_DEPLOYED");
71
-
72
- address currentProxyOwner = owner();
73
- // ProxyAdmin proxyAdmin = _proxy.getProxyAdmin();
74
- ProxyAdmin proxyAdmin = getProxyAdmin();
75
- ITransparentUpgradeableProxy proxy = ITransparentUpgradeableProxy(address(_proxy));
76
- bytes memory data = getUpgradeData(newImplementation, currentProxyOwner, upgradeData);
77
-
78
- proxyAdmin.upgradeAndCall(
79
- proxy,
80
- newImplementation,
81
- data);
82
-
83
- versionable = IVersionable(address(_proxy));
84
- }
85
-
86
- function getProxyAdmin() public returns (ProxyAdmin) {
87
- return _proxy.getProxyAdmin();
88
- }
89
- }