@etherisc/gif-next 0.0.2-790d44b-698 → 0.0.2-79559e6-556

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 (398) hide show
  1. package/README.md +211 -27
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +176 -23
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +267 -54
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +129 -23
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -188
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +15 -227
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -213
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +334 -99
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +365 -80
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/AccessManagedUpgradeableInitializeable.sol/AccessManagedUpgradeableInitializeable.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagedUpgradeableInitializeable.sol/AccessManagedUpgradeableInitializeable.json +137 -0
  46. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  47. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  48. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  49. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +775 -0
  50. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  51. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  52. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  53. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  54. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  55. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +789 -1139
  56. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  57. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  58. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +485 -0
  60. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  61. package/artifacts/contracts/instance/Instance.sol/Instance.json +2380 -1212
  62. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +940 -0
  64. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  66. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  68. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +970 -0
  70. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +512 -0
  72. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +272 -0
  74. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +198 -22
  76. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  77. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +1 -1
  78. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  79. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  80. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  81. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  82. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
  83. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  84. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  85. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  86. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  87. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  88. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  89. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  90. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  91. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  92. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  93. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  94. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  95. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  96. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  97. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  98. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  99. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +294 -62
  101. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +269 -37
  103. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  104. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
  105. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  106. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +121 -60
  107. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  108. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +118 -38
  109. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  110. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +280 -33
  111. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  112. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +158 -69
  113. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  114. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +481 -39
  115. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  116. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +464 -0
  117. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  118. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +322 -97
  119. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  120. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +488 -0
  121. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  122. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  123. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  124. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +377 -37
  125. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  126. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +947 -0
  127. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  128. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  129. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  130. package/artifacts/contracts/registry/Registry.sol/Registry.json +395 -283
  131. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  132. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1293 -0
  133. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  134. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +517 -0
  135. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  136. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  137. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  138. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  139. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  140. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  141. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  142. package/artifacts/contracts/{instance/module/component/ComponentModule.sol/ComponentModule.json → shared/INftOwnable.sol/INftOwnable.json} +67 -57
  143. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  145. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  146. package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +119 -39
  147. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  148. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  149. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  150. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  151. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  152. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  153. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  154. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  155. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +135 -133
  156. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  157. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +144 -40
  158. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  159. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  160. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  161. package/artifacts/contracts/shared/{Proxy.sol/ProxyWithProxyAdminGetter.json → UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json} +4 -4
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  165. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  166. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  167. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  169. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestService.sol/TestService.json +205 -48
  171. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  173. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  174. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  175. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  176. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +18 -2
  177. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  178. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  179. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  180. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  184. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
  186. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  188. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  190. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  192. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  194. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  196. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  198. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  200. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  202. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  204. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  206. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  208. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  210. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  212. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  214. package/contracts/components/BaseComponent.sol +26 -29
  215. package/contracts/components/Distribution.sol +49 -18
  216. package/contracts/components/IBaseComponent.sol +9 -3
  217. package/contracts/components/IDistributionComponent.sol +3 -6
  218. package/contracts/components/IPoolComponent.sol +7 -12
  219. package/contracts/components/IProductComponent.sol +4 -7
  220. package/contracts/components/Pool.sol +111 -79
  221. package/contracts/components/Product.sol +109 -47
  222. package/contracts/experiment/cloning/Cloner.sol +47 -0
  223. package/contracts/instance/AccessManagedUpgradeableInitializeable.sol +17 -0
  224. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  225. package/contracts/instance/BundleManager.sol +129 -0
  226. package/contracts/instance/Cloneable.sol +46 -0
  227. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  228. package/contracts/instance/IInstance.sol +48 -45
  229. package/contracts/instance/IInstanceBase.sol +26 -0
  230. package/contracts/instance/IInstanceService.sol +32 -0
  231. package/contracts/instance/Instance.sol +437 -57
  232. package/contracts/instance/InstanceAccessManager.sol +288 -0
  233. package/contracts/instance/InstanceBase.sol +41 -0
  234. package/contracts/instance/InstanceReader.sol +315 -0
  235. package/contracts/instance/InstanceService.sol +233 -0
  236. package/contracts/instance/InstanceServiceManager.sol +57 -0
  237. package/contracts/instance/ObjectManager.sol +95 -0
  238. package/contracts/instance/base/ComponentServiceBase.sol +102 -10
  239. package/contracts/instance/base/IInstanceBase.sol +3 -2
  240. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  241. package/contracts/instance/base/ILifecycle.sol +3 -3
  242. package/contracts/instance/base/KeyValueStore.sol +49 -38
  243. package/contracts/instance/base/Lifecycle.sol +1 -1
  244. package/contracts/instance/module/IAccess.sol +38 -0
  245. package/contracts/instance/module/IBundle.sol +20 -0
  246. package/contracts/instance/module/IDistribution.sol +39 -0
  247. package/contracts/instance/module/IPolicy.sol +45 -0
  248. package/contracts/instance/module/IRisk.sol +11 -0
  249. package/contracts/instance/module/ISetup.sol +46 -0
  250. package/contracts/instance/module/ITreasury.sol +23 -0
  251. package/contracts/instance/service/ComponentOwnerService.sol +232 -72
  252. package/contracts/instance/service/DistributionService.sol +49 -20
  253. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  254. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  255. package/contracts/instance/service/IDistributionService.sol +1 -1
  256. package/contracts/instance/service/IPoolService.sol +17 -3
  257. package/contracts/instance/service/IProductService.sol +9 -6
  258. package/contracts/instance/service/PoolService.sol +190 -52
  259. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  260. package/contracts/instance/service/ProductService.sol +195 -134
  261. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  262. package/contracts/registry/ChainNft.sol +80 -37
  263. package/contracts/registry/IRegistry.sol +49 -25
  264. package/contracts/registry/IRegistryService.sol +50 -0
  265. package/contracts/registry/ITransferInterceptor.sol +6 -0
  266. package/contracts/registry/Registry.sol +313 -323
  267. package/contracts/registry/RegistryService.sol +358 -0
  268. package/contracts/registry/RegistryServiceManager.sol +80 -0
  269. package/contracts/registry/TokenRegistry.sol +111 -0
  270. package/contracts/shared/ContractDeployerLib.sol +72 -0
  271. package/contracts/shared/ERC165.sol +6 -2
  272. package/contracts/shared/INftOwnable.sol +22 -0
  273. package/contracts/shared/IRegisterable.sol +8 -15
  274. package/contracts/{instance/base → shared}/IService.sol +3 -3
  275. package/contracts/shared/IVersionable.sol +15 -13
  276. package/contracts/shared/NftOwnable.sol +134 -0
  277. package/contracts/shared/ProxyManager.sol +94 -0
  278. package/contracts/shared/Registerable.sol +63 -59
  279. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  280. package/contracts/shared/Service.sol +55 -0
  281. package/contracts/shared/TokenHandler.sol +27 -0
  282. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  283. package/contracts/shared/Versionable.sol +49 -43
  284. package/contracts/test/TestFee.sol +2 -2
  285. package/contracts/test/TestRegisterable.sol +5 -6
  286. package/contracts/test/TestRoleId.sol +1 -1
  287. package/contracts/test/TestService.sol +5 -13
  288. package/contracts/types/DistributorType.sol +55 -0
  289. package/contracts/types/Fee.sol +3 -3
  290. package/contracts/types/Key32.sol +8 -3
  291. package/contracts/types/NftIdSet.sol +26 -24
  292. package/contracts/types/NumberId.sol +52 -0
  293. package/contracts/types/ObjectType.sol +35 -14
  294. package/contracts/types/Referral.sol +85 -0
  295. package/contracts/types/RoleId.sol +61 -9
  296. package/contracts/types/StateId.sol +5 -1
  297. package/contracts/types/Timestamp.sol +7 -3
  298. package/contracts/types/UFixed.sol +128 -12
  299. package/contracts/types/Version.sol +5 -1
  300. package/package.json +4 -3
  301. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  302. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  303. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  304. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  305. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  306. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  307. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  308. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  309. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  310. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +0 -10
  311. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  312. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  313. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  314. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  315. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  316. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  317. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  318. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  319. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  320. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  321. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  322. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -117
  323. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  324. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  325. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  326. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  327. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  328. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  329. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  330. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -284
  331. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  332. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
  333. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  334. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  335. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  336. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -144
  337. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -144
  339. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  340. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  341. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  342. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  344. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  345. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  346. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -511
  347. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  348. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  349. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  350. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -511
  351. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  352. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  353. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  354. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  355. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  356. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  357. package/artifacts/contracts/shared/Proxy.sol/ProxyDeployer.dbg.json +0 -4
  358. package/artifacts/contracts/shared/Proxy.sol/ProxyDeployer.json +0 -248
  359. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +0 -4
  360. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  361. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -405
  362. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  363. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -578
  364. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  365. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -575
  366. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  367. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  368. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  369. package/contracts/experiment/statemachine/README.md +0 -112
  370. package/contracts/instance/IInstanceLinked.sol +0 -8
  371. package/contracts/instance/base/InstanceBase.sol +0 -91
  372. package/contracts/instance/base/ModuleBase.sol +0 -57
  373. package/contracts/instance/base/ServiceBase.sol +0 -37
  374. package/contracts/instance/module/access/Access.sol +0 -149
  375. package/contracts/instance/module/access/IAccess.sol +0 -53
  376. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  377. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  378. package/contracts/instance/module/component/ComponentModule.sol +0 -70
  379. package/contracts/instance/module/component/IComponent.sol +0 -28
  380. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  381. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  382. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  383. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  384. package/contracts/instance/module/pool/IPoolModule.sol +0 -40
  385. package/contracts/instance/module/pool/PoolModule.sol +0 -90
  386. package/contracts/instance/module/risk/IRisk.sol +0 -26
  387. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  388. package/contracts/instance/module/treasury/ITreasury.sol +0 -82
  389. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  390. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -138
  391. package/contracts/registry/IChainNft.sol +0 -21
  392. package/contracts/registry/IRegistryLinked.sol +0 -8
  393. package/contracts/shared/IOwnable.sol +0 -6
  394. package/contracts/shared/Proxy.sol +0 -94
  395. package/contracts/test/TestDistribution.sol +0 -21
  396. package/contracts/test/TestPool.sol +0 -25
  397. package/contracts/test/TestProduct.sol +0 -72
  398. package/contracts/types/ReferralId.sol +0 -48
