@etherisc/gif-next 0.0.2-787eabe-684 → 0.0.2-790d44b-698

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 (360) hide show
  1. package/README.md +155 -7
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/components/{Component.sol/Component.json → BaseComponent.sol/BaseComponent.json} +48 -53
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +405 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IBaseComponent.sol/IBaseComponent.json} +48 -53
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +340 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +487 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +370 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +405 -40
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +258 -45
  18. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
  20. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  22. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  24. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  26. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
  33. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  34. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  35. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  44. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  45. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  46. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1403 -247
  48. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  49. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  50. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/Instance.sol/Instance.json +1769 -383
  52. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  53. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +364 -0
  54. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  56. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +560 -0
  58. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  60. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/{component/ComponentModule.sol/ComponentModule.json → base/IService.sol/IService.json} +152 -138
  62. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  63. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +440 -0
  64. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +710 -0
  66. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  67. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  68. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
  69. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.json +10 -0
  70. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  71. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +364 -0
  72. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  73. package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
  74. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  75. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
  76. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
  78. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  79. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +297 -0
  80. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  81. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  82. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +297 -0
  84. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +117 -0
  86. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  88. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{product/IProductService.sol/IProductService.json → module/component/IComponent.sol/IComponentModule.json} +56 -53
  90. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
  92. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.json +10 -0
  94. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +10 -0
  96. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  97. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  98. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  99. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +159 -106
  100. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  101. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +159 -106
  102. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  103. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  104. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  105. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPoolModule.json +57 -62
  106. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  107. package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +50 -68
  108. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
  109. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
  110. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
  111. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +113 -0
  112. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
  113. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +131 -0
  114. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  115. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.json +10 -0
  116. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  117. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +511 -0
  118. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  119. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  120. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  121. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +511 -0
  122. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +595 -0
  124. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +484 -0
  126. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +405 -0
  128. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  129. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +366 -0
  130. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  131. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +481 -0
  132. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  133. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +671 -0
  134. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  135. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +607 -0
  136. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  137. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +922 -0
  138. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  139. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +65 -2
  140. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  141. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  142. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +103 -77
  143. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
  145. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  146. package/artifacts/contracts/registry/Registry.sol/Registry.json +436 -59
  147. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  148. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  149. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
  150. package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
  151. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  152. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +18 -63
  153. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  154. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  155. package/artifacts/contracts/shared/Proxy.sol/ProxyDeployer.dbg.json +4 -0
  156. package/artifacts/contracts/shared/Proxy.sol/ProxyDeployer.json +248 -0
  157. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +4 -0
  158. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.json +129 -0
  159. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  160. package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +18 -63
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  163. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +4 -0
  164. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +405 -0
  165. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  166. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  167. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  168. package/artifacts/contracts/test/TestPool.sol/TestPool.json +578 -0
  169. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  170. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +575 -0
  171. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  172. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
  173. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  174. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  175. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  176. package/artifacts/contracts/test/TestService.sol/TestService.json +443 -0
  177. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  178. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  179. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  180. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  181. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  182. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +270 -0
  183. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  184. package/artifacts/contracts/test/Usdc.sol/USDC.json +338 -0
  185. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  186. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  187. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  189. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  191. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  192. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  193. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  194. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
  195. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  197. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  198. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  199. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  200. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  201. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
  202. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -0
  203. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  204. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  205. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  206. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  207. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  208. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  209. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  210. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +64 -2
  211. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  212. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +88 -62
  213. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  214. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  215. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  216. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  217. package/contracts/components/BaseComponent.sol +94 -0
  218. package/contracts/components/Distribution.sol +132 -0
  219. package/contracts/components/IBaseComponent.sol +19 -0
  220. package/contracts/components/IDistributionComponent.sol +47 -0
  221. package/contracts/components/IPoolComponent.sol +71 -0
  222. package/contracts/components/IProductComponent.sol +38 -0
  223. package/contracts/components/Pool.sol +223 -10
  224. package/contracts/components/Product.sol +192 -20
  225. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  226. package/contracts/experiment/statemachine/ISM.sol +25 -0
  227. package/contracts/experiment/statemachine/README.md +112 -0
  228. package/contracts/experiment/statemachine/SM.sol +57 -0
  229. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  230. package/contracts/instance/IInstance.sol +43 -8
  231. package/contracts/instance/IInstanceLinked.sol +8 -0
  232. package/contracts/instance/Instance.sol +52 -42
  233. package/contracts/instance/base/ComponentServiceBase.sol +42 -0
  234. package/contracts/instance/base/IInstanceBase.sol +22 -0
  235. package/contracts/instance/base/IKeyValueStore.sol +50 -0
  236. package/contracts/instance/base/ILifecycle.sol +30 -0
  237. package/contracts/instance/base/IService.sol +15 -0
  238. package/contracts/instance/base/InstanceBase.sol +91 -0
  239. package/contracts/instance/base/KeyValueStore.sol +161 -0
  240. package/contracts/instance/base/Lifecycle.sol +100 -0
  241. package/contracts/instance/base/ModuleBase.sol +57 -0
  242. package/contracts/instance/base/ServiceBase.sol +37 -0
  243. package/contracts/instance/module/access/Access.sol +149 -0
  244. package/contracts/instance/module/access/IAccess.sol +53 -0
  245. package/contracts/instance/module/bundle/BundleModule.sol +134 -0
  246. package/contracts/instance/module/bundle/IBundle.sol +53 -0
  247. package/contracts/instance/module/component/ComponentModule.sol +70 -0
  248. package/contracts/instance/module/component/IComponent.sol +28 -0
  249. package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
  250. package/contracts/instance/module/distribution/IDistribution.sol +10 -0
  251. package/contracts/instance/module/policy/IPolicy.sol +63 -0
  252. package/contracts/instance/module/policy/PolicyModule.sol +91 -0
  253. package/contracts/instance/module/pool/IPoolModule.sol +40 -0
  254. package/contracts/instance/module/pool/PoolModule.sol +90 -0
  255. package/contracts/instance/module/risk/IRisk.sol +26 -0
  256. package/contracts/instance/module/risk/RiskModule.sol +62 -0
  257. package/contracts/instance/module/treasury/ITreasury.sol +82 -0
  258. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  259. package/contracts/instance/module/treasury/TreasuryModule.sol +138 -0
  260. package/contracts/instance/service/ComponentOwnerService.sol +157 -0
  261. package/contracts/instance/service/DistributionService.sol +59 -0
  262. package/contracts/instance/service/IComponentOwnerService.sol +22 -0
  263. package/contracts/instance/service/IDistributionService.sol +12 -0
  264. package/contracts/instance/service/IPoolService.sol +37 -0
  265. package/contracts/instance/service/IProductService.sol +107 -0
  266. package/contracts/instance/service/PoolService.sol +149 -0
  267. package/contracts/instance/service/ProductService.sol +509 -0
  268. package/contracts/registry/ChainNft.sol +61 -37
  269. package/contracts/registry/IRegistry.sol +27 -50
  270. package/contracts/registry/IRegistryLinked.sol +8 -0
  271. package/contracts/registry/Registry.sol +372 -123
  272. package/contracts/shared/ERC165.sol +21 -0
  273. package/contracts/shared/IOwnable.sol +6 -0
  274. package/contracts/shared/IRegisterable.sol +24 -0
  275. package/contracts/shared/IVersionable.sol +94 -0
  276. package/contracts/shared/Proxy.sol +94 -0
  277. package/contracts/shared/Registerable.sol +86 -0
  278. package/contracts/shared/Versionable.sol +141 -0
  279. package/contracts/test/TestDistribution.sol +21 -0
  280. package/contracts/test/TestFee.sol +25 -0
  281. package/contracts/test/TestPool.sol +25 -0
  282. package/contracts/test/TestProduct.sol +72 -0
  283. package/contracts/test/TestRegisterable.sol +19 -0
  284. package/contracts/test/TestRoleId.sol +14 -0
  285. package/contracts/test/TestService.sol +32 -0
  286. package/contracts/test/TestToken.sol +26 -0
  287. package/contracts/test/TestVersion.sol +44 -0
  288. package/contracts/test/TestVersionable.sol +17 -0
  289. package/contracts/test/Usdc.sol +26 -0
  290. package/contracts/types/AddressSet.sol +58 -0
  291. package/contracts/types/Fee.sol +56 -0
  292. package/contracts/types/Key32.sol +45 -0
  293. package/contracts/types/NftId.sol +22 -1
  294. package/contracts/types/NftIdSet.sol +60 -0
  295. package/contracts/types/ObjectType.sol +131 -0
  296. package/contracts/types/ReferralId.sol +48 -0
  297. package/contracts/types/RiskId.sol +43 -0
  298. package/contracts/types/RoleId.sol +38 -0
  299. package/contracts/types/StateId.sol +101 -0
  300. package/contracts/types/Timestamp.sol +22 -1
  301. package/contracts/types/UFixed.sol +26 -22
  302. package/contracts/types/Version.sol +103 -0
  303. package/package.json +14 -5
  304. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  305. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  306. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  307. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  308. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  309. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  310. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  311. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  312. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  313. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  314. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  315. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  316. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  317. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  318. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  319. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  320. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  321. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  322. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  323. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  324. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  325. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  326. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  327. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  328. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  329. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  330. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  331. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  332. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  333. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  334. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  336. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  337. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  339. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  340. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  341. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  342. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  343. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  344. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  345. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  346. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  347. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  348. package/contracts/components/Component.sol +0 -60
  349. package/contracts/components/IPool.sol +0 -9
  350. package/contracts/components/IProduct.sol +0 -9
  351. package/contracts/instance/access/Access.sol +0 -165
  352. package/contracts/instance/access/IAccess.sol +0 -63
  353. package/contracts/instance/component/ComponentModule.sol +0 -213
  354. package/contracts/instance/component/IComponent.sol +0 -73
  355. package/contracts/instance/policy/IPolicy.sol +0 -51
  356. package/contracts/instance/policy/PolicyModule.sol +0 -91
  357. package/contracts/instance/pool/IPoolModule.sol +0 -29
  358. package/contracts/instance/pool/PoolModule.sol +0 -73
  359. package/contracts/instance/product/IProductService.sol +0 -36
  360. package/contracts/instance/product/ProductService.sol +0 -112
