@etherisc/gif-next 0.0.2-9a053fa-993 → 0.0.2-9b434da-265

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 (339) hide show
  1. package/README.md +84 -6
  2. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +115 -48
  4. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  5. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
  6. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  7. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  8. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  9. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  10. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  11. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  12. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  13. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  14. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  15. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  16. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  20. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  24. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  26. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  28. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  30. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
  31. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
  32. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
  33. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1119 -0
  34. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  35. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  36. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  37. package/artifacts/contracts/instance/Instance.sol/Instance.json +2356 -1124
  38. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
  40. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +117 -0
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  43. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +506 -0
  44. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  45. package/artifacts/contracts/instance/{module/lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  46. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
  47. package/artifacts/contracts/instance/{service/IPoolService.sol/IPoolService.json → base/IService.sol/IService.json} +171 -126
  48. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  49. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +736 -0
  50. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  51. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  52. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{service/IProductService.sol/IProductService.json → base/ServiceBase.sol/ServiceBase.json} +189 -198
  54. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  55. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  56. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  57. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  58. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  59. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  60. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  61. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  62. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  63. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IRisk.sol/IRisk.json} +2 -2
  64. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  65. package/artifacts/contracts/instance/module/{pool/IPoolModule.sol/IPool.json → ISetup.sol/ISetup.json} +2 -2
  66. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  67. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  68. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  69. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +141 -12
  70. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  71. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +5 -0
  72. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  73. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +298 -39
  74. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  75. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +745 -0
  76. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  77. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  78. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  79. package/artifacts/contracts/registry/Registry.sol/Registry.json +489 -120
  80. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  81. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1013 -0
  82. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  83. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +476 -0
  84. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  85. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  86. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  87. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  88. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  89. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  90. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  91. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  92. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  93. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +60 -19
  94. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  95. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  96. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  97. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  98. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  99. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  100. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  101. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  102. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  103. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  104. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  105. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +83 -19
  106. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  107. package/artifacts/contracts/test/TestFee.sol/TestFee.json +28 -4
  108. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  109. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  110. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  111. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +3 -75
  112. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  113. package/artifacts/contracts/test/TestService.sol/TestService.json +277 -84
  114. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  115. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +2 -2
  116. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  117. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +14 -18
  118. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  119. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +106 -50
  120. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  121. package/artifacts/contracts/test/Usdc.sol/USDC.json +338 -0
  122. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  123. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +2 -2
  124. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  125. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  126. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  127. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  128. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  129. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  130. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  131. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  132. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  133. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  134. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  135. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  136. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  137. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  138. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  139. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  140. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  141. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  142. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  143. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  144. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  145. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  146. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  147. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  148. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  149. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  150. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  151. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  152. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  153. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +34 -8
  154. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  155. package/artifacts/contracts/types/Version.sol/VersionLib.json +101 -2
  156. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  157. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  158. package/contracts/components/IBaseComponent.sol +4 -4
  159. package/contracts/instance/AccessManagedSimple.sol +114 -0
  160. package/contracts/instance/AccessManagerSimple.sol +682 -0
  161. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  162. package/contracts/instance/Instance.sol +376 -48
  163. package/contracts/instance/InstanceAccessManager.sol +288 -0
  164. package/contracts/instance/InstanceService.sol +45 -0
  165. package/contracts/instance/base/IKeyValueStore.sol +48 -0
  166. package/contracts/instance/base/ILifecycle.sol +30 -0
  167. package/contracts/instance/base/KeyValueStore.sol +188 -0
  168. package/contracts/instance/{module/lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +51 -40
  169. package/contracts/instance/base/ServiceBase.sol +44 -0
  170. package/contracts/instance/module/IAccess.sol +38 -0
  171. package/contracts/instance/module/IBundle.sol +19 -0
  172. package/contracts/instance/module/IDistribution.sol +39 -0
  173. package/contracts/instance/module/IPolicy.sol +45 -0
  174. package/contracts/instance/module/IRisk.sol +11 -0
  175. package/contracts/instance/module/ISetup.sol +41 -0
  176. package/contracts/instance/module/ITreasury.sol +23 -0
  177. package/contracts/registry/ChainNft.sol +43 -15
  178. package/contracts/registry/IChainNft.sol +3 -2
  179. package/contracts/registry/IRegistry.sol +42 -26
  180. package/contracts/registry/IRegistryService.sol +29 -0
  181. package/contracts/registry/ITransferInterceptor.sol +6 -0
  182. package/contracts/registry/Registry.sol +385 -275
  183. package/contracts/registry/RegistryService.sol +369 -0
  184. package/contracts/registry/RegistryServiceManager.sol +43 -0
  185. package/contracts/shared/ContractDeployerLib.sol +72 -0
  186. package/contracts/shared/ERC165.sol +1 -1
  187. package/contracts/shared/INftOwnable.sol +22 -0
  188. package/contracts/shared/IRegisterable.sol +9 -16
  189. package/contracts/shared/IVersionable.sol +56 -12
  190. package/contracts/shared/NftOwnable.sol +136 -0
  191. package/contracts/shared/ProxyManager.sol +94 -0
  192. package/contracts/shared/Registerable.sol +62 -59
  193. package/contracts/shared/TokenHandler.sol +27 -0
  194. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  195. package/contracts/shared/Versionable.sol +112 -57
  196. package/contracts/test/TestFee.sol +3 -3
  197. package/contracts/test/TestRegisterable.sol +5 -6
  198. package/contracts/test/TestRoleId.sol +6 -6
  199. package/contracts/test/TestService.sol +7 -16
  200. package/contracts/test/TestVersion.sol +4 -7
  201. package/contracts/test/TestVersionable.sol +2 -5
  202. package/contracts/test/Usdc.sol +26 -0
  203. package/contracts/types/DistributorType.sol +55 -0
  204. package/contracts/types/Fee.sol +44 -20
  205. package/contracts/types/Key32.sol +50 -0
  206. package/contracts/types/NftId.sol +16 -1
  207. package/contracts/types/NumberId.sol +52 -0
  208. package/contracts/types/ObjectType.sol +51 -14
  209. package/contracts/types/Referral.sol +85 -0
  210. package/contracts/types/RiskId.sol +43 -0
  211. package/contracts/types/RoleId.sol +51 -12
  212. package/contracts/types/StateId.sol +8 -2
  213. package/contracts/types/Timestamp.sol +7 -3
  214. package/contracts/types/UFixed.sol +19 -16
  215. package/contracts/types/Version.sol +38 -25
  216. package/package.json +5 -2
  217. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  218. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -174
  219. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  220. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -356
  221. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  222. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -279
  223. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  224. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -387
  225. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  226. package/artifacts/contracts/components/Product.sol/Product.json +0 -305
  227. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +0 -4
  228. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +0 -2022
  229. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  230. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  231. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +0 -4
  232. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +0 -50
  233. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  234. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -313
  235. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  236. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  237. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  238. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  239. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  240. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  241. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -276
  242. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  243. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  244. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -276
  245. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  246. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  247. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  248. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  249. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  250. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  251. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  252. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  253. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  254. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  255. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  256. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  257. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  258. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
  259. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  260. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
  261. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  262. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  263. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
  264. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  265. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
  266. package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.dbg.json +0 -4
  267. package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.json +0 -10
  268. package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.dbg.json +0 -4
  269. package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.json +0 -10
  270. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  271. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  272. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -538
  273. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  274. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  275. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  276. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -538
  277. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  278. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -519
  279. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  280. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.json +0 -300
  281. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  282. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +0 -364
  283. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  284. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  285. package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +0 -4
  286. package/artifacts/contracts/instance/service/IService.sol/IService.json +0 -300
  287. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  288. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -499
  289. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  290. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -685
  291. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  292. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.json +0 -300
  293. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  294. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  295. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  296. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  297. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  298. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  299. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  300. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  301. package/contracts/components/BaseComponent.sol +0 -89
  302. package/contracts/components/IPoolComponent.sol +0 -57
  303. package/contracts/components/IProductComponent.sol +0 -19
  304. package/contracts/components/Pool.sol +0 -174
  305. package/contracts/components/Product.sol +0 -117
  306. package/contracts/experiment/statemachine/README.md +0 -112
  307. package/contracts/instance/IInstance.sol +0 -50
  308. package/contracts/instance/IInstanceLinked.sol +0 -8
  309. package/contracts/instance/IServiceLinked.sol +0 -12
  310. package/contracts/instance/InstanceBase.sol +0 -74
  311. package/contracts/instance/module/access/Access.sol +0 -149
  312. package/contracts/instance/module/access/IAccess.sol +0 -53
  313. package/contracts/instance/module/bundle/BundleModule.sol +0 -228
  314. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  315. package/contracts/instance/module/component/ComponentModule.sol +0 -104
  316. package/contracts/instance/module/component/IComponent.sol +0 -53
  317. package/contracts/instance/module/lifecycle/ILifecycle.sol +0 -47
  318. package/contracts/instance/module/policy/IPolicy.sol +0 -60
  319. package/contracts/instance/module/policy/PolicyModule.sol +0 -84
  320. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  321. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  322. package/contracts/instance/module/product/IProductModule.sol +0 -6
  323. package/contracts/instance/module/product/ProductModule.sol +0 -8
  324. package/contracts/instance/module/treasury/ITreasury.sol +0 -104
  325. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  326. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -148
  327. package/contracts/instance/service/ComponentOwnerService.sol +0 -174
  328. package/contracts/instance/service/ComponentServiceBase.sol +0 -41
  329. package/contracts/instance/service/IComponentOwnerService.sol +0 -22
  330. package/contracts/instance/service/IPoolService.sol +0 -30
  331. package/contracts/instance/service/IProductService.sol +0 -58
  332. package/contracts/instance/service/PoolService.sol +0 -98
  333. package/contracts/instance/service/ProductService.sol +0 -358
  334. package/contracts/instance/service/ServiceBase.sol +0 -39
  335. package/contracts/registry/IRegistryLinked.sol +0 -8
  336. package/contracts/shared/IOwnable.sol +0 -6
  337. package/contracts/test/TestPool.sol +0 -22
  338. package/contracts/test/TestProduct.sol +0 -44
  339. /package/contracts/instance/{service → base}/IService.sol +0 -0
@@ -0,0 +1,136 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {INftOwnable} from "./INftOwnable.sol";
5
+ import {IRegistry} from "../registry/IRegistry.sol";
6
+ import {NftId, zeroNftId} from "../types/NftId.sol";
7
+
8
+ contract NftOwnable is INftOwnable {
9
+
10
+ IRegistry internal _registry;
11
+ NftId private _nftId;
12
+ address private _initialOwner;
13
+
14
+ /// @dev enforces msg.sender is owner of nft (or initial owner of nft ownable)
15
+ modifier onlyOwner() {
16
+ address owner = getOwner();
17
+
18
+ // owner == address(0) is eg uninitialized upgradable contract
19
+ if (owner != address(0) && msg.sender != owner) {
20
+ revert ErrorNotOwner(msg.sender);
21
+ }
22
+ _;
23
+ }
24
+
25
+ constructor() {
26
+ _initialOwner = msg.sender;
27
+ }
28
+
29
+ /// @dev links this contract to nft after registration
30
+ // needs to be done once per registered contract and
31
+ // reduces registry calls to check ownership
32
+ // does not need any protection as function can only do the "right thing"
33
+ function linkToRegisteredNftId() public {
34
+ if (_nftId.gtz()) {
35
+ revert ErrorAlreadyLinked(address(_registry), _nftId);
36
+ }
37
+
38
+ if (address(_registry) == address(0)) {
39
+ revert ErrorRegistryNotInitialized();
40
+ }
41
+
42
+ address contractAddress = address(this);
43
+
44
+ if (!_registry.isRegistered(contractAddress)) {
45
+ revert ErrorContractNotRegistered(contractAddress);
46
+ }
47
+
48
+ _nftId = _registry.getNftId(contractAddress);
49
+ }
50
+
51
+
52
+ function getRegistry() public view virtual override returns (IRegistry) {
53
+ return _registry;
54
+ }
55
+
56
+
57
+ function getNftId() public view virtual override returns (NftId) {
58
+ return _nftId;
59
+ }
60
+
61
+
62
+ function getOwner() public view virtual override returns (address) {
63
+ if (_nftId.gtz()) {
64
+ return _registry.ownerOf(_nftId);
65
+ }
66
+
67
+ return _initialOwner;
68
+ }
69
+
70
+
71
+ /// @dev initialization for upgradable contracts
72
+ // used in _initializeRegisterable
73
+ function _initializeNftOwnable(
74
+ address initialOwner,
75
+ address registryAddress
76
+ )
77
+ internal
78
+ virtual
79
+ {
80
+ _initialOwner = initialOwner;
81
+ _setRegistry(registryAddress);
82
+ }
83
+
84
+
85
+ /// @dev used in constructor of registry service manager
86
+ // links ownership of registry service manager ot nft owner of registry service
87
+ function _linkToNftOwnable(
88
+ address registryAddress,
89
+ address nftOwnableAddress
90
+ )
91
+ internal
92
+ onlyOwner()
93
+ returns (NftId)
94
+ {
95
+ if (_nftId.gtz()) {
96
+ revert ErrorAlreadyLinked(address(_registry), _nftId);
97
+ }
98
+
99
+ _setRegistry(registryAddress);
100
+
101
+ if (!_registry.isRegistered(nftOwnableAddress)) {
102
+ revert ErrorContractNotRegistered(nftOwnableAddress);
103
+ }
104
+
105
+ _nftId = _registry.getNftId(nftOwnableAddress);
106
+
107
+ return _nftId;
108
+ }
109
+
110
+
111
+ function _setRegistry(address registryAddress)
112
+ private
113
+ {
114
+ if (address(_registry) != address(0)) {
115
+ revert ErrorRegistryAlreadyInitialized(address(_registry));
116
+ }
117
+
118
+ if (registryAddress == address(0)) {
119
+ revert ErrorRegistryAddressZero();
120
+ }
121
+
122
+ if (registryAddress.code.length == 0) {
123
+ revert ErrorNotRegistry(registryAddress);
124
+ }
125
+
126
+ _registry = IRegistry(registryAddress);
127
+
128
+ try _registry.supportsInterface(type(IRegistry).interfaceId) returns (bool isRegistry) {
129
+ if (!isRegistry) {
130
+ revert ErrorNotRegistry(registryAddress);
131
+ }
132
+ } catch {
133
+ revert ErrorNotRegistry(registryAddress);
134
+ }
135
+ }
136
+ }
@@ -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 {ITransparentUpgradeableProxy} from "@openzeppelin5/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
7
+
8
+ import {IVersionable} from "./IVersionable.sol";
9
+ import {NftOwnable} from "./NftOwnable.sol";
10
+ import {UpgradableProxyWithAdmin} from "./UpgradableProxyWithAdmin.sol";
11
+
12
+ /// @dev manages proxy deployments for upgradable contracs of type IVersionable
13
+ contract ProxyManager is
14
+ NftOwnable
15
+ {
16
+
17
+ event LogProxyDeployed(address indexed proxy, address initialImplementation);
18
+ event LogProxyDeployedWithSalt(address indexed proxy, address initialImplementation);
19
+ event LogProxyUpgraded(address indexed proxy, address upgradedImplementation);
20
+
21
+ error ErrorAlreadyDeployed();
22
+ error ErrorAlreadyDeployedWithSalt();
23
+ error ErrorNotYetDeployed();
24
+
25
+ UpgradableProxyWithAdmin internal _proxy;
26
+ bool internal _isDeployed;
27
+
28
+ /// @dev only used to capture proxy owner
29
+ constructor()
30
+ NftOwnable()
31
+ { }
32
+
33
+ /// @dev deploy initial contract
34
+ function deploy(address initialImplementation, bytes memory initializationData)
35
+ public
36
+ virtual
37
+ onlyOwner()
38
+ returns (IVersionable versionable)
39
+ {
40
+ if (_isDeployed) { revert ErrorAlreadyDeployed(); }
41
+
42
+ address currentProxyOwner = getOwner(); // used by implementation
43
+ address initialProxyAdminOwner = address(this); // used by proxy
44
+ bytes memory data = getDeployData(initialImplementation, currentProxyOwner, initializationData);
45
+
46
+ _proxy = new UpgradableProxyWithAdmin(
47
+ initialImplementation,
48
+ initialProxyAdminOwner,
49
+ data
50
+ );
51
+
52
+ _isDeployed = true;
53
+ versionable = IVersionable(address(_proxy));
54
+
55
+ emit LogProxyDeployed(address(_proxy), initialImplementation);
56
+ }
57
+
58
+ /// @dev upgrade existing contract
59
+ function upgrade(address newImplementation, bytes memory upgradeData)
60
+ public
61
+ virtual
62
+ onlyOwner()
63
+ returns (IVersionable versionable)
64
+ {
65
+ if (!_isDeployed) { revert ErrorNotYetDeployed(); }
66
+
67
+ address currentProxyOwner = getOwner();
68
+ ProxyAdmin proxyAdmin = getProxy().getProxyAdmin();
69
+ ITransparentUpgradeableProxy proxy = ITransparentUpgradeableProxy(address(_proxy));
70
+ bytes memory data = getUpgradeData(newImplementation, currentProxyOwner, upgradeData);
71
+
72
+ proxyAdmin.upgradeAndCall(
73
+ proxy,
74
+ newImplementation,
75
+ data);
76
+
77
+ versionable = IVersionable(address(_proxy));
78
+
79
+ emit LogProxyUpgraded(address(_proxy), newImplementation);
80
+
81
+ }
82
+
83
+ function getDeployData(address implementation, address proxyOwner, bytes memory deployData) public pure returns (bytes memory data) {
84
+ return abi.encodeWithSelector(IVersionable.initialize.selector, implementation, proxyOwner, deployData);
85
+ }
86
+
87
+ function getUpgradeData(address implementation, address proxyOwner, bytes memory upgradeData) public pure returns (bytes memory data) {
88
+ return abi.encodeWithSelector(IVersionable.upgrade.selector, implementation, proxyOwner, upgradeData);
89
+ }
90
+
91
+ function getProxy() public returns (UpgradableProxyWithAdmin) {
92
+ return _proxy;
93
+ }
94
+ }
@@ -1,86 +1,89 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Initializable} from "@openzeppelin5/contracts/proxy/utils/Initializable.sol";
3
5
 