@@ -1,10 +1,10 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {VersionPart} from "../../types/Version.sol";
4
+ import {VersionPart} from "../types/Version.sol";
5
5
 
6
- import {IRegisterable} from "../../shared/IRegisterable.sol";
7
- import {IVersionable} from "../../shared/IVersionable.sol";
6
+ import {IRegisterable} from "./IRegisterable.sol";
7
+ import {IVersionable} from "./IVersionable.sol";
8
8
 
9
9
  interface IService is
10
10
  IRegisterable,
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {Blocknumber} from "../types/Blocknumber.sol";
5
5
  import {Timestamp} from "../types/Timestamp.sol";
@@ -13,25 +13,22 @@ import {Version} from "../types/Version.sol";
13
13
  // 3) implement internal _initialize() function with onlyInitializing modifier
14
14
  // 4) implement internal _upgrade() function with onlyInitializing modifier (1st version MUST revert)
15
15
  // 5) have onlyInitialising modifier for each function callable inside _initialize()/_upgrade() (MUST use different functions for initialization/upgrade and normal operations)
16
- // 6) use default empty constructor -> _disableInitializer() called from Versionable contructor
16
+ // 6) use default empty constructor -> _disableInitializer() is called from Versionable contructor
17
17
  // 7) use namespace storage