@@ -1,152 +1,174 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {IChainNft} from "./IChainNft.sol";
5
- import {IRegistry, IRegistryLinked, IRegisterable} from "./IRegistry.sol";
6
- import {NftId, toNftId} from "../types/NftId.sol";
7
- import {NftIdLib} from "../types/NftId.sol";
4
+ import {IRegisterable} from "../shared/IRegisterable.sol";
5
+ import {IService} from "../instance/base/IService.sol";
8
6
 
9
- contract RegistryLinked is IRegistryLinked {
10
- IRegistry internal _registry;
7
+ import {IChainNft} from "./IChainNft.sol";
8
+ import {ChainNft} from "./ChainNft.sol";
9
+ import {IRegistry} from "./IRegistry.sol";
10
+ import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
11
+ import {Version, VersionPart, VersionLib} from "../types/Version.sol";
12
+ import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
11
13
 
12
- constructor(address registry) {
13
- _registry = IRegistry(registry);
14
- }
14
+ import {Versionable} from "../shared/Versionable.sol";
15
15
 
16
- function getRegistry() external view override returns (IRegistry registry) {
17
- return _registry;
18
- }
19
- }
20
16
 
21
- abstract contract Registerable is RegistryLinked, IRegisterable {
17
+ contract Registry is
18
+ Versionable,
19
+ IRegisterable,
20
+ IRegistry
21
+ {
22
22
  using NftIdLib for NftId;
23
23
 
24
- address private _initialOwner;
25
-
26
- constructor(address registry) RegistryLinked(registry) {
27
- _initialOwner = msg.sender;
28
- }
29
-
30
- // getType, getData and register need to be implemented by concrete contract
31
-
32
- function isRegisterable() external pure override returns (bool) {
33
- return true;
34
- }
35
-
36
- function getInitialOwner() public view override returns (address deployer) {
37
- return _initialOwner;
38
- }
39
-
40
- function isRegistered() public view override returns (bool) {
41
- NftId nftId = _registry.getNftId(address(this));
42
- return nftId.gtz();
43
- }
44
-
45
- function getNftId() public view override returns (NftId nftId) {
46
- return _registry.getNftId(address(this));
47
- }
48
-
49
- function getOwner() public view override returns (address owner) {
50
- NftId id = _registry.getNftId(address(this));
51
- owner = _registry.getOwner(id);
52
- return owner != address(0) ? owner : _initialOwner;
53
- }
54
- }
55
-
56
- contract Registry is IRegistry {
57
- using NftIdLib for NftId;
58
24
  string public constant EMPTY_URI = "";
59
25
 
60
- mapping(NftId nftId => RegistryInfo info) private _info;
61
- mapping(NftId nftId => address owner) private _owner;
62
- mapping(address object => NftId nftId) private _nftIdByAddress;
63
-
64
- IChainNft private _chainNft;
65
-
66
- function initialize(address chainNft) external {
67
- require(
68
- address(_chainNft) == address(0),
69
- "ERROR:REG-001:ALREADY_INITIALIZED"
70
- );
71
- _chainNft = IChainNft(chainNft);
72
- }
73
-
74
- function TOKEN() public pure override returns (uint256) {
75
- return 30;
76
- }
26
+ // IMPORTANT Every new version with storage changes must implement its own struct
27
+ // copy paste previous version and add changes
28
+ // @custom:storage-location erc7201:gif-next.contracts.registry.Registry.sol
29
+ struct StorageV1 {
77
30
 
78
- function INSTANCE() public pure override returns (uint256) {
79
- return 40;
80
- }
31
+ mapping(NftId nftId => ObjectInfo info) _info;
32
+ mapping(address object => NftId nftId) _nftIdByAddress;
33
+ mapping(ObjectType objectType => bool) _isValidType;
34
+ mapping(ObjectType objectType => mapping(ObjectType objectParentType => bool)) _isValidParentType;
81
35
 
82
- function PRODUCT() public pure override returns (uint256) {
83
- return 50;
84
- }
36
+ mapping(NftId nftId => string stringValue) _string;
37
+ mapping(bytes32 serviceNameHash => mapping(VersionPart majorVersion => address service)) _service;
85
38
 
86
- function ORACLE() public pure override returns (uint256) {
87
- return 60;
88
- }
39
+ NftId _nftId;
40
+ IChainNft _chainNft;
41
+ ChainNft _chainNftInternal;
42
+ address _initialOwner;
89
43
 
90
- function POOL() public pure override returns (uint256) {
91
- return 70;
44
+ /// @dev will own protocol nft and registry nft(s) minted during initialize
45
+ address _protocolOwner;
46
+ // if struct goes here
47
+ // then you cannot add new vars here
92
48
  }
93
49
 
94
- function POLICY() public pure override returns (uint256) {
95
- return 80;
50
+ // TODO do not use gif-next in namespace id
51
+ // TODO ask openzeppelin about public location
52
+ // keccak256(abi.encode(uint256(keccak256("gif-next.contracts.registry.Registry.sol")) - 1)) & ~bytes32(uint256(0xff));
53
+ bytes32 public constant LOCATION_V1 = 0x6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa300;
54
+
55
+ // TODO check how usage of "$.data" influences gas costs
56
+ // IMPORTANT Every new version must implement this function
57
+ // keep it private -> if unreachable from the next version then not included in its byte code
58
+ // each version MUST use the same locationV1, just change return type
59
+ function _getStorage() private pure returns (StorageV1 storage $) {
60
+ assembly {
61
+ $.slot := LOCATION_V1
62
+ }
96
63
  }
97
64
 
98
- function BUNDLE() public pure override returns (uint256) {
99
- return 90;
65
+ /// @dev the protocol owner will get ownership of the
66
+ // protocol nft and the global registry nft minted in this
67
+ // initializer function
68
+ function _initialize(bytes memory data)
69
+ internal
70
+ onlyInitializing
71
+ virtual override
72
+ {
73
+ address protocolOwner = abi.decode(data, (address));
74
+ StorageV1 storage $ = _getStorage();
75
+
76
+ // TODO here delegate call from proxy constructor, msg.sender is proxy deployer -> Proxy.sol
77
+ $._initialOwner = msg.sender;
78
+ $._protocolOwner = protocolOwner;
79
+
80
+ // TODO deployment size is to big, call another contract which keeps and deploys ChainNft byte code
81
+ // deploy NFT
82
+ $._chainNftInternal = new ChainNft(address(this));// adds 10kb to deployment size
83
+ $._chainNft = IChainNft($._chainNftInternal);
84
+
85
+ // initial registry setup
86
+ _registerProtocol();
87
+ $._nftId = _registerRegistry();
88
+
89
+ // setup rules for further registrations
90
+ _setupValidTypes();
91
+ _setupValidParentTypes();
100
92
  }
101
93
 
102
94
  function register(
103
95
  address objectAddress
104
- ) external override returns (NftId nftId) {
96
+ )
97
+ // TODO add authz (only services may register components etc)
98
+ // we have to check how we do authz for registring services (just restrict to protocol owner/registry owner)
99
+ external override returns (NftId nftId) {
100
+ StorageV1 storage $ = _getStorage();
101
+
105
102
  require(
106
- _nftIdByAddress[objectAddress].eqz(),
103
+ $._nftIdByAddress[objectAddress].eqz(),
107
104
  "ERROR:REG-002:ALREADY_REGISTERED"
108
105
  );
109
106
 
110
107
  IRegisterable registerable = IRegisterable(objectAddress);
111
108
  require(
112
- registerable.isRegisterable(),
109
+ registerable.supportsInterface(type(IRegisterable).interfaceId),
113
110
  "ERROR:REG-003:NOT_REGISTERABLE"
114
111
  );
115
112
 
116
- // check parent exists (for objects not instances)
117
- if (registerable.getType() != INSTANCE()) {
118
- RegistryInfo memory parentInfo = _info[
119
- registerable.getParentNftId()
120
- ];
121
- require(parentInfo.nftId.gtz(), "ERROR:REG-004:PARENT_NOT_FOUND");
122
- // check validity of parent relation, valid relations are
123
- // policy -> product, bundle -> pool, product -> instance, pool -> instance
124
- }
113
+ ObjectType objectType = registerable.getType();
114
+ require(
115
+ $._isValidType[objectType],
116
+ "ERROR:REG-004:TYPE_INVALID"
117
+ );
125
118
 
126
- uint256 mintedTokenId = _chainNft.mint(
127
- registerable.getInitialOwner(),
128
- EMPTY_URI
119
+ NftId parentNftId = registerable.getParentNftId();
120
+ require(
121
+ isRegistered(parentNftId),
122
+ "ERROR:REG-005:PARENT_NOT_REGISTERED"
129
123
  );
130
- nftId = toNftId(mintedTokenId);
131
124
 
132
- RegistryInfo memory info = RegistryInfo(
133
- nftId,
134
- registerable.getParentNftId(),
135
- registerable.getType(),
136
- objectAddress,
137
- registerable.getInitialOwner()
125
+ require(
126
+ $._isValidParentType[objectType][$._info[parentNftId].objectType],
127
+ "ERROR:REG-006:PARENT_TYPE_INVALID"
138
128
  );
139
129
 
140
- _info[nftId] = info;
141
- _nftIdByAddress[objectAddress] = nftId;
130
+ // also check that nftId and parentNFtId are on the same chain if applicable
142
131
 
143
- // add logging
132
+ // nft minting
133
+ uint256 mintedTokenId = $._chainNft.mint(
134
+ registerable.getOwner(),
135
+ EMPTY_URI
136
+ );
137
+
138
+ nftId = toNftId(mintedTokenId);
139
+
140
+ // special case services
141
+ if(registerable.getType() == SERVICE()) {
142
+ IService service = IService(objectAddress);
143
+ require(
144
+ service.supportsInterface(type(IService).interfaceId),
145
+ "ERROR:REG-007:NOT_SERVICE"
146
+ );
147
+
148
+ string memory serviceName = service.getName();
149
+ VersionPart majorVersion = service.getMajorVersion();
150
+ bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
151
+
152
+ // service specific state
153
+ $._string[nftId] = serviceName;
154
+
155
+ require(
156
+ $._service[serviceNameHash][majorVersion] == address(0),
157
+ "ERROR:REG-008:ALREADY_REGISTERED"
158
+ );
159
+ $._service[serviceNameHash][majorVersion] = objectAddress;
160
+ }
161
+
162
+ // create object info and link nft id with it
163
+ _registerObjectInfo(registerable, nftId);
144
164
  }
145
165
 
166
+
146
167
  function registerObjectForInstance(
147
168
  NftId parentNftId,
148
- uint256 objectType,
149
- address initialOwner
169
+ ObjectType objectType,
170
+ address initialOwner,
171
+ bytes memory data
150
172
  )
151
173
  external
152
174
  override
@@ -155,55 +177,282 @@ contract Registry is IRegistry {
155
177
  NftId nftId
156
178
  )
157
179
  {
180
+ StorageV1 storage $ = _getStorage();
181
+
158
182
  // TODO add more validation
159
183
  require(
160
184
  objectType == POLICY() || objectType == BUNDLE(),
161
- "ERROR:REG-005:TYPE_INVALID"
185
+ "ERROR:REG-010:TYPE_INVALID"
162
186
  );
163
187
 
164
- uint256 mintedTokenId = _chainNft.mint(initialOwner, EMPTY_URI);
188
+ uint256 mintedTokenId = $._chainNft.mint(initialOwner, EMPTY_URI);
165
189
  nftId = toNftId(mintedTokenId);
166
190
 
167
- RegistryInfo memory info = RegistryInfo(
191
+ ObjectInfo memory info = ObjectInfo(
168
192
  nftId,
169
193
  parentNftId,
170
194
  objectType,
171
195
  address(0),
172
- initialOwner
196
+ initialOwner,
197
+ data
173
198
  );
174
199
 
175
- _info[nftId] = info;
200
+ $._info[nftId] = info;
176
201
 
177
202
  // add logging
178
203
  }
179
204
 
180
205
  function getObjectCount() external view override returns (uint256) {
181
- return _chainNft.totalSupply();
206
+ return _getStorage()._chainNft.totalSupply();
182
207
  }
183
208
 
184
209
  function getNftId(
185
210
  address object
186
211
  ) external view override returns (NftId id) {
187
- return _nftIdByAddress[object];
212
+ return _getStorage()._nftIdByAddress[object];
213
+ }
214
+
215
+ function isRegistered(
216
+ NftId nftId
217
+ ) public view override returns (bool) {
218
+ return _getStorage()._info[nftId].objectType.gtz();
188
219
  }
189
220
 
190
221
  function isRegistered(
191
222
  address object
192
223
  ) external view override returns (bool) {
193
- return _nftIdByAddress[object].gtz();
224
+ return _getStorage()._nftIdByAddress[object].gtz();
194
225
  }
195
226
 
196
- function getInfo(
227
+ function getObjectInfo(
197
228
  NftId nftId
198
- ) external view override returns (RegistryInfo memory info) {
199
- return _info[nftId];
229
+ ) external view override returns (ObjectInfo memory info) {
230
+ return _getStorage()._info[nftId];
231
+ }
232
+
233
+ function getName(
234
+ NftId nftId
235
+ ) external view returns (string memory name) {
236
+ return _getStorage()._string[nftId];
200
237
  }
201
238
 
202
239
  function getOwner(NftId nftId) external view override returns (address) {
203
- return _chainNft.ownerOf(nftId.toInt());
240
+ return _getStorage()._chainNft.ownerOf(nftId.toInt());
241
+ }
242
+
243
+ function getChainNft() external view override returns (IChainNft) {
244
+ return _getStorage()._chainNft;
245
+ }
246
+
247
+ // special case to retrive a gif service
248
+ function getServiceAddress(string memory serviceName, VersionPart majorVersion) external view override returns (address serviceAddress) {
249
+ bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
250
+ return _getStorage()._service[serviceNameHash][majorVersion];
251
+ }
252
+
253
+ // from IERC165
254
+ function supportsInterface(bytes4 interfaceId) external pure override returns (bool) {
255
+ return interfaceId == type(IRegistry).interfaceId;
256
+ }
257
+
258
+ // from IRegistryLinked
259
+ function getRegistry() external view override returns (IRegistry registry) {
260
+ return this;
261
+ }
262
+
263
+ // from IVersionable
264
+ function getVersion() public pure virtual override returns (Version) {
265
+ return VersionLib.toVersion(1, 0, 0);
266
+ }
267
+
268
+ // from IRegisterable
269
+ // TODO
270
+ // 1) Registerable can not register itself -> otherwise register have to trust owner address provided by registerable
271
+ // registerable owner MUST call register and provide registerable address
272
+ // 2) Who is msg.sender here???
273
+ function register() external pure override returns (NftId nftId) {
274
+ return zeroNftId();
275
+ }
276
+
277
+ function getType() external pure override returns (ObjectType objectType) {
278
+ return REGISTRY();
279
+ }
280
+
281
+ function getOwner() public view override returns (address owner) {
282
+ StorageV1 storage $ = _getStorage();
283
+ return $._nftId.gtz() ? this.getOwner($._nftId) : $._initialOwner;
284
+ }
285
+
286
+ function getNftId() public view override (IRegisterable, IRegistry) returns (NftId nftId) {
287
+ return _getStorage()._nftId;
288
+ }
289
+
290
+ function getParentNftId() public view returns (NftId nftId) {
291
+ StorageV1 storage $ = _getStorage();
292
+ nftId = $._info[$._nftId].parentNftId;
293
+ }
294
+
295
+ function getData() public pure returns (bytes memory data) {
296
+ return "";
297
+ }
298
+
299
+ // registry specific functions
300
+ function getProtocolOwner() external view override returns (address) {
301
+ return _getStorage()._protocolOwner;
302
+ }
303
+
304
+ /// @dev defines which types are allowed to register
305
+ function _setupValidTypes() internal onlyInitializing {
306
+ StorageV1 storage $ = _getStorage();
307
+ $._isValidType[REGISTRY()] = true; // only for global registry
308
+ $._isValidType[TOKEN()] = true;
309
+ $._isValidType[SERVICE()] = true;
310
+ $._isValidType[INSTANCE()] = true;
311
+ $._isValidType[STAKE()] = true;
312
+ $._isValidType[PRODUCT()] = true;
313
+ $._isValidType[ORACLE()] = true;
314
+ $._isValidType[POOL()] = true;
315
+ $._isValidType[DISTRIBUTION()] = true;
316
+ $._isValidType[POLICY()] = true;
317
+ $._isValidType[BUNDLE()] = true;
318
+ }
319
+
320
+ /// @dev defines which types - parent type relations are allowed to register
321
+ function _setupValidParentTypes() internal onlyInitializing {
322
+ StorageV1 storage $ = _getStorage();
323
+ // registry as parent
324
+ $._isValidParentType[TOKEN()][REGISTRY()] = true;
325
+ $._isValidParentType[SERVICE()][REGISTRY()] = true;
326
+ $._isValidParentType[INSTANCE()][REGISTRY()] = true;
327
+
328
+ // instance as parent
329
+ $._isValidParentType[PRODUCT()][INSTANCE()] = true;
330
+ $._isValidParentType[DISTRIBUTION()][INSTANCE()] = true;
331
+ $._isValidParentType[ORACLE()][INSTANCE()] = true;
332
+ $._isValidParentType[POOL()][INSTANCE()] = true;
333
+
334
+ // product as parent
335
+ $._isValidParentType[POLICY()][PRODUCT()] = true;
336
+
337
+ // pool as parent
338
+ $._isValidParentType[BUNDLE()][POOL()] = true;
339
+ $._isValidParentType[STAKE()][POOL()] = true;
204
340
  }
205
341
 
206
- function getNftAddress() external view override returns (address nft) {
207
- return address(_chainNft);
342
+ /// @dev protocol registration used to anchor the dip ecosystem relations
343
+ function _registerProtocol()
344
+ virtual
345
+ internal
346
+ onlyInitializing
347
+ {
348
+ StorageV1 storage $ = _getStorage();
349
+
350
+ uint256 protocolId = $._chainNftInternal.PROTOCOL_NFT_ID();
351
+ $._chainNftInternal.mint($._protocolOwner, protocolId);
352
+
353
+ NftId protocolNftid = toNftId(protocolId);
354
+ ObjectInfo memory protocolInfo = ObjectInfo(
355
+ protocolNftid,
356
+ zeroNftId(), // parent nft id
357
+ PROTOCOL(),
358
+ address(0), // contract address
359
+ $._protocolOwner,
360
+ "" // data
361
+ );
362
+
363
+ $._info[protocolNftid] = protocolInfo;
208
364
  }
209
- }
365
+
366
+ /// @dev registry registration
367
+ /// might also register the global registry when not on mainnet
368
+ function _registerRegistry()
369
+ virtual
370
+ internal
371
+ onlyInitializing
372
+ returns (NftId registryNftId)
373
+ {
374
+ StorageV1 storage $ = _getStorage();
375
+
376
+ uint256 registryId = $._chainNftInternal.calculateTokenId(2);
377
+ registryNftId = toNftId(registryId);
378
+
379
+ // we're not the global registry
380
+ if(registryId != $._chainNftInternal.GLOBAL_REGISTRY_ID()) {
381
+ _registerGlobalRegistry();
382
+ }
383
+
384
+ $._chainNftInternal.mint($._protocolOwner, registryId);
385
+
386
+ NftId parentNftId;
387
+ // we're the global registry
388
+ if(block.chainid == 1) {
389
+ parentNftId = toNftId($._chainNftInternal.PROTOCOL_NFT_ID());
390
+ }
391
+ else {
392
+ parentNftId = toNftId($._chainNftInternal.GLOBAL_REGISTRY_ID());
393
+ }
394
+ ObjectInfo memory registryInfo = ObjectInfo(
395
+ registryNftId,
396
+ parentNftId,
397
+ REGISTRY(),
398
+ address(this), // proxy address
399
+ $._protocolOwner, // registry owner is different from proxy owner
400
+ ""
401
+ );
402
+
403
+ $._info[registryNftId] = registryInfo;
404
+ $._nftIdByAddress[address(this)] = registryNftId;
405
+
406
+ // add logging
407
+ }
408
+
409
+
410
+ /// @dev global registry registration for non mainnet registries
411
+ function _registerGlobalRegistry()
412
+ virtual
413
+ internal
414
+ onlyInitializing
415
+ {
416
+ StorageV1 storage $ = _getStorage();
417
+
418
+ uint256 globalRegistryId = $._chainNftInternal.GLOBAL_REGISTRY_ID();
419
+ $._chainNftInternal.mint($._protocolOwner, globalRegistryId);
420
+
421
+ NftId globalRegistryNftId = toNftId(globalRegistryId);
422
+ ObjectInfo memory globalRegistryInfo = ObjectInfo(
423
+ globalRegistryNftId,
424
+ toNftId($._chainNftInternal.PROTOCOL_NFT_ID()),
425
+ REGISTRY(),
426
+ address(0), // contract address
427
+ $._protocolOwner,
428
+ "" // data
429
+ );
430
+
431
+ $._info[globalRegistryNftId] = globalRegistryInfo;
432
+ }
433
+
434
+ function _registerObjectInfo(
435
+ IRegisterable registerable,
436
+ NftId nftId
437
+ )
438
+ internal
439
+ virtual
440
+ {
441
+ address objectAddress = address(registerable);
442
+ ObjectInfo memory info = ObjectInfo(
443
+ nftId,
444
+ registerable.getParentNftId(),
445
+ registerable.getType(),
446
+ objectAddress,
447
+ registerable.getOwner(),
448
+ registerable.getData()
449
+ );
450
+
451
+ StorageV1 storage $ = _getStorage();
452
+ $._info[nftId] = info;
453
+ $._nftIdByAddress[objectAddress] = nftId;
454
+
455
+ // add logging
456
+ }
457
+
458
+ }
@@ -0,0 +1,21 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ contract ERC165 is IERC165 {
7
+ mapping(bytes4 => bool) private _isSupported;
8
+
9
+ constructor() {
10
+ // register support for ERC165
11
+ _registerInterface(type(IERC165).interfaceId);
12
+ }
13
+
14
+ function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
15
+ return _isSupported[interfaceId];
16
+ }
17
+
18
+ function _registerInterface(bytes4 interfaceId) internal {
19
+ _isSupported[interfaceId] = true;
20
+ }
21
+ }
@@ -0,0 +1,6 @@
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
+ }
@@ -0,0 +1,24 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ import {IRegistry} from "../registry/IRegistry.sol";
7
+ import {NftId} from "../types/NftId.sol";
8
+ import {ObjectType} from "../types/ObjectType.sol";
9
+
10
+ import {IOwnable} from "./IOwnable.sol";
11
+
12
+ interface IRegisterable is IERC165, IOwnable {
13
+ function getRegistry() external view returns (IRegistry registry);
14
+
15
+ function register() external returns (NftId nftId);
16
+
17
+ function getType() external pure returns (ObjectType objectType);
18
+
19
+ function getNftId() external view returns (NftId nftId);
20
+
21
+ function getParentNftId() external view returns (NftId nftId);
22
+
23
+ function getData() external view returns (bytes memory data);
24
+ }