4
6
  import {NftId, zeroNftId} from "../types/NftId.sol";
7
+ import {NftOwnable} from "../shared/NftOwnable.sol";
5
8
  import {ObjectType} from "../types/ObjectType.sol";
6
9
 
7
10
  import {IRegistry} from "../registry/IRegistry.sol";
8
11
  import {IRegisterable} from "./IRegisterable.sol";
12
+ import {Versionable} from "./Versionable.sol";
9
13
 
10
14
  import {ERC165} from "./ERC165.sol";
11
15
 
12
- abstract contract Registerable is
16
+ contract Registerable is
13
17
  ERC165,
18
+ Initializable,
19
+ NftOwnable,
14
20
  IRegisterable
15
21
  {
16
- IRegistry internal immutable _registry;
17
- NftId internal immutable _parentNftId;
18
- address internal immutable _initialOwner;
22
+ // keccak256(abi.encode(uint256(keccak256("gif-next.contracts.shared.Registerable.sol")) - 1)) & ~bytes32(uint256(0xff));
23
+ bytes32 public constant REGISTERABLE_LOCATION_V1 = 0x6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa300;
19
24
 
20
- modifier onlyOwner() virtual {
21
- require(
22
- msg.sender == getOwner(),
23
- "ERROR:RGB-001:NOT_OWNER"
24
- );
25
- _;
25
+ error ErrorRegisterableNotRegistry(address registryAddress);
26
+
27
+ struct RegisterableStorage {
28
+ NftId _parentNftId;
29
+ ObjectType _objectType;
30
+ bool _isInterceptor;
31
+ bytes _data;
32
+ }
33
+
34
+ function _getRegisterableStorage() private pure returns (RegisterableStorage storage $) {
35
+ assembly {
36
+ $.slot := REGISTERABLE_LOCATION_V1
37
+ }
26
38
  }
27
39
 
28
- constructor(
40
+ function _initializeRegisterable(
29
41
  address registryAddress,
30
- NftId parentNftId
42
+ NftId parentNftId,
43
+ ObjectType objectType,
44
+ bool isInterceptor,
45
+ address initialOwner,
46
+ bytes memory data
31
47
  )
32
- ERC165()
48
+ internal
49
+ //onlyInitializing//TODO uncomment when "fully" upgradeable
50
+ virtual
33
51
  {
34
- require(
35
- address(registryAddress) != address(0),
36
- "ERROR:RGB-010:REGISTRY_ZERO"
37
- );
38
-
39
- _registry = IRegistry(registryAddress);
40
- require(
41
- _registry.supportsInterface(type(IRegistry).interfaceId),
42
- "ERROR:RGB-011:NOT_REGISTRY"
43
- );
52
+ _initializeNftOwnable(
53
+ initialOwner,
54
+ registryAddress);
44
55
 
45
- _parentNftId = parentNftId;
46
- require(
47
- _registry.isRegistered(_parentNftId),
48
- "ERROR:RGB-012:PARENT_NOT_REGISTERED"
49
- );
56
+ // TODO check parentNftId -> registry.isRegistered(parentNftId)
57
+ // TODO check object-parent type pair -> registry.isValidTypeCombo() or something...verify with registry that setup will be able to register...
50
58
 
51
- _initialOwner = msg.sender;
59
+ RegisterableStorage storage $ = _getRegisterableStorage();
60
+ $._parentNftId = parentNftId;
61
+ $._objectType = objectType;
62
+ $._isInterceptor = isInterceptor;
63
+ $._data = data;
52
64
 
53
- // register support for IRegisterable
54
65
  _registerInterface(type(IRegisterable).interfaceId);
55
66
  }
56
67
 
57
- // from IRegistryLinked
58
- function register() public onlyOwner virtual override returns (NftId nftId) {
59
- return _registry.register(address(this));
60
- }
61
68
 
62
- function getRegistry() public view virtual override returns (IRegistry registry) {
63
- return _registry;
64
- }
65
-
66
- function getOwner() public view virtual override returns (address owner) {
67
- NftId nftId = _registry.getNftId(address(this));
68
- if(nftId == zeroNftId()) {
69
- return _initialOwner;
70
- }
71
-
72
- return _registry.getOwner(nftId);
73
- }
74
-
75
- function getNftId() public view override returns (NftId nftId) {
76
- return _registry.getNftId(address(this));
77
- }
78
-
79
- function getParentNftId() public view override returns (NftId nftId) {
80
- return _parentNftId;
81
- }
82
-
83
- function getData() public view virtual override returns (bytes memory data) {
84
- return "";
69
+ function getInitialInfo()
70
+ public
71
+ view
72
+ virtual
73
+ returns (IRegistry.ObjectInfo memory, bytes memory data)
74
+ {
75
+ RegisterableStorage storage $ = _getRegisterableStorage();
76
+ return (
77
+ IRegistry.ObjectInfo(
78
+ zeroNftId(),
79
+ $._parentNftId,
80
+ $._objectType,
81
+ $._isInterceptor,
82
+ address(this),
83
+ getOwner(),
84
+ $._data
85
+ ),
86
+ bytes("")
87
+ );
85
88
  }
86
- }
89
+ }
@@ -0,0 +1,27 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+ import {SafeERC20} from "@openzeppelin5/contracts/token/ERC20/utils/SafeERC20.sol";
6
+
7
+ contract TokenHandler {
8
+ IERC20Metadata private _token;
9
+
10
+ constructor(address token) {
11
+ _token = IERC20Metadata(token);
12
+ }
13
+
14
+ // TODO add logging
15
+ function transfer(
16
+ address from,
17
+ address to,
18
+ uint256 amount // TODO add authz (only treasury/instance/product/pool/ service)
19
+ ) external {
20
+ SafeERC20.safeTransferFrom(_token, from, to, amount);
21
+ // _token.transferFrom(from, to, amount);
22
+ }
23
+
24
+ function getToken() external view returns (IERC20Metadata) {
25
+ return _token;
26
+ }
27
+ }
@@ -0,0 +1,16 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {ProxyAdmin} from "@openzeppelin5/contracts/proxy/transparent/ProxyAdmin.sol";
5
+ import {TransparentUpgradeableProxy, ITransparentUpgradeableProxy} from "@openzeppelin5/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
6
+
7
+ import {IVersionable} from "./IVersionable.sol";
8
+
9
+ contract UpgradableProxyWithAdmin is TransparentUpgradeableProxy {
10
+
11
+ constructor(address implementation, address initialProxyAdminOwner, bytes memory data)
12
+ TransparentUpgradeableProxy(implementation, initialProxyAdminOwner, data)
13
+ {}
14
+
15
+ function getProxyAdmin() external returns (ProxyAdmin) { return ProxyAdmin(_proxyAdmin()); }
16
+ }
@@ -1,92 +1,147 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Initializable} from "@openzeppelin5/contracts/proxy/utils/Initializable.sol";
3
5
 
4
6
  import {Blocknumber, blockNumber} from "../types/Blocknumber.sol";
5
- import {Timestamp, blockTimestamp} from "../types/Timestamp.sol";
6
- import {Version, VersionPart, zeroVersion} from "../types/Version.sol";
7
+ import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
8
+ import {Version, VersionPart, VersionLib} from "../types/Version.sol";
7
9
 
8
10
  import {IVersionable} from "./IVersionable.sol";
9
11
 
10
- abstract contract Versionable is IVersionable {
11
12
 
12
13
 
13
- mapping(Version version => VersionInfo info) private _versionHistory;
14
- Version [] private _versions;
14
+ abstract contract Versionable is
15
+ Initializable,
16
+ IVersionable
17
+ {
18
+ // keccak256(abi.encode(uint256(keccak256("gif-next.contracts.shared.Versionable.sol")) - 1)) & ~bytes32(uint256(0xff))
19
+ bytes32 private constant VERSIONABLE_LOCATION_V1 = 0x4f61291a8ac3d020d0a7d919a76b8592aa88385744dee3f8b4f3873b969ed900;
15
20
 
16
21
 
17
- // controlled activation for controller contract
18
- constructor() {
19
- _activate(address(0), msg.sender);
22
+ /// @custom:storage-location erc7201:gif-next.contracts.shared.Versionable.sol
23
+ struct VersionableStorage {
24
+ mapping(Version version => VersionInfo info) _versionHistory;
25
+ Version [] _versions;
26
+ Version _v1;
20
27
  }
21
28
 
22
- // IMPORTANT this function needs to be implemented by each new version
23
- // and needs to call internal function call _activate()
24
- function activate(address implementation, address activatedBy)
25
- external
26
- override
27
- {
28
- _activate(implementation, activatedBy);
29
- }
30
29
 
30
+ constructor() {
31
+ _disableInitializers();
32
+ }
33
+ // TODO write test where new version of private _updateVersionHistory is added and used...
34
+ function initialize(
35
+ address implementation,
36
+ address activatedBy,
37
+ bytes memory data
38
+ )
39
+ public
40
+ initializer
41
+ {
42
+ _updateVersionHistory(implementation, activatedBy);
43
+ _initialize(activatedBy, data);
44
+ }
31
45
 
32
- // can only be called once per contract
33
- // needs bo be called inside the proxy upgrade tx
34
- function _activate(
46
+ // TODO activatedBy MUST ALWAYS be an owner?
47
+ function upgrade(
35
48
  address implementation,
36
- address activatedBy
49
+ address activatedBy,
50
+ bytes memory data
37
51
  )
38
- internal
52
+ external
53
+ reinitializer(VersionLib.toUint64(getVersion()))
39
54
  {
40
- Version thisVersion = getVersion();
41
- require(
42
- !isActivated(thisVersion),
43
- "ERROR:VRN-001:VERSION_ALREADY_ACTIVATED"
44
- );
45
-
46
- // require increasing version number
47
- if(_versions.length > 0) {
48
- Version lastVersion = _versions[_versions.length - 1];
49
- require(
50
- thisVersion > lastVersion,
51
- "ERROR:VRN-002:VERSION_NOT_INCREASING"
52
- );
53
- }
55
+ _updateVersionHistory(implementation, activatedBy);
56
+ _upgrade(data);
57
+ }
54
58
 
55
- // update version history
56
- _versions.push(thisVersion);
57
- _versionHistory[thisVersion] = VersionInfo(
58
- thisVersion,
59
- implementation,
60
- activatedBy,
61
- blockNumber(),
62
- blockTimestamp()
63
- );
59
+ function isInitialized(Version _version) public override view returns(bool) {
60
+ return _getVersionableStorage()._versionHistory[_version].activatedIn.toInt() > 0;
61
+ }
64
62
 
65
- emit LogVersionableActivated(thisVersion, implementation, activatedBy);
63
+ function getVersion() public pure virtual returns(Version);
64
+
65
+ function getVersionCount() public view override returns(uint256) {
66
+ return _getVersionableStorage()._versions.length;
66
67
  }
67
68
 
69
+ function getVersion(uint256 idx) public view override returns(Version) {
70
+ return _getVersionableStorage()._versions[idx];
71
+ }
68
72
 
69
- function isActivated(Version _version) public override view returns(bool) {
70
- return _versionHistory[_version].activatedIn.toInt() > 0;
73
+ function getVersionInfo(Version _version) public override view returns(VersionInfo memory) {
74
+ return _getVersionableStorage()._versionHistory[_version];
71
75
  }
72
76
 
77
+ function getInitializedVersion() public view returns(uint64) {
78
+ return _getInitializedVersion();
79
+ }
73
80
 
74
- function getVersion() public pure virtual returns(Version);
75
81
 
76
82
 
77
- function getVersionCount() external view override returns(uint256) {
78
- return _versions.length;
83
+ // IMPORTANT each version must implement this function
84
+ // each implementation MUST use onlyInitialising modifier
85
+ // each implementation MUST call intializers of all base contracts...
86
+ function _initialize(address owner, bytes memory data)
87
+ internal
88
+ onlyInitializing
89
+ virtual
90
+ {
91
+ revert();
79
92
  }
80
93
 
81
94
 
82
- function getVersion(uint256 idx) external view override returns(Version) {
83
- require(idx < _versions.length, "ERROR:VRN-010:INDEX_TOO_LARGE");
84
- return _versions[idx];
95
+ // IMPORTANT each version except version "1" must implement this function
96
+ // each implementation MUST use onlyInitialising modifier
97
+ function _upgrade(bytes memory data)
98
+ internal
99
+ onlyInitializing
100
+ virtual
101
+ {
102
+ revert();
85
103
  }
86
104
 
105
+ function _getVersionableStorage() private pure returns (VersionableStorage storage $) {
106
+ assembly {
107
+ $.slot := VERSIONABLE_LOCATION_V1
108
+ }
109
+ }
110
+
111
+ // can only be called once per contract
112
+ // needs to be called inside the proxy upgrade tx
113
+ // TODO run reinitializer(version().toUint64()) modifier after "version()" is checked,
114
+ function _updateVersionHistory(
115
+ address implementation,
116
+ address activatedBy
117
+ )
118
+ private
119
+ onlyInitializing
120
+ {
121
+ VersionableStorage storage $ = _getVersionableStorage();
122
+
123
+ uint64 version = _getInitializedVersion();
124
+
125
+ Version thisVersion = getVersion();
126
+
127
+ if(version == 1) {
128
+ // thisVersion is alias to version "1"
129
+ $._v1 = thisVersion;
130
+ }
131
+ else {
132
+ require(thisVersion > $._v1, "INVALID VERSION");
133
+ }
134
+
135
+ // update version history
136
+ $._versions.push(thisVersion);
137
+ $._versionHistory[thisVersion] = VersionInfo(
138
+ thisVersion,
139
+ implementation,
140
+ activatedBy,
141
+ TimestampLib.blockTimestamp(),
142
+ blockNumber()
143
+ );
87
144
 
88
- function getVersionInfo(Version _version) external override view returns(VersionInfo memory) {
89
- require(isActivated(_version), "ERROR:VRN-020:VERSION_UNKNOWN");
90
- return _versionHistory[_version];
145
+ emit LogVersionableInitialized(thisVersion, implementation, activatedBy);
91
146
  }
92
147
  }
@@ -2,7 +2,7 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {UFixed, UFixedMathLib} from "../types/UFixed.sol";
5
- import {Fee, toFee, zeroFee} from "../types/Fee.sol";
5
+ import {Fee, FeeLib} from "../types/Fee.sol";
6
6
 
7
7
  contract TestFee {
8
8
 
@@ -15,11 +15,11 @@ contract TestFee {
15
15
  pure
16
16
  returns(Fee memory fee)
17
17
  {
18
- return toFee(UFixedMathLib.toUFixed(fractionalValue, exponent), fixedValue);
18
+ return FeeLib.toFee(UFixedMathLib.toUFixed(fractionalValue, exponent), fixedValue);
19
19
  }
20
20
 
21
21
  function getZeroFee() external pure returns(Fee memory fee) {
22
- return zeroFee();
22
+ return FeeLib.zeroFee();
23
23
  }
24
24
 
25
25
  }
@@ -8,12 +8,11 @@ import {Registerable} from "../../contracts/shared/Registerable.sol";
8
8
 
9
9
  contract TestRegisterable is Registerable {
10
10
 
11
- constructor(address registry, NftId registryNftId)
12
- Registerable(registry, registryNftId)
11
+ constructor(address registry, NftId registryNftId, ObjectType objectType, bool isInterceptor, address initialOwner)
12
+ //Registerable(registry, registryNftId)
13
13
  // solhint-disable-next-line no-empty-blocks
14
- {}
15
-
16
- function getType() external pure override returns (ObjectType) {
17
- return TOKEN();
14
+ {
15
+ bytes memory data = "";
16
+ _initializeRegisterable(registry, registryNftId, objectType, isInterceptor, initialOwner, data);
18
17
  }
19
18
  }