18
+ // 8) since now inheritance is used for upgradability, contract MUST BE inherited ONLY by the next version
19
+ // Upgradeable contract SHOULD:
20
+ // 9) define all non private methods as virtual (in order to be able to upgrade them latter)
21
+ // otherwise, it is still possible to upgrade contract, but everyone who is using it will have to switch to a new fucntions
22
+ // in some cases this ok but not in the others...
18
23
  //
19
24
  // IMPORTANT
20
25
  // Each version MUST:
21
- // 1) ALWAYS define namespace storage struct (even if no changes were introduced)
26
+ // 1) define namespace storage struct if accessing storage
22
27
  // - DO NOT use structs inside, except
23
28
  // - CAN use structs ONLY inside mappings
24
- // 2) ALWAYS define private getter (even if no changes were introduced)
29
+ // 2) ALWAYS define private getter if accessing storage
25
30
  // - MUST use default implementation, CAN change ONLY return type
26
31
  // - MUST use the same "LOCATION_V1"
27
- // Optional:
28
- // 4) implement public initialize()
29
- // - MUST use intializer modifier
30
- // - MUST call Versionable._updateVersionHistory()
31
- // 5) implement public upgrade()
32
- // - 1st version MUST revert
33
- // - MUST use reinitializer(VersionLib.toUint64(getVersion())) modifier
34
- // - MUST call Versionable._updateVersionHistory()
35
32
 
36
33
  interface IVersionable {
37
34
 
@@ -69,7 +66,9 @@ interface IVersionable {
69
66
  function isInitialized(Version version) external view returns(bool);
70
67
 
71
68
  /**
72
- * @dev returns currently active version of this contract
69
+ * @dev returns version of this contract
70
+ * each new implementation MUST implement this function
71
+ * version number MUST increase
73
72
  */
74
73
  function getVersion() external pure returns(Version);
75
74
 
@@ -89,6 +88,9 @@ interface IVersionable {
89
88
  function getVersionInfo(Version version) external view returns(VersionInfo memory versionInfo);
90
89
 
91
90
  // TODO make sure it is needed here
91
+ /**
92
+ * @dev returns currently active version
93
+ */
92
94
  function getInitializedVersion() external view returns(uint64);
93
95
 
94
96
  }
@@ -0,0 +1,134 @@
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
+ if (msg.sender != getOwner()) {
17
+ revert ErrorNotOwner(msg.sender);
18
+ }
19
+ _;
20
+ }
21
+
22
+ constructor() {
23
+ _initialOwner = msg.sender;
24
+ }
25
+
26
+ /// @dev links this contract to nft after registration
27
+ // needs to be done once per registered contract and
28
+ // reduces registry calls to check ownership
29
+ // does not need any protection as function can only do the "right thing"
30
+ function linkToRegisteredNftId() public {
31
+ if (_nftId.gtz()) {
32
+ revert ErrorAlreadyLinked(address(_registry), _nftId);
33
+ }
34
+
35
+ if (address(_registry) == address(0)) {
36
+ revert ErrorRegistryNotInitialized();
37
+ }
38
+
39
+ address contractAddress = address(this);
40
+
41
+ if (!_registry.isRegistered(contractAddress)) {
42
+ revert ErrorContractNotRegistered(contractAddress);
43
+ }
44
+
45
+ _nftId = _registry.getNftId(contractAddress);
46
+ }
47
+
48
+
49
+ function getRegistry() public view virtual override returns (IRegistry) {
50
+ return _registry;
51
+ }
52
+
53
+
54
+ function getNftId() public view virtual override returns (NftId) {
55
+ return _nftId;
56
+ }
57
+
58
+
59
+ function getOwner() public view virtual override returns (address) {
60
+ if (_nftId.gtz()) {
61
+ return _registry.ownerOf(_nftId);
62
+ }
63
+
64
+ return _initialOwner;
65
+ }
66
+
67
+
68
+ /// @dev initialization for upgradable contracts
69
+ // used in _initializeRegisterable
70
+ function _initializeNftOwnable(
71
+ address initialOwner,
72
+ address registryAddress
73
+ )
74
+ internal
75
+ virtual
76
+ {
77
+ require(initialOwner > address(0), "NftOwnable: initial owner is 0");
78
+ _initialOwner = initialOwner;
79
+ _setRegistry(registryAddress);
80
+ }
81
+
82
+
83
+ /// @dev used in constructor of registry service manager
84
+ // links ownership of registry service manager ot nft owner of registry service
85
+ function _linkToNftOwnable(
86
+ address registryAddress,
87
+ address nftOwnableAddress
88
+ )
89
+ internal
90
+ onlyOwner()
91
+ returns (NftId)
92
+ {
93
+ if (_nftId.gtz()) {
94
+ revert ErrorAlreadyLinked(address(_registry), _nftId);
95
+ }
96
+
97
+ _setRegistry(registryAddress);
98
+
99
+ if (!_registry.isRegistered(nftOwnableAddress)) {
100
+ revert ErrorContractNotRegistered(nftOwnableAddress);
101
+ }
102
+
103
+ _nftId = _registry.getNftId(nftOwnableAddress);
104
+
105
+ return _nftId;
106
+ }
107
+
108
+
109
+ function _setRegistry(address registryAddress)
110
+ private
111
+ {
112
+ if (address(_registry) != address(0)) {
113
+ revert ErrorRegistryAlreadyInitialized(address(_registry));
114
+ }
115
+
116
+ if (registryAddress == address(0)) {
117
+ revert ErrorRegistryAddressZero();
118
+ }
119
+
120
+ if (registryAddress.code.length == 0) {
121
+ revert ErrorNotRegistry(registryAddress);
122
+ }
123
+
124
+ _registry = IRegistry(registryAddress);
125
+
126
+ try _registry.supportsInterface(type(IRegistry).interfaceId) returns (bool isRegistry) {
127
+ if (!isRegistry) {
128
+ revert ErrorNotRegistry(registryAddress);
129
+ }
130
+ } catch {
131
+ revert ErrorNotRegistry(registryAddress);
132
+ }
133
+ }
134
+ }
@@ -0,0 +1,94 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
5
+ import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
6
+ import {ITransparentUpgradeableProxy} from "@openzeppelin/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,90 @@
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 "@openzeppelin/contracts-upgradeable/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
+ _initializeERC165();
53
+ _initializeNftOwnable(
54
+ initialOwner,
55
+ registryAddress);
44
56
 
45
- _parentNftId = parentNftId;
46
- require(
47
- _registry.isRegistered(_parentNftId),
48
- "ERROR:RGB-012:PARENT_NOT_REGISTERED"
49
- );
57
+ // TODO check parentNftId -> registry.isRegistered(parentNftId)
58
+ // TODO check object-parent type pair -> registry.isValidTypeCombo() or something...verify with registry that setup will be able to register...
50
59
 
51
- _initialOwner = msg.sender;
60
+ RegisterableStorage storage $ = _getRegisterableStorage();
61
+ $._parentNftId = parentNftId;
62
+ $._objectType = objectType;
63
+ $._isInterceptor = isInterceptor;
64
+ $._data = data;
52
65
 
53
- // register support for IRegisterable
54
66
  _registerInterface(type(IRegisterable).interfaceId);
55
67
  }
56
68
 
57
- // from IRegistryLinked
58
- function register() public onlyOwner virtual override returns (NftId nftId) {
59
- return _registry.register(address(this));
60
- }
61
69
 
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 "";
70
+ function getInitialInfo()
71
+ public
72
+ view
73
+ virtual
74
+ returns (IRegistry.ObjectInfo memory, bytes memory data)
75
+ {
76
+ RegisterableStorage storage $ = _getRegisterableStorage();
77
+ return (
78
+ IRegistry.ObjectInfo(
79
+ getNftId(),
80
+ $._parentNftId,
81
+ $._objectType,
82
+ $._isInterceptor,
83
+ address(this),
84
+ getOwner(),
85
+ $._data
86
+ ),
87
+ bytes("")
88
+ );
85
89
  }
86
- }
90
+ }
@@ -0,0 +1,16 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Registerable} from "./Registerable.sol";
5
+ import {Versionable} from "./Versionable.sol";
6
+
7
+ /// @dev base contract for upgradable objects like services and upgradable components
8
+ /// deriving contracs need to call _initializeRegisterable
9
+ /// TODO internalizes versionable here, a non-registerable versionalbe might itself have some value but is outside the scope of the gif
10
+ /// after this merge versionable will no longer exist on its own in gif
11
+ /// only registerable and upgradable (which is a registerable too) will remain
12
+ abstract contract RegisterableUpgradable is
13
+ Registerable,
14
+ Versionable
15
+ {
16
+ }
@@ -0,0 +1,55 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../registry/IRegistry.sol";
5
+ import {IService} from "./IService.sol";
6
+ import {IVersionable} from "./IVersionable.sol";
7
+ import {NftId, zeroNftId} from "../types/NftId.sol";
8
+ import {RegisterableUpgradable} from "./RegisterableUpgradable.sol";
9
+ import {SERVICE} from "../types/ObjectType.sol";
10
+ import {Version, VersionPart, VersionLib} from "../types/Version.sol";
11
+ import {Versionable} from "./Versionable.sol";
12
+
13
+ /// @dev service base contract
14
+ abstract contract Service is
15
+ RegisterableUpgradable,
16
+ IService
17
+ {
18
+ function getName() public pure virtual override returns(string memory name);
19
+
20
+ function getMajorVersion() public view virtual override returns(VersionPart majorVersion) {
21
+ return getVersion().toMajorPart();
22
+ }
23
+
24
+ // from Versionable
25
+ function getVersion()
26
+ public
27
+ pure
28
+ virtual override (IVersionable, Versionable)
29
+ returns(Version)
30
+ {
31
+ return VersionLib.toVersion(3,0,0);
32
+ }
33
+
34
+ function _initializeService(
35
+ address registry,
36
+ address initialOwner
37
+ )
38
+ internal
39
+ virtual
40
+ //onlyInitializing //TODO uncomment when "fully" upgradeable
41
+ {
42
+ // service must provide its name and version upon registration
43
+ bytes memory data = abi.encode(getName(), getMajorVersion());
44
+ NftId registryNftId = _getRegistryNftId(registry);
45
+ bool isInterceptor = false;
46
+
47
+ _initializeRegisterable(registry, registryNftId, SERVICE(), isInterceptor, initialOwner, data);
48
+ _registerInterface(type(IService).interfaceId);
49
+ }
50
+
51
+ // this is just a conveniene function, actual validation will be done upon registration
52
+ function _getRegistryNftId(address registryAddress) internal view returns (NftId) {
53
+ return IRegistry(registryAddress).getNftId(registryAddress);
54
+ }
55
+ }
@@ -0,0 +1,27 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+ import {SafeERC20} from "@openzeppelin/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 "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
5
+ import {TransparentUpgradeableProxy, ITransparentUpgradeableProxy} from "@openzeppelin/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
+ }