@etherisc/gif-next 0.0.2-a196164-289 → 0.0.2-a25e4b8-781

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 (420) hide show
  1. package/README.md +211 -27
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +588 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +465 -89
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → components/IComponent.sol/IComponent.json} +213 -187
  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 +5 -218
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +516 -146
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +554 -117
  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/BundleManager.sol/BundleManager.dbg.json +4 -0
  45. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  46. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  47. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  48. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  49. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +983 -1059
  50. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  51. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +570 -0
  52. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/Instance.sol/Instance.json +1728 -1243
  54. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  55. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1034 -0
  56. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1381 -0
  58. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +956 -0
  60. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +460 -0
  62. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  64. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/{ServiceBase.sol/ServiceBase.json → ComponentService.sol/ComponentService.json} +266 -58
  66. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -13
  68. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  70. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
  73. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  75. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  76. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  77. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  78. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  79. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  80. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  81. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  82. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  83. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  84. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  85. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  86. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  87. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  88. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  89. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  90. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1094 -0
  91. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  92. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +436 -0
  93. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +327 -70
  95. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  96. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +424 -0
  97. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +720 -0
  99. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +131 -51
  101. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +771 -0
  103. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +132 -114
  105. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  106. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +127 -262
  107. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  108. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1219 -0
  109. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  110. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +492 -0
  111. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  112. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +312 -144
  113. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  114. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +424 -0
  115. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  116. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +275 -372
  117. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  118. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +424 -0
  119. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  120. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  121. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  122. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +455 -36
  123. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  124. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +981 -0
  125. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  126. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  127. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  128. package/artifacts/contracts/registry/Registry.sol/Registry.json +465 -111
  129. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  130. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  131. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  132. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1187 -0
  133. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  134. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +451 -0
  135. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  136. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  137. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  138. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +381 -0
  139. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  140. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  141. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  142. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  143. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  144. package/artifacts/contracts/{instance/module/component/ComponentModule.sol/ComponentModule.json → shared/INftOwnable.sol/INftOwnable.json} +67 -57
  145. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  147. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  148. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → shared/IService.sol/IService.json} +133 -117
  149. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  150. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  151. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  152. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  153. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  154. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  155. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  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} +148 -143
  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 +213 -79
  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/Component.sol +179 -0
  216. package/contracts/components/Distribution.sol +56 -34
  217. package/contracts/components/IComponent.sol +37 -0
  218. package/contracts/components/IDistributionComponent.sol +3 -6
  219. package/contracts/components/IPoolComponent.sol +7 -12
  220. package/contracts/components/IProductComponent.sol +6 -9
  221. package/contracts/components/Pool.sol +122 -99
  222. package/contracts/components/Product.sol +130 -60
  223. package/contracts/experiment/cloning/Cloner.sol +47 -0
  224. package/contracts/instance/BundleManager.sol +125 -0
  225. package/contracts/instance/Cloneable.sol +46 -0
  226. package/contracts/instance/IInstance.sol +57 -44
  227. package/contracts/instance/IInstanceService.sol +40 -0
  228. package/contracts/instance/Instance.sol +237 -58
  229. package/contracts/instance/InstanceAccessManager.sol +298 -0
  230. package/contracts/instance/InstanceReader.sol +293 -0
  231. package/contracts/instance/InstanceService.sol +362 -0
  232. package/contracts/instance/InstanceServiceManager.sol +54 -0
  233. package/contracts/instance/ObjectManager.sol +84 -0
  234. package/contracts/instance/base/ComponentService.sol +133 -0
  235. package/contracts/instance/base/IInstanceBase.sol +2 -3
  236. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  237. package/contracts/instance/base/ILifecycle.sol +3 -3
  238. package/contracts/instance/base/KeyValueStore.sol +49 -38
  239. package/contracts/instance/base/Lifecycle.sol +1 -1
  240. package/contracts/instance/module/IAccess.sol +48 -0
  241. package/contracts/instance/module/IBundle.sol +20 -0
  242. package/contracts/instance/module/IDistribution.sol +39 -0
  243. package/contracts/instance/module/IPolicy.sol +45 -0
  244. package/contracts/instance/module/IRisk.sol +11 -0
  245. package/contracts/instance/module/ISetup.sol +46 -0
  246. package/contracts/instance/module/ITreasury.sol +23 -0
  247. package/contracts/instance/service/BundleService.sol +293 -0
  248. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  249. package/contracts/instance/service/DistributionService.sol +79 -23
  250. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  251. package/contracts/instance/service/IBundleService.sol +44 -0
  252. package/contracts/instance/service/IDistributionService.sol +1 -1
  253. package/contracts/instance/service/IPolicyService.sol +94 -0
  254. package/contracts/instance/service/IPoolService.sol +7 -24
  255. package/contracts/instance/service/IProductService.sol +9 -76
  256. package/contracts/instance/service/PolicyService.sol +538 -0
  257. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  258. package/contracts/instance/service/PoolService.sol +105 -112
  259. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  260. package/contracts/instance/service/ProductService.sol +163 -431
  261. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  262. package/contracts/registry/ChainNft.sol +79 -36
  263. package/contracts/registry/IRegistry.sol +65 -24
  264. package/contracts/registry/IRegistryService.sol +57 -0
  265. package/contracts/registry/ITransferInterceptor.sol +6 -0
  266. package/contracts/registry/Registry.sol +358 -287
  267. package/contracts/registry/RegistryAccessManager.sol +216 -0
  268. package/contracts/registry/RegistryService.sol +312 -0
  269. package/contracts/registry/RegistryServiceManager.sol +62 -0
  270. package/contracts/registry/ReleaseManager.sol +352 -0
  271. package/contracts/registry/TokenRegistry.sol +112 -0
  272. package/contracts/shared/ContractDeployerLib.sol +72 -0
  273. package/contracts/shared/ERC165.sol +6 -2
  274. package/contracts/shared/INftOwnable.sol +22 -0
  275. package/contracts/shared/IRegisterable.sol +8 -17
  276. package/contracts/shared/IService.sol +16 -0
  277. package/contracts/shared/IVersionable.sol +44 -13
  278. package/contracts/shared/NftOwnable.sol +136 -0
  279. package/contracts/shared/ProxyManager.sol +94 -0
  280. package/contracts/shared/Registerable.sol +63 -59
  281. package/contracts/shared/Service.sol +60 -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 +7 -14
  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/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  303. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -174
  304. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  305. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -174
  306. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  307. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  308. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  309. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  310. package/artifacts/contracts/instance/base/IService.sol/IService.json +0 -341
  311. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  312. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  313. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  314. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  315. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  316. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  317. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +0 -10
  318. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  319. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  320. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  321. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  322. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  323. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  324. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  325. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  326. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  327. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  328. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  329. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -117
  330. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  331. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  332. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  333. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  334. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  335. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  336. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  337. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -284
  338. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  339. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
  340. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  341. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  342. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -144
  344. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  345. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -144
  346. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  347. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  348. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  349. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  350. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  351. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  352. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  353. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -511
  354. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  355. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  356. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  357. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -511
  358. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  359. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -618
  360. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  361. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  362. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  363. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  364. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  365. package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.dbg.json +0 -4
  366. package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.json +0 -711
  367. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  368. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  369. package/artifacts/contracts/shared/Proxy.sol/Proxy.dbg.json +0 -4
  370. package/artifacts/contracts/shared/Proxy.sol/Proxy.json +0 -235
  371. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +0 -4
  372. package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.dbg.json +0 -4
  373. package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.json +0 -228
  374. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  375. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -405
  376. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  377. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -578
  378. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  379. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -575
  380. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  381. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  382. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  383. package/contracts/components/BaseComponent.sol +0 -94
  384. package/contracts/components/IBaseComponent.sol +0 -19
  385. package/contracts/experiment/statemachine/README.md +0 -112
  386. package/contracts/instance/IInstanceLinked.sol +0 -8
  387. package/contracts/instance/base/ComponentServiceBase.sol +0 -42
  388. package/contracts/instance/base/IService.sol +0 -15
  389. package/contracts/instance/base/InstanceBase.sol +0 -91
  390. package/contracts/instance/base/ModuleBase.sol +0 -57
  391. package/contracts/instance/base/ServiceBase.sol +0 -37
  392. package/contracts/instance/module/access/Access.sol +0 -149
  393. package/contracts/instance/module/access/IAccess.sol +0 -53
  394. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  395. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  396. package/contracts/instance/module/component/ComponentModule.sol +0 -70
  397. package/contracts/instance/module/component/IComponent.sol +0 -28
  398. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  399. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  400. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  401. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  402. package/contracts/instance/module/pool/IPoolModule.sol +0 -40
  403. package/contracts/instance/module/pool/PoolModule.sol +0 -90
  404. package/contracts/instance/module/risk/IRisk.sol +0 -26
  405. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  406. package/contracts/instance/module/treasury/ITreasury.sol +0 -82
  407. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  408. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -138
  409. package/contracts/instance/service/ComponentOwnerService.sol +0 -157
  410. package/contracts/instance/service/IComponentOwnerService.sol +0 -22
  411. package/contracts/registry/IChainNft.sol +0 -21
  412. package/contracts/registry/IRegistryLinked.sol +0 -8
  413. package/contracts/registry/RegistryUpgradeable.sol +0 -548
  414. package/contracts/shared/IOwnable.sol +0 -6
  415. package/contracts/shared/Proxy.sol +0 -89
  416. package/contracts/shared/VersionableUpgradeable.sol +0 -120
  417. package/contracts/test/TestDistribution.sol +0 -21
  418. package/contracts/test/TestPool.sol +0 -25
  419. package/contracts/test/TestProduct.sol +0 -72
  420. package/contracts/types/ReferralId.sol +0 -48
@@ -1,8 +0,0 @@
1
- // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
3
-
4
- import {IRegistry} from "../registry/IRegistry.sol";
5
-
6
- interface IRegistryLinked {
7
- function getRegistry() external view returns (IRegistry registry);
8
- }
@@ -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
- }