@etherisc/gif-next 0.0.2-8d47fa1-080 → 0.0.2-8f5f625-515

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 (477) hide show
  1. package/README.md +243 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +832 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1038 -164
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → components/IComponent.sol/IComponent.json} +240 -191
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +561 -35
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +584 -104
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +408 -51
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1027 -273
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +799 -144
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +190 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1357 -1182
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +567 -0
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +2000 -1310
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1311 -0
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1279 -0
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1033 -0
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +701 -0
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/{ServiceBase.sol/ServiceBase.json → ComponentService.sol/ComponentService.json} +294 -122
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  44. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +67 -245
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  48. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  50. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +237 -0
  51. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  53. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  54. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IComponents.sol/IComponents.json} +2 -2
  55. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  56. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  57. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  58. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  59. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  60. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  61. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  62. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  63. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  64. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  65. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  66. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
  67. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  68. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  69. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  70. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1093 -0
  71. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  72. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
  73. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  74. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  75. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  76. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  77. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  78. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1544 -338
  79. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  80. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +805 -0
  81. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  82. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
  83. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  84. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +630 -0
  85. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  86. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +209 -189
  87. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  88. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +768 -124
  89. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  90. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +540 -0
  91. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +135 -191
  93. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +65 -355
  95. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  96. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1021 -0
  97. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +689 -0
  99. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +388 -213
  101. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +657 -0
  103. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +285 -472
  105. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  106. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +649 -0
  107. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  108. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +60 -2
  109. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  110. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +250 -65
  111. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  112. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +391 -169
  113. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  114. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  115. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  116. package/artifacts/contracts/registry/Registry.sol/Registry.json +229 -206
  117. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  118. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  119. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  120. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +511 -195
  121. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +670 -0
  123. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  124. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  125. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  126. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
  127. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  128. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  129. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  131. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  132. package/artifacts/contracts/{instance/module/component/ComponentModule.sol/ComponentModule.json → shared/INftOwnable.sol/INftOwnable.json} +71 -50
  133. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  134. package/artifacts/contracts/{instance/module/component/IComponent.sol/IComponentModule.json → shared/IPolicyHolder.sol/IPolicyHolder.json} +69 -57
  135. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +72 -8
  137. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  138. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  139. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  140. package/artifacts/contracts/{components/BaseComponent.sol/BaseComponent.json → shared/IService.sol/IService.json} +93 -37
  141. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  143. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  144. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +251 -0
  145. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  146. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  147. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  148. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +355 -83
  149. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  150. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +204 -12
  151. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  152. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  153. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  154. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → shared/Service.sol/Service.json} +172 -140
  155. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  156. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  157. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  158. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  159. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  160. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  161. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  163. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -12
  165. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  166. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  167. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestService.sol/TestService.json +209 -160
  169. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  171. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  173. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  174. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -174
  175. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  176. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  177. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  178. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  180. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  182. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  183. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  184. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  185. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  192. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  193. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  194. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  195. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  197. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  198. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  199. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  200. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +142 -0
  201. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  202. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  203. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  204. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  205. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  206. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  207. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  208. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  209. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  210. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  211. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  212. package/artifacts/contracts/{experiment/types/TypeB.sol/TypeBLib.json → types/UFixed.sol/MathLib.json} +4 -4
  213. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  214. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  215. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  216. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  217. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  218. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  219. package/contracts/components/Component.sol +251 -0
  220. package/contracts/components/Distribution.sol +204 -79
  221. package/contracts/components/IComponent.sol +74 -0
  222. package/contracts/components/IDistributionComponent.sol +43 -19
  223. package/contracts/components/IPoolComponent.sol +88 -40
  224. package/contracts/components/IProductComponent.sol +11 -10
  225. package/contracts/components/Pool.sol +216 -163
  226. package/contracts/components/Product.sol +137 -143
  227. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  228. package/contracts/instance/BundleManager.sol +127 -0
  229. package/contracts/instance/Cloneable.sol +51 -0
  230. package/contracts/instance/IInstance.sol +86 -42
  231. package/contracts/instance/IInstanceService.sol +72 -0
  232. package/contracts/instance/Instance.sol +310 -68
  233. package/contracts/instance/InstanceAccessManager.sol +524 -0
  234. package/contracts/instance/InstanceReader.sol +290 -0
  235. package/contracts/instance/InstanceService.sol +495 -0
  236. package/contracts/instance/InstanceServiceManager.sol +54 -0
  237. package/contracts/instance/ObjectManager.sol +82 -0
  238. package/contracts/instance/base/ComponentService.sol +134 -0
  239. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  240. package/contracts/instance/base/ILifecycle.sol +3 -3
  241. package/contracts/instance/base/KeyValueStore.sol +52 -38
  242. package/contracts/instance/base/Lifecycle.sol +12 -3
  243. package/contracts/instance/module/IAccess.sol +54 -0
  244. package/contracts/instance/module/IBundle.sol +21 -0
  245. package/contracts/instance/module/IComponents.sol +35 -0
  246. package/contracts/instance/module/IDistribution.sol +41 -0
  247. package/contracts/instance/module/IPolicy.sol +72 -0
  248. package/contracts/instance/module/IRisk.sol +11 -0
  249. package/contracts/instance/module/ISetup.sol +33 -0
  250. package/contracts/instance/module/ITreasury.sol +23 -0
  251. package/contracts/instance/service/ApplicationService.sol +350 -0
  252. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  253. package/contracts/instance/service/BundleService.sol +336 -0
  254. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  255. package/contracts/instance/service/ClaimService.sol +151 -0
  256. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  257. package/contracts/instance/service/DistributionService.sol +435 -22
  258. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  259. package/contracts/instance/service/IApplicationService.sol +82 -0
  260. package/contracts/instance/service/IBundleService.sol +62 -0
  261. package/contracts/instance/service/IClaimService.sol +61 -0
  262. package/contracts/instance/service/IDistributionService.sol +87 -1
  263. package/contracts/instance/service/IPolicyService.sol +72 -0
  264. package/contracts/instance/service/IPoolService.sol +22 -24
  265. package/contracts/instance/service/IProductService.sol +9 -76
  266. package/contracts/instance/service/PolicyService.sol +403 -0
  267. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  268. package/contracts/instance/service/PoolService.sol +181 -110
  269. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  270. package/contracts/instance/service/ProductService.sol +165 -433
  271. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  272. package/contracts/registry/ChainNft.sol +49 -26
  273. package/contracts/registry/IRegistry.sol +57 -31
  274. package/contracts/registry/IRegistryService.sol +54 -16
  275. package/contracts/registry/ITransferInterceptor.sol +1 -0
  276. package/contracts/registry/Registry.sol +288 -324
  277. package/contracts/registry/RegistryAccessManager.sol +216 -0
  278. package/contracts/registry/RegistryService.sol +160 -260
  279. package/contracts/registry/RegistryServiceManager.sol +62 -0
  280. package/contracts/registry/ReleaseManager.sol +322 -0
  281. package/contracts/registry/TokenRegistry.sol +116 -0
  282. package/contracts/shared/ContractDeployerLib.sol +72 -0
  283. package/contracts/shared/ERC165.sol +15 -9
  284. package/contracts/shared/INftOwnable.sol +23 -0
  285. package/contracts/shared/IPolicyHolder.sol +26 -0
  286. package/contracts/shared/IRegisterable.sol +5 -12
  287. package/contracts/shared/IRegistryLinked.sol +12 -0
  288. package/contracts/shared/IService.sol +18 -0
  289. package/contracts/shared/IVersionable.sol +4 -47
  290. package/contracts/shared/NftOwnable.sol +120 -0
  291. package/contracts/shared/PolicyHolder.sol +81 -0
  292. package/contracts/shared/ProxyManager.sol +112 -58
  293. package/contracts/shared/Registerable.sol +23 -66
  294. package/contracts/shared/RegistryLinked.sol +48 -0
  295. package/contracts/shared/Service.sol +58 -0
  296. package/contracts/shared/TokenHandler.sol +33 -0
  297. package/contracts/shared/UpgradableProxyWithAdmin.sol +2 -2
  298. package/contracts/shared/Versionable.sol +5 -93
  299. package/contracts/test/TestFee.sol +2 -2
  300. package/contracts/test/TestRegisterable.sol +1 -1
  301. package/contracts/test/TestRoleId.sol +1 -1
  302. package/contracts/test/TestService.sol +6 -7
  303. package/contracts/types/Blocknumber.sol +1 -0
  304. package/contracts/types/ClaimId.sol +52 -0
  305. package/contracts/types/DistributorType.sol +55 -0
  306. package/contracts/types/Fee.sol +4 -3
  307. package/contracts/types/Key32.sol +8 -3
  308. package/contracts/types/NftId.sol +8 -0
  309. package/contracts/types/NftIdSet.sol +26 -24
  310. package/contracts/types/NumberId.sol +52 -0
  311. package/contracts/types/ObjectType.sol +40 -14
  312. package/contracts/types/PayoutId.sol +54 -0
  313. package/contracts/types/Referral.sol +89 -0
  314. package/contracts/types/RoleId.sol +68 -9
  315. package/contracts/types/Seconds.sol +54 -0
  316. package/contracts/types/StateId.sol +6 -1
  317. package/contracts/types/Timestamp.sol +17 -13
  318. package/contracts/types/UFixed.sol +129 -12
  319. package/contracts/types/Version.sol +5 -1
  320. package/package.json +6 -5
  321. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  322. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  323. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -177
  324. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  326. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  328. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  329. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  330. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  332. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  334. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  336. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  337. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  338. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  339. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  340. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  343. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  344. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  345. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  346. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  347. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  348. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  349. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  350. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  351. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  352. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  353. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  354. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  355. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  356. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  357. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  358. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  359. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  360. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  361. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  362. package/artifacts/contracts/instance/base/IService.sol/IService.json +0 -344
  363. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  364. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  365. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  366. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  367. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  368. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  369. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  370. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  371. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  372. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  373. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  374. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  375. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  376. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  377. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  378. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  379. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  380. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  381. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  382. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  383. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  384. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  385. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  386. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  387. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -284
  388. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  389. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
  390. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  391. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  392. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  393. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -164
  394. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  395. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
  396. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  397. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  398. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  399. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  400. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  401. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  402. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  403. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -638
  404. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  405. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  406. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  407. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -638
  408. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  409. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -690
  410. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  411. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  412. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -457
  413. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  414. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  415. package/artifacts/contracts/registry/RegistryInstaller.sol/RegistryInstaller.dbg.json +0 -4
  416. package/artifacts/contracts/registry/RegistryInstaller.sol/RegistryInstaller.json +0 -344
  417. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  418. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  419. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  420. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -445
  421. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  422. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -602
  423. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  424. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -632
  425. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  426. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  427. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  428. package/contracts/components/BaseComponent.sol +0 -79
  429. package/contracts/components/IBaseComponent.sol +0 -19
  430. package/contracts/experiment/errors/Require.sol +0 -38
  431. package/contracts/experiment/errors/Revert.sol +0 -44
  432. package/contracts/experiment/inheritance/A.sol +0 -53
  433. package/contracts/experiment/inheritance/B.sol +0 -28
  434. package/contracts/experiment/inheritance/C.sol +0 -34
  435. package/contracts/experiment/inheritance/IA.sol +0 -13
  436. package/contracts/experiment/inheritance/IB.sol +0 -10
  437. package/contracts/experiment/inheritance/IC.sol +0 -12
  438. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  439. package/contracts/experiment/statemachine/ISM.sol +0 -25
  440. package/contracts/experiment/statemachine/SM.sol +0 -57
  441. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  442. package/contracts/experiment/types/TypeA.sol +0 -47
  443. package/contracts/experiment/types/TypeB.sol +0 -29
  444. package/contracts/instance/IInstanceLinked.sol +0 -8
  445. package/contracts/instance/base/ComponentServiceBase.sol +0 -49
  446. package/contracts/instance/base/IInstanceBase.sol +0 -23
  447. package/contracts/instance/base/IService.sol +0 -15
  448. package/contracts/instance/base/InstanceBase.sol +0 -89
  449. package/contracts/instance/base/ModuleBase.sol +0 -57
  450. package/contracts/instance/base/ServiceBase.sol +0 -43
  451. package/contracts/instance/module/access/Access.sol +0 -149
  452. package/contracts/instance/module/access/IAccess.sol +0 -53
  453. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  454. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  455. package/contracts/instance/module/component/ComponentModule.sol +0 -71
  456. package/contracts/instance/module/component/IComponent.sol +0 -28
  457. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  458. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  459. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  460. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  461. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  462. package/contracts/instance/module/pool/PoolModule.sol +0 -95
  463. package/contracts/instance/module/risk/IRisk.sol +0 -26
  464. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  465. package/contracts/instance/module/treasury/ITreasury.sol +0 -84
  466. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  467. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
  468. package/contracts/instance/service/ComponentOwnerService.sol +0 -272
  469. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  470. package/contracts/registry/IChainNft.sol +0 -22
  471. package/contracts/registry/IRegistryLinked.sol +0 -8
  472. package/contracts/registry/RegistryInstaller.sol +0 -100
  473. package/contracts/shared/IOwnable.sol +0 -6
  474. package/contracts/test/TestDistribution.sol +0 -22
  475. package/contracts/test/TestPool.sol +0 -27
  476. package/contracts/test/TestProduct.sol +0 -74
  477. package/contracts/types/ReferralId.sol +0 -48
@@ -1,11 +1,8 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Blocknumber} from "../types/Blocknumber.sol";
5
- import {Timestamp} from "../types/Timestamp.sol";
6
4
  import {Version} from "../types/Version.sol";
7
5
 
8
-
9
6
  /// IMPORTANT
10
7
  // Upgradeable contract MUST:
11
8
  // 1) inherit from Versionable
@@ -14,7 +11,7 @@ import {Version} from "../types/Version.sol";
14
11
  // 4) implement internal _upgrade() function with onlyInitializing modifier (1st version MUST revert)
15
12
  // 5) have onlyInitialising modifier for each function callable inside _initialize()/_upgrade() (MUST use different functions for initialization/upgrade and normal operations)
16
13
  // 6) use default empty constructor -> _disableInitializer() is called from Versionable contructor
17
- // 7) use namespace storage
14
+ // 7) use namespace storage (should this be needed)
18
15
  // 8) since now inheritance is used for upgradability, contract MUST BE inherited ONLY by the next version
19
16
  // Upgradeable contract SHOULD:
20
17
  // 9) define all non private methods as virtual (in order to be able to upgrade them latter)
@@ -22,48 +19,29 @@ import {Version} from "../types/Version.sol";
22
19
  // in some cases this ok but not in the others...
23
20
  //
24
21
  // IMPORTANT
25
- // Each version MUST:
22
+ // If introducting/amending storage related to Versionable version MUST:
26
23
  // 1) define namespace storage struct if accessing storage
27
24
  // - DO NOT use structs inside, except
28
25
  // - CAN use structs ONLY inside mappings
29
26
  // 2) ALWAYS define private getter if accessing storage
30
27
  // - MUST use default implementation, CAN change ONLY return type
31
- // - MUST use the same "LOCATION_V1"
32
28
 
33
29
  interface IVersionable {
34
30
 
35
- struct VersionInfo {
36
- Version version;
37
- address implementation;
38
- address activatedBy;
39
- Timestamp activatedAt;
40
- Blocknumber activatedIn;
41
- }
42
-
43
- event LogVersionableInitialized(Version version, address implementation, address activatedBy);
44
-
45
- // TODO uncomment when all implementations are ready
46
31
  /**
47
32
  * @dev IMPORTANT
48
33
  * implementation MUST be guarded by initializer modifier
49
- * implementation MUST call internal function Versionable._updateVersionHistory
50
34
  * new version MUST inherit from previous version
51
35
  */
52
- function initialize(address implementation, address activatedBy, bytes memory activationData) external;
36
+ function initializeVersionable(address activatedBy, bytes memory activationData) external;
53
37
 
54
38
  /**
55
39
  * @dev
56
40
  * implementation MUST be guarded by reinitializer(version().toUint64()) modifier
57
- * implementation MUST call internal function Versionable._updateVersionHistory
58
41
  * new version MUST inherit from previous version
59
42
  * the first verion MUST revert
60
43
  */
61
- function upgrade(address implementation, address activatedBy, bytes memory upgradeData) external;
62
-
63
- /**
64
- * @dev returns true if the specified version has been activated for the current contract
65
- */
66
- function isInitialized(Version version) external view returns(bool);
44
+ function upgradeVersionable(bytes memory upgradeData) external;
67
45
 
68
46
  /**
69
47
  * @dev returns version of this contract
@@ -72,25 +50,4 @@ interface IVersionable {
72
50
  */
73
51
  function getVersion() external pure returns(Version);
74
52
 
75
- /**
76
- * @dev returns the number of all deployed versions of this contract
77
- */
78
- function getVersionCount() external view returns(uint256 numberOfVersions);
79
-
80
- /**
81
- * @dev returns the i-th (index) version of this contract
82
- */
83
- function getVersion(uint256 index) external view returns(Version version);
84
-
85
- /**
86
- * @dev returns the i-th (index) version info of this contract
87
- */
88
- function getVersionInfo(Version version) external view returns(VersionInfo memory versionInfo);
89
-
90
- // TODO make sure it is needed here
91
- /**
92
- * @dev returns currently active version
93
- */
94
- function getInitializedVersion() external view returns(uint64);
95
-
96
53
  }
@@ -0,0 +1,120 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ // import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5
+
6
+ import {ERC165} from "./ERC165.sol";
7
+ import {INftOwnable} from "./INftOwnable.sol";
8
+ import {NftId} from "../types/NftId.sol";
9
+ import {RegistryLinked} from "./RegistryLinked.sol";
10
+
11
+ contract NftOwnable is
12
+ ERC165,
13
+ RegistryLinked,
14
+ INftOwnable
15
+ {
16
+ // keccak256(abi.encode(uint256(keccak256("etherisc.storage.NftOwnable")) - 1)) & ~bytes32(uint256(0xff));
17
+ bytes32 public constant NFT_OWNABLE_STORAGE_LOCATION_V1 = 0x07ebcf49758b6ed3af50fa146bec0abe157c0218fe65dc0874c286e9d5da4f00;
18
+
19
+ struct NftOwnableStorage {
20
+ NftId _nftId;
21
+ address _initialOwner;
22
+ }
23
+
24
+ /// @dev enforces msg.sender is owner of nft (or initial owner of nft ownable)
25
+ modifier onlyOwner() {
26
+ if (msg.sender != getOwner()) {
27
+ revert ErrorNftOwnableNotOwner(msg.sender);
28
+ }
29
+ _;
30
+ }
31
+
32
+
33
+ /// @dev initialization for upgradable contracts
34
+ // used in _initializeRegisterable
35
+ function initializeNftOwnable(
36
+ address initialOwner,
37
+ address registryAddress
38
+ )
39
+ public
40
+ virtual
41
+ onlyInitializing()
42
+ {
43
+ initializeRegistryLinked(registryAddress);
44
+ initializeERC165();
45
+
46
+ if(initialOwner == address(0)) {
47
+ revert ErrorNftOwnableInitialOwnerZero();
48
+ }
49
+
50
+ _getNftOwnableStorage()._initialOwner = initialOwner;
51
+ }
52
+
53
+
54
+ /// @dev links this contract to nft after registration
55
+ // needs to be done once per registered contract and
56
+ // reduces registry calls to check ownership
57
+ // does not need any protection as function can only do the "right thing"
58
+ function linkToRegisteredNftId()
59
+ public
60
+ virtual
61
+ {
62
+ NftOwnableStorage storage $ = _getNftOwnableStorage();
63
+
64
+ if ($._nftId.gtz()) {
65
+ revert ErrorNftOwnableAlreadyLinked($._nftId);
66
+ }
67
+
68
+ address contractAddress = address(this);
69
+
70
+ if (!getRegistry().isRegistered(contractAddress)) {
71
+ revert ErrorNftOwnableContractNotRegistered(contractAddress);
72
+ }
73
+
74
+ $._nftId = getRegistry().getNftId(contractAddress);
75
+ }
76
+
77
+ function getNftId() public view virtual override returns (NftId) {
78
+ return _getNftOwnableStorage()._nftId;
79
+ }
80
+
81
+ function getOwner() public view virtual override returns (address) {
82
+ NftOwnableStorage storage $ = _getNftOwnableStorage();
83
+
84
+ if ($._nftId.gtz()) {
85
+ return getRegistry().ownerOf($._nftId);
86
+ }
87
+
88
+ return $._initialOwner;
89
+ }
90
+
91
+ /// @dev used in constructor of registry service manager
92
+ // links ownership of registry service manager ot nft owner of registry service
93
+ function _linkToNftOwnable(
94
+ address nftOwnableAddress
95
+ )
96
+ internal
97
+ returns (NftId)
98
+ {
99
+ NftOwnableStorage storage $ = _getNftOwnableStorage();
100
+
101
+ if ($._nftId.gtz()) {
102
+ revert ErrorNftOwnableAlreadyLinked($._nftId);
103
+ }
104
+
105
+ if (!getRegistry().isRegistered(nftOwnableAddress)) {
106
+ revert ErrorNftOwnableContractNotRegistered(nftOwnableAddress);
107
+ }
108
+
109
+ $._nftId = getRegistry().getNftId(nftOwnableAddress);
110
+
111
+ return $._nftId;
112
+ }
113
+
114
+
115
+ function _getNftOwnableStorage() private pure returns (NftOwnableStorage storage $) {
116
+ assembly {
117
+ $.slot := NFT_OWNABLE_STORAGE_LOCATION_V1
118
+ }
119
+ }
120
+ }
@@ -0,0 +1,81 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+ import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
6
+ import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
7
+
8
+ import {ERC165} from "./ERC165.sol";
9
+ import {IPolicyHolder} from "./IPolicyHolder.sol";
10
+ import {IRegistry} from "../registry/IRegistry.sol";
11
+ import {NftId} from "../types/NftId.sol";
12
+ import {NumberId} from "../types/NumberId.sol";
13
+ import {RegistryLinked} from "./RegistryLinked.sol";
14
+
15
+ /// @dev template implementation for IPolicyHolder
16
+ contract PolicyHolder is
17
+ ERC165,
18
+ RegistryLinked,
19
+ IPolicyHolder
20
+ {
21
+ // keccak256(abi.encode(uint256(keccak256("etherisc.storage.PolicyHolder")) - 1)) & ~bytes32(uint256(0xff));
22
+ // TODO fix address
23
+ bytes32 public constant POLICY_HOLDER_STORAGE_LOCATION_V1 = 0x07ebcf49758b6ed3af50fa146bec0abe157c0218fe65dc0874c286e9d5da4f00;
24
+
25
+ // TODO uncomment/fix/refactor
26
+ struct PolicyHolderStorage {
27
+ // mapping(NftId policyId => mapping(NumberId claimId => address beneficiary)) private _claimBeneficiary;
28
+ // mapping(NftId policyId => address beneficiary) private _beneficiary;
29
+ bool dummy;
30
+ }
31
+
32
+ function initializePolicyHolder(
33
+ address registryAddress
34
+ )
35
+ public
36
+ virtual
37
+ onlyInitializing()
38
+ {
39
+ initializeRegistryLinked(registryAddress);
40
+ }
41
+
42
+ /// @dev empty default implementation
43
+ function policyCreatedCallback(NftId policyNftId) external virtual { }
44
+
45
+ /// @dev empty default implementation
46
+ function payoutExecutedCallback(NftId policyNftId, NumberId payoutId, address beneficiary, uint256 amount) external virtual { }
47
+
48
+ /// @dev determines beneficiary address that will be used in payouts targeting this contract
49
+ /// returned address will override GIF default where the policy nft holder is treated as beneficiary
50
+ function getBeneficiary(NftId policyId, NumberId claimId) external virtual view returns (address beneficiary) {
51
+ // TODO add implementation
52
+ }
53
+
54
+ //--- IERC165 functions ---------------//
55
+ function onERC721Received(
56
+ address, // operator
57
+ address, // from
58
+ uint256, // tokenId
59
+ bytes calldata // data
60
+ )
61
+ external
62
+ virtual
63
+ returns (bytes4)
64
+ {
65
+ return IERC721Receiver.onERC721Received.selector;
66
+ }
67
+
68
+ function _setBeneficiary(address beneficiary) internal {
69
+
70
+ }
71
+
72
+ function _setBeneficiary(NftId policyId, address beneficiary) internal {
73
+
74
+ }
75
+
76
+ function _getPolicyHolderStorage() private pure returns (PolicyHolderStorage storage $) {
77
+ assembly {
78
+ $.slot := POLICY_HOLDER_STORAGE_LOCATION_V1
79
+ }
80
+ }
81
+ }
@@ -1,79 +1,82 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
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";
4
+ import {ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
7
5
 
6
+ import {Blocknumber, blockNumber} from "../types/Blocknumber.sol";
8
7
  import {IVersionable} from "./IVersionable.sol";
8
+ import {NftOwnable} from "./NftOwnable.sol";
9
+ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
10
+ import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
11
+ import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
9
12
  import {UpgradableProxyWithAdmin} from "./UpgradableProxyWithAdmin.sol";
10
- import {IVersionable} from "./IVersionable.sol";
13
+ import {Version, VersionLib} from "../types/Version.sol";
11
14
 
12
15
  /// @dev manages proxy deployments for upgradable contracs of type IVersionable
13
- contract ProxyManager is Ownable {
16
+ contract ProxyManager is
17
+ NftOwnable
18
+ {
19
+
20
+ struct VersionInfo {
21
+ Version version;
22
+ address implementation;
23
+ address activatedBy;
24
+ Timestamp activatedAt;
25
+ Blocknumber activatedIn;
26
+ }
27
+
28
+ event LogProxyManagerVersionableDeployed(address indexed proxy, address initialImplementation);
29
+ event LogProxyManagerVersionableUpgraded(address indexed proxy, address upgradedImplementation);
14
30
 
15
- event LogProxyDeployed(address indexed proxy, address initialImplementation);
16
- event LogProxyDeployedWithSalt(address indexed proxy, address initialImplementation);
17
- event LogProxyUpgraded(address indexed proxy, address upgradedImplementation);
31
+ error ErrorProxyManagerAlreadyDeployed();
32
+ error ErrorProxyManagerNotYetDeployed();
18
33
 
19
- error ErrorAlreadyDeployed();
20
- error ErrorAlreadyDeployedWithSalt();
21
- error ErrorNotYetDeployed();
34
+ error ErrorProxyManagerZeroVersion();
35
+ error ErrorProxyManagerNextVersionNotIncreasing(Version nextVersion);
22
36
 
23
- UpgradableProxyWithAdmin private _proxy;
24
- bool private _isDeployed;
37
+ UpgradableProxyWithAdmin internal _proxy;
38
+
39
+ // state to keep version history
40
+ mapping(Version version => VersionInfo info) _versionHistory;
41
+ Version [] _versions;
25
42
 
26
43
  /// @dev only used to capture proxy owner
27
- constructor()
28
- Ownable(msg.sender)
29
- { }
44
+ constructor(address registry)
45
+ {
46
+ initializeProxyManager(registry);
47
+ }
30
48
 
31
- /// @dev deploy initial contract
32
- function deploy(address initialImplementation, bytes memory initializationData)
49
+ function initializeProxyManager(address registry)
33
50
  public
34
- onlyOwner()
35
- returns (IVersionable versionable)
51
+ initializer()
36
52
  {
37
- if (_isDeployed) { revert ErrorAlreadyDeployed(); }
38
-
39
- address currentProxyOwner = owner(); // used by implementation
40
- address initialProxyAdminOwner = address(this); // used by proxy
41
- bytes memory data = getDeployData(initialImplementation, currentProxyOwner, initializationData);
42
-
43
- _proxy = new UpgradableProxyWithAdmin(
44
- initialImplementation,
45
- initialProxyAdminOwner,
46
- data
47
- );
48
-
49
- _isDeployed = true;
50
- versionable = IVersionable(address(_proxy));
51
-
52
- emit LogProxyDeployed(address(_proxy), initialImplementation);
53
+ initializeNftOwnable(msg.sender, registry);
53
54
  }
54
55
 
55
- function deployWithSalt(address initialImplementation, bytes memory initializationData, bytes32 salt)
56
+ /// @dev deploy initial contract
57
+ function deploy(address initialImplementation, bytes memory initializationData)
56
58
  public
59
+ virtual
57
60
  onlyOwner()
58
61
  returns (IVersionable versionable)
59
62
  {
60
- if (_isDeployed) { revert ErrorAlreadyDeployedWithSalt(); }
63
+ if (_versions.length > 0) {
64
+ revert ErrorProxyManagerAlreadyDeployed();
65
+ }
61
66
 
62
- address currentProxyOwner = owner(); // used by implementation
67
+ address currentProxyOwner = getOwner(); // used by implementation
63
68
  address initialProxyAdminOwner = address(this); // used by proxy
64
- bytes memory data = getDeployData(initialImplementation, currentProxyOwner, initializationData);
65
-
66
- // via create2
67
- _proxy = new UpgradableProxyWithAdmin{salt: salt}(
69
+
70
+ _proxy = new UpgradableProxyWithAdmin(
68
71
  initialImplementation,
69
72
  initialProxyAdminOwner,
70
- data
73
+ getDeployData(currentProxyOwner, initializationData)
71
74
  );
72
75
 
73
- _isDeployed = true;
74
76
  versionable = IVersionable(address(_proxy));
77
+ _updateVersionHistory(versionable.getVersion(), initialImplementation, currentProxyOwner);
75
78
 
76
- emit LogProxyDeployedWithSalt(address(_proxy), initialImplementation);
79
+ emit LogProxyManagerVersionableDeployed(address(_proxy), initialImplementation);
77
80
  }
78
81
 
79
82
  /// @dev upgrade existing contract
@@ -83,33 +86,84 @@ contract ProxyManager is Ownable {
83
86
  onlyOwner()
84
87
  returns (IVersionable versionable)
85
88
  {
86
- if (!_isDeployed) { revert ErrorNotYetDeployed(); }
89
+ if (_versions.length == 0) {
90
+ revert ErrorProxyManagerNotYetDeployed();
91
+ }
87
92
 
88
- address currentProxyOwner = owner();
89
- ProxyAdmin proxyAdmin = getProxyAdmin();
93
+ address currentProxyOwner = getOwner();
94
+ ProxyAdmin proxyAdmin = getProxy().getProxyAdmin();
90
95
  ITransparentUpgradeableProxy proxy = ITransparentUpgradeableProxy(address(_proxy));
91
- bytes memory data = getUpgradeData(newImplementation, currentProxyOwner, upgradeData);
92
96
 
93
97
  proxyAdmin.upgradeAndCall(
94
98
  proxy,
95
99
  newImplementation,
96
- data);
100
+ getUpgradeData(upgradeData));
97
101
 
98
102
  versionable = IVersionable(address(_proxy));
103
+ _updateVersionHistory(versionable.getVersion(), newImplementation, currentProxyOwner);
104
+
105
+ emit LogProxyManagerVersionableUpgraded(address(_proxy), newImplementation);
106
+
107
+ }
99
108
 
100
- emit LogProxyUpgraded(address(_proxy), newImplementation);
109
+ function getDeployData(address proxyOwner, bytes memory deployData) public pure returns (bytes memory data) {
110
+ return abi.encodeWithSelector(
111
+ IVersionable.initializeVersionable.selector,
112
+ proxyOwner,
113
+ deployData);
114
+ }
115
+
116
+ function getUpgradeData(bytes memory upgradeData) public pure returns (bytes memory data) {
117
+ return abi.encodeWithSelector(
118
+ IVersionable.upgradeVersionable.selector,
119
+ upgradeData);
120
+ }
121
+
122
+ function getProxy() public returns (UpgradableProxyWithAdmin) {
123
+ return _proxy;
124
+ }
101
125
 
126
+ function getVersion() external view virtual returns(Version) {
127
+ return IVersionable(address(_proxy)).getVersion();
102
128
  }
103
129
 
104
- function getDeployData(address implementation, address proxyOwner, bytes memory deployData) public pure returns (bytes memory data) {
105
- return abi.encodeWithSelector(IVersionable.initialize.selector, implementation, proxyOwner, deployData);
130
+ function getVersionCount() external view returns(uint256) {
131
+ return _versions.length;
106
132
  }
107
133
 
108
- function getUpgradeData(address implementation, address proxyOwner, bytes memory upgradeData) public pure returns (bytes memory data) {
109
- return abi.encodeWithSelector(IVersionable.upgrade.selector, implementation, proxyOwner, upgradeData);
134
+ function getVersion(uint256 idx) external view returns(Version) {
135
+ return _versions[idx];
110
136
  }
111
137
 
112
- function getProxyAdmin() public returns (ProxyAdmin) {
113
- return _proxy.getProxyAdmin();
138
+ function getVersionInfo(Version _version) external view returns(VersionInfo memory) {
139
+ return _versionHistory[_version];
140
+ }
141
+
142
+ function _updateVersionHistory(
143
+ Version newVersion,
144
+ address implementation,
145
+ address activatedBy
146
+ )
147
+ private
148
+ {
149
+ if(newVersion == VersionLib.zeroVersion()) {
150
+ revert ErrorProxyManagerZeroVersion();
151
+ }
152
+
153
+ if(_versions.length > 0) {
154
+ if(newVersion.toInt() <= _versions[_versions.length-1].toInt()) {
155
+ revert ErrorProxyManagerNextVersionNotIncreasing(newVersion);
156
+ }
157
+ }
158
+
159
+ // update version history
160
+ _versions.push(newVersion);
161
+ _versionHistory[newVersion] = VersionInfo(
162
+ newVersion,
163
+ implementation,
164
+ activatedBy,
165
+ TimestampLib.blockTimestamp(),
166
+ blockNumber()
167
+ );
114
168
  }
115
169
  }
@@ -1,29 +1,25 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Initializable} from "@openzeppelin5/contracts/proxy/utils/Initializable.sol";
4
+ import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5
5
 
6
6
  import {NftId, zeroNftId} from "../types/NftId.sol";
7
+ import {NftOwnable} from "../shared/NftOwnable.sol";
7
8
  import {ObjectType} from "../types/ObjectType.sol";
8
9
 
9
10
  import {IRegistry} from "../registry/IRegistry.sol";
10
11
  import {IRegisterable} from "./IRegisterable.sol";
11
12
  import {Versionable} from "./Versionable.sol";
12
13
 
13
- import {ERC165} from "./ERC165.sol";
14
-
15
- abstract contract Registerable is
16
- ERC165,
17
- IRegisterable,
18
- Initializable
14
+ contract Registerable is
15
+ NftOwnable,
16
+ IRegisterable
19
17
  {
20
18
  // keccak256(abi.encode(uint256(keccak256("gif-next.contracts.shared.Registerable.sol")) - 1)) & ~bytes32(uint256(0xff));
21
19
  bytes32 public constant REGISTERABLE_LOCATION_V1 = 0x6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa300;
22
20
 
23
21
  struct RegisterableStorage {
24
- IRegistry _registry;
25
22
  NftId _parentNftId;
26
- address _initialOwner;
27
23
  ObjectType _objectType;
28
24
  bool _isInterceptor;
29
25
  bytes _data;
@@ -35,83 +31,44 @@ abstract contract Registerable is
35
31
  }
36
32
  }
37
33
 
38
- modifier onlyOwner() virtual {
39
- require(
40
- msg.sender == getOwner(),
41
- "ERROR:RGB-001:NOT_OWNER"
42
- );
43
- _;
44
- }
45
-
46
- function _initializeRegisterable(
34
+ function initializeRegisterable(
47
35
  address registryAddress,
48
36
  NftId parentNftId,
49
37
  ObjectType objectType,
50
38
  bool isInterceptor,
51
39
  address initialOwner,
52
- bytes memory data
40
+ bytes memory registryData // writeonly data that will saved in the object info record of the registry
53
41
  )
54
- internal
55
- //onlyInitializing//TODO uncomment when "fully" upgradeable
42
+ public
56
43
  virtual
44
+ onlyInitializing
57
45
  {
58
- require(
59
- registryAddress != address(0),
60
- "ERROR:RGB-010:REGISTRY_ZERO"
61
- );
62
-
63
- // TODO check parentNftId -> registry.isRegistered(parentNftId)
64
- // TODO check object-parent type pair -> registry.isValidTypeCombo() or something...verify with registry that setup will be able to register...
65
-
66
- IRegistry registry = IRegistry(registryAddress);
67
- require(
68
- registry.supportsInterface(type(IRegistry).interfaceId),
69
- "ERROR:RGB-011:NOT_REGISTRY"
70
- );
46
+ initializeNftOwnable(
47
+ initialOwner,
48
+ registryAddress);
71
49
 
72
50
  RegisterableStorage storage $ = _getRegisterableStorage();
73
- $._registry = registry;
74
51
  $._parentNftId = parentNftId;
75
52
  $._objectType = objectType;
76
53
  $._isInterceptor = isInterceptor;
77
- $._initialOwner = initialOwner;// not msg.sender because called in proxy constructor where msg.sender is proxy deployer
78
- $._data = data;
79
-
80
- _registerInterface(type(Registerable).interfaceId);
54
+ $._data = registryData;
81
55
  }
82
56
 
83
- // from IOwnable
84
- function getOwner() public view virtual returns (address) {
85
- return _getRegisterableStorage()._registry.ownerOf(address(this));
86
- }
87
-
88
- // from IRegisterable
89
- function getRegistry() public view virtual returns (IRegistry registry) {
90
- return _getRegisterableStorage()._registry;
91
- }
92
-
93
- function getNftId() public view virtual returns (NftId nftId) {
94
- return _getRegisterableStorage()._registry.getNftId(address(this));
95
- }
96
57
 
97
58
  function getInitialInfo()
98
59
  public
99
60
  view
100
61
  virtual
101
- returns (IRegistry.ObjectInfo memory, bytes memory data)
62
+ returns (IRegistry.ObjectInfo memory info)
102
63
  {
103
- RegisterableStorage storage $ = _getRegisterableStorage();
104
- return (
105
- IRegistry.ObjectInfo(
106
- zeroNftId(),
107
- $._parentNftId,
108
- $._objectType,
109
- $._isInterceptor,
110
- address(this),
111
- $._initialOwner,
112
- $._data
113
- ),
114
- bytes("")
115
- );
64
+ RegisterableStorage memory $ = _getRegisterableStorage();
65
+ info = IRegistry.ObjectInfo(
66
+ zeroNftId(),
67
+ $._parentNftId,
68
+ $._objectType,
69
+ $._isInterceptor,
70
+ address(this),
71
+ getOwner(),
72
+ $._data);
116
73
  }
117
74
  }