@etherisc/gif-next 0.0.2-ed4dd55 → 0.0.2-efef0ea-320

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