@etherisc/gif-next 0.0.2-e1e92ab-754 → 0.0.2-e26c262-698

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. package/README.md +232 -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 +954 -192
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → components/IComponent.sol/IComponent.json} +192 -168
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +719 -27
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +773 -127
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +556 -33
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +906 -266
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +702 -159
  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 +1415 -1008
  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 +2129 -1194
  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/{InstanceBase.sol/InstanceBase.json → ComponentService.sol/ComponentService.json} +203 -195
  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/{pool/IPoolModule.sol/IPool.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 +1341 -239
  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} +150 -207
  87. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  88. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +727 -160
  89. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  90. package/artifacts/contracts/instance/{base/ServiceBase.sol/ServiceBase.json → service/IPolicyService.sol/IPolicyService.json} +263 -191
  91. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +84 -217
  93. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +47 -414
  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 +314 -243
  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 +242 -533
  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 +373 -61
  111. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  112. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +234 -216
  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 +333 -188
  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 +229 -297
  121. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +312 -132
  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 +1 -1
  128. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  129. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  130. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  132. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  133. package/artifacts/contracts/{instance/module/component/IComponent.sol/IComponentModule.json → shared/IPolicyHolder.sol/IPolicyHolder.json} +69 -57
  134. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  135. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  136. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  137. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  138. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  139. package/artifacts/contracts/{components/IBaseComponent.sol/IBaseComponent.json → shared/IService.sol/IService.json} +59 -44
  140. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  141. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  142. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  143. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  144. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  145. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  146. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  147. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  148. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  149. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  150. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  151. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  152. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  153. package/artifacts/contracts/{instance/base/IService.sol/IService.json → shared/Service.sol/Service.json} +155 -151
  154. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  155. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  156. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  157. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  158. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  159. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  160. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  161. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  162. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  164. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  166. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestService.sol/TestService.json +148 -211
  168. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  171. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -174
  173. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  174. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  175. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  177. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  179. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  180. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  182. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/Fee.sol/FeeLib.json +2 -2
  184. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  185. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  186. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  188. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  189. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  190. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  192. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  194. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  196. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +142 -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/Seconds.sol/SecondsLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  204. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  206. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  208. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  210. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  212. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  214. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  215. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  216. package/contracts/components/Component.sol +251 -0
  217. package/contracts/components/Distribution.sol +204 -79
  218. package/contracts/components/IComponent.sol +74 -0
  219. package/contracts/components/IDistributionComponent.sol +43 -18
  220. package/contracts/components/IPoolComponent.sol +88 -39
  221. package/contracts/components/IProductComponent.sol +12 -9
  222. package/contracts/components/Pool.sol +216 -163
  223. package/contracts/components/Product.sol +133 -139
  224. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  225. package/contracts/instance/BundleManager.sol +127 -0
  226. package/contracts/instance/Cloneable.sol +51 -0
  227. package/contracts/instance/IInstance.sol +85 -39
  228. package/contracts/instance/IInstanceService.sol +72 -0
  229. package/contracts/instance/Instance.sol +310 -66
  230. package/contracts/instance/InstanceAccessManager.sol +522 -0
  231. package/contracts/instance/InstanceReader.sol +290 -0
  232. package/contracts/instance/InstanceService.sol +495 -0
  233. package/contracts/instance/InstanceServiceManager.sol +54 -0
  234. package/contracts/instance/ObjectManager.sol +82 -0
  235. package/contracts/instance/base/ComponentService.sol +134 -0
  236. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  237. package/contracts/instance/base/ILifecycle.sol +3 -3
  238. package/contracts/instance/base/KeyValueStore.sol +52 -38
  239. package/contracts/instance/base/Lifecycle.sol +12 -3
  240. package/contracts/instance/module/IAccess.sol +54 -0
  241. package/contracts/instance/module/IBundle.sol +21 -0
  242. package/contracts/instance/module/IComponents.sol +35 -0
  243. package/contracts/instance/module/IDistribution.sol +41 -0
  244. package/contracts/instance/module/IPolicy.sol +72 -0
  245. package/contracts/instance/module/IRisk.sol +11 -0
  246. package/contracts/instance/module/ISetup.sol +33 -0
  247. package/contracts/instance/module/ITreasury.sol +23 -0
  248. package/contracts/instance/service/ApplicationService.sol +350 -0
  249. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  250. package/contracts/instance/service/BundleService.sol +336 -0
  251. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  252. package/contracts/instance/service/ClaimService.sol +151 -0
  253. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  254. package/contracts/instance/service/DistributionService.sol +435 -22
  255. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  256. package/contracts/instance/service/IApplicationService.sol +82 -0
  257. package/contracts/instance/service/IBundleService.sol +62 -0
  258. package/contracts/instance/service/IClaimService.sol +61 -0
  259. package/contracts/instance/service/IDistributionService.sol +87 -1
  260. package/contracts/instance/service/IPolicyService.sol +72 -0
  261. package/contracts/instance/service/IPoolService.sol +22 -24
  262. package/contracts/instance/service/IProductService.sol +9 -76
  263. package/contracts/instance/service/PolicyService.sol +403 -0
  264. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  265. package/contracts/instance/service/PoolService.sol +181 -110
  266. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  267. package/contracts/instance/service/ProductService.sol +163 -432
  268. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  269. package/contracts/registry/ChainNft.sol +47 -24
  270. package/contracts/registry/IRegistry.sol +52 -8
  271. package/contracts/registry/IRegistryService.sol +52 -20
  272. package/contracts/registry/ITransferInterceptor.sol +1 -0
  273. package/contracts/registry/Registry.sol +277 -236
  274. package/contracts/registry/RegistryAccessManager.sol +216 -0
  275. package/contracts/registry/RegistryService.sol +113 -271
  276. package/contracts/registry/RegistryServiceManager.sol +24 -25
  277. package/contracts/registry/ReleaseManager.sol +322 -0
  278. package/contracts/registry/TokenRegistry.sol +116 -0
  279. package/contracts/shared/ERC165.sol +14 -8
  280. package/contracts/shared/INftOwnable.sol +11 -10
  281. package/contracts/shared/IPolicyHolder.sol +26 -0
  282. package/contracts/shared/IRegisterable.sol +4 -6
  283. package/contracts/shared/IRegistryLinked.sol +12 -0
  284. package/contracts/shared/IService.sol +18 -0
  285. package/contracts/shared/IVersionable.sol +4 -47
  286. package/contracts/shared/NftOwnable.sol +67 -83
  287. package/contracts/shared/PolicyHolder.sol +81 -0
  288. package/contracts/shared/ProxyManager.sol +100 -25
  289. package/contracts/shared/Registerable.sol +16 -31
  290. package/contracts/shared/RegistryLinked.sol +48 -0
  291. package/contracts/shared/Service.sol +58 -0
  292. package/contracts/shared/TokenHandler.sol +33 -0
  293. package/contracts/shared/Versionable.sol +4 -92
  294. package/contracts/test/TestRegisterable.sol +1 -1
  295. package/contracts/test/TestRoleId.sol +1 -1
  296. package/contracts/test/TestService.sol +6 -7
  297. package/contracts/types/Blocknumber.sol +1 -0
  298. package/contracts/types/ClaimId.sol +52 -0
  299. package/contracts/types/DistributorType.sol +55 -0
  300. package/contracts/types/Fee.sol +1 -0
  301. package/contracts/types/Key32.sol +8 -3
  302. package/contracts/types/NftId.sol +8 -0
  303. package/contracts/types/NftIdSet.sol +26 -24
  304. package/contracts/types/NumberId.sol +52 -0
  305. package/contracts/types/ObjectType.sol +40 -14
  306. package/contracts/types/PayoutId.sol +54 -0
  307. package/contracts/types/Referral.sol +89 -0
  308. package/contracts/types/RoleId.sol +67 -15
  309. package/contracts/types/Seconds.sol +54 -0
  310. package/contracts/types/StateId.sol +6 -1
  311. package/contracts/types/Timestamp.sol +17 -13
  312. package/contracts/types/UFixed.sol +1 -0
  313. package/contracts/types/Version.sol +5 -1
  314. package/package.json +3 -3
  315. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  316. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -301
  317. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  318. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  320. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  322. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  324. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  326. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  328. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  329. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  330. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  332. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  334. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  337. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  339. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  341. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  343. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  344. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  345. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  346. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  347. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  348. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  349. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  350. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  351. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  352. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  353. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  354. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  355. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  356. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  357. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  358. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  359. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  360. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  361. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  362. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  363. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  364. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  365. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  366. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -117
  367. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  368. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  369. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  370. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  371. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  372. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  373. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  374. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  375. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  376. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  377. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -271
  378. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  379. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -271
  380. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  381. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  382. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -164
  383. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  384. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
  385. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  386. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  387. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  388. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  389. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  390. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  391. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  392. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -638
  393. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  394. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  395. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  396. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -638
  397. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  398. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  399. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  400. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  401. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -457
  402. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  403. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -557
  404. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  405. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -716
  406. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  407. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -744
  408. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  409. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  410. package/contracts/components/BaseComponent.sol +0 -79
  411. package/contracts/components/IBaseComponent.sol +0 -19
  412. package/contracts/experiment/errors/Require.sol +0 -38
  413. package/contracts/experiment/errors/Revert.sol +0 -44
  414. package/contracts/experiment/inheritance/A.sol +0 -53
  415. package/contracts/experiment/inheritance/B.sol +0 -28
  416. package/contracts/experiment/inheritance/C.sol +0 -34
  417. package/contracts/experiment/inheritance/IA.sol +0 -13
  418. package/contracts/experiment/inheritance/IB.sol +0 -10
  419. package/contracts/experiment/inheritance/IC.sol +0 -12
  420. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  421. package/contracts/experiment/statemachine/ISM.sol +0 -25
  422. package/contracts/experiment/statemachine/SM.sol +0 -57
  423. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  424. package/contracts/experiment/types/TypeA.sol +0 -47
  425. package/contracts/experiment/types/TypeB.sol +0 -29
  426. package/contracts/instance/IInstanceLinked.sol +0 -8
  427. package/contracts/instance/base/ComponentServiceBase.sol +0 -49
  428. package/contracts/instance/base/IInstanceBase.sol +0 -23
  429. package/contracts/instance/base/IService.sol +0 -15
  430. package/contracts/instance/base/InstanceBase.sol +0 -89
  431. package/contracts/instance/base/ModuleBase.sol +0 -57
  432. package/contracts/instance/base/ServiceBase.sol +0 -44
  433. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  434. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  435. package/contracts/instance/module/component/ComponentModule.sol +0 -71
  436. package/contracts/instance/module/component/IComponent.sol +0 -28
  437. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  438. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  439. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  440. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  441. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  442. package/contracts/instance/module/pool/PoolModule.sol +0 -95
  443. package/contracts/instance/module/risk/IRisk.sol +0 -26
  444. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  445. package/contracts/instance/module/treasury/ITreasury.sol +0 -84
  446. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  447. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
  448. package/contracts/instance/service/ComponentOwnerService.sol +0 -315
  449. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  450. package/contracts/registry/IChainNft.sol +0 -22
  451. package/contracts/test/TestDistribution.sol +0 -22
  452. package/contracts/test/TestPool.sol +0 -27
  453. package/contracts/test/TestProduct.sol +0 -74
  454. package/contracts/types/ReferralId.sol +0 -48
@@ -0,0 +1,134 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IComponent} from "../../components/IComponent.sol";
5
+ import {IRegistry} from "../../registry/IRegistry.sol";
6
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
7
+ import {IInstance} from "../../instance/IInstance.sol";
8
+ import {IAccess} from "../module/IAccess.sol";
9
+ import {ObjectType, INSTANCE, REGISTRY} from "../../types/ObjectType.sol";
10
+ import {NftId} from "../../types/NftId.sol";
11
+ import {RoleId} from "../../types/RoleId.sol";
12
+
13
+ import {Service} from "../../shared/Service.sol";
14
+ import {InstanceService} from "../InstanceService.sol";
15
+ import {InstanceAccessManager} from "../InstanceAccessManager.sol";
16
+
17
+ abstract contract ComponentService is Service {
18
+
19
+ error ErrorComponentServiceAlreadyRegistered(address component, NftId nftId);
20
+ error ErrorComponentServiceNotComponent(address component);
21
+ error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
22
+ error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
23
+ error ErrorComponentServiceExpectedRoleMissing(NftId instanceNftId, RoleId requiredRole, address sender);
24
+ error ErrorComponentServiceComponentLocked(address component);
25
+
26
+ /// @dev modifier to check if caller is a registered service
27
+ modifier onlyService() {
28
+ address caller = msg.sender;
29
+ require(getRegistry().isRegisteredService(caller), "ERROR_NOT_SERVICE");
30
+ _;
31
+ }
32
+
33
+ // view functions
34
+
35
+ function getRegistryService() public view virtual returns (IRegistryService) {
36
+ address service = getRegistry().getServiceAddress(REGISTRY(), getMajorVersion());
37
+ return IRegistryService(service);
38
+ }
39
+
40
+ function getInstanceService() public view returns (InstanceService) {
41
+ address service = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
42
+ return InstanceService(service);
43
+ }
44
+
45
+ // internal functions
46
+ function _checkComponentForRegistration(
47
+ address componentAddress,
48
+ ObjectType requiredType,
49
+ RoleId requiredRole
50
+ )
51
+ internal
52
+ view
53
+ returns (
54
+ IComponent component,
55
+ address owner,
56
+ IInstance instance,
57
+ NftId instanceNftId
58
+ )
59
+ {
60
+ // component may only be registerd by initial owner of component
61
+ owner = msg.sender;
62
+
63
+ // check component has not already been registerd
64
+ NftId compoentNftId = getRegistry().getNftId(componentAddress);
65
+ if(compoentNftId.gtz()) {
66
+ revert ErrorComponentServiceAlreadyRegistered(componentAddress, compoentNftId);
67
+ }
68
+
69
+ // check this is a component
70
+ component = IComponent(componentAddress);
71
+ if(!component.supportsInterface(type(IComponent).interfaceId)) {
72
+ revert ErrorComponentServiceNotComponent(componentAddress);
73
+ }
74
+
75
+ // check component is of required type
76
+ IRegistry.ObjectInfo memory componentInfo = component.getInitialInfo();
77
+ if(componentInfo.objectType != requiredType) {
78
+ revert ErrorComponentServiceInvalidType(componentAddress, requiredType, componentInfo.objectType);
79
+ }
80
+
81
+ // check msg.sender is component owner
82
+ address initialOwner = componentInfo.initialOwner;
83
+ if(owner != initialOwner) {
84
+ revert ErrorComponentServiceSenderNotOwner(componentAddress, componentInfo.initialOwner, owner);
85
+ }
86
+
87
+ // check instance has assigned required role to owner
88
+ instanceNftId = componentInfo.parentNftId;
89
+ instance = _getInstance(instanceNftId);
90
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
91
+ bool hasRole = accessManager.hasRole(
92
+ requiredRole,
93
+ owner);
94
+
95
+ if(!hasRole) {
96
+ revert ErrorComponentServiceExpectedRoleMissing(instanceNftId, requiredRole, owner);
97
+ }
98
+ }
99
+
100
+ // internal view functions
101
+
102
+ function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
103
+ IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
104
+ return IInstance(instanceInfo.objectAddress);
105
+ }
106
+
107
+ function _getAndVerifyComponentInfoAndInstance(
108
+ //address component,
109
+ ObjectType expectedType
110
+ )
111
+ internal
112
+ view
113
+ returns(
114
+ IRegistry.ObjectInfo memory info,
115
+ IInstance instance
116
+ )
117
+ {
118
+ IRegistry registry = getRegistry();
119
+ //TODO redundant check -> just check type
120
+ //NftId componentNftId = registry.getNftId(component);
121
+ //require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
122
+
123
+ info = registry.getObjectInfo(msg.sender);
124
+ require(info.objectType == expectedType, "OBJECT_TYPE_INVALID");
125
+
126
+ address instanceAddress = registry.getObjectInfo(info.parentNftId).objectAddress;
127
+ instance = IInstance(instanceAddress);
128
+
129
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
130
+ if (accessManager.isTargetLocked(info.objectAddress)) {
131
+ revert IAccess.ErrorIAccessTargetLocked(info.objectAddress);
132
+ }
133
+ }
134
+ }
@@ -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, blockBlocknumber, zeroBlocknumber} from "../../types/Blocknumber.sol";
5
5
  import {Key32, KeyId} from "../../types/Key32.sol";
@@ -9,13 +9,9 @@ import {StateId} from "../../types/StateId.sol";
9
9
 
10
10
  import {ILifecycle} from "./ILifecycle.sol";
11
11
 
12
+ // TODO remove - internal only?
12
13
  interface IKeyValueStore is ILifecycle {
13
14
 
14
- struct Key {
15
- ObjectType objectType;
16
- KeyId id;
17
- }
18
-
19
15
  struct Value {
20
16
  Metadata metadata;
21
17
  bytes data;
@@ -24,20 +20,24 @@ interface IKeyValueStore is ILifecycle {
24
20
  struct Metadata {
25
21
  ObjectType objectType;
26
22
  StateId state;
23
+ // TODO updatedBy needs concept that says what value should go here
24
+ // eg account outside gif objects that initiated the tx
25
+ // implies the caller needs to be propagated through all calls up to key values store itself
26
+ // to always have the instance address there doesn't seem to make sense
27
27
  address updatedBy;
28
28
  Blocknumber updatedIn;
29
29
  Blocknumber createdIn;
30
30
  }
31
31
 
32
- event LogInfoCreated(Key key, StateId state, address createdBy, address txOrigin);
33
- event LogInfoUpdated(Key key, StateId state, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
34
- event LogStateUpdated(Key key, StateId stateOld, StateId stateNew, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
32
+ event LogInfoCreated(ObjectType objectType, KeyId keyId, StateId state, address createdBy, address txOrigin);
33
+ event LogInfoUpdated(ObjectType objectType, KeyId keyId, StateId state, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
34
+ event LogStateUpdated(ObjectType objectType, KeyId keyId, StateId stateOld, StateId stateNew, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
35
35
 
36
36
  // generic state changing functions
37
- function create(Key32 key, ObjectType objectType, bytes memory data) external;
38
- function update(Key32 key, StateId state, bytes memory data) external;
39
- function updateData(Key32 key, bytes memory data) external;
40
- function updateState(Key32 key, StateId state) external;
37
+ // function create(Key32 key, bytes memory data) external;
38
+ // function update(Key32 key, bytes memory data, StateId state) external;
39
+ // function updateData(Key32 key, bytes memory data) external;
40
+ // function updateState(Key32 key, StateId state) external;
41
41
 
42
42
  function exists(Key32 key) external view returns (bool);
43
43
  function get(Key32 key) external view returns (Value memory value);
@@ -46,5 +46,4 @@ interface IKeyValueStore is ILifecycle {
46
46
  function getState(Key32 key) external view returns (StateId state);
47
47
 
48
48
  function toKey32(ObjectType objectType, KeyId id) external pure returns(Key32);
49
- function toKey(Key32 key32) external pure returns(Key memory key);
50
49
  }
@@ -1,9 +1,9 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {ObjectType} from "../../types/ObjectType.sol";
5
- import {StateId, toStateId, zeroStateId} from "../../types/StateId.sol";
6
4
  import {NftId} from "../../types/NftId.sol";
5
+ import {ObjectType} from "../../types/ObjectType.sol";
6
+ import {StateId} from "../../types/StateId.sol";
7
7
 
8
8
  interface ILifecycle {
9
9
 
@@ -1,12 +1,12 @@
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, blockBlocknumber, zeroBlocknumber} from "../../types/Blocknumber.sol";
5
5
  import {Key32, KeyId, Key32Lib} from "../../types/Key32.sol";
6
6
  import {NftId} from "../../types/NftId.sol";
7
7
  import {ObjectType} from "../../types/ObjectType.sol";
8
8
  import {StateId, ACTIVE} from "../../types/StateId.sol";
9
- import {Timestamp, blockTimestamp, zeroTimestamp} from "../../types/Timestamp.sol";
9
+ import {Timestamp, TimestampLib} from "../../types/Timestamp.sol";
10
10
 
11
11
  import {Lifecycle} from "./Lifecycle.sol";
12
12
  import {IKeyValueStore} from "./IKeyValueStore.sol";
@@ -14,27 +14,23 @@ import {IKeyValueStore} from "./IKeyValueStore.sol";
14
14
  contract KeyValueStore is Lifecycle, IKeyValueStore {
15
15
 
16
16
  mapping(Key32 key32 => Value value) private _value;
17
- address private _owner;
18
17
 
19
- modifier onlyOwner() {
20
- require(
21
- msg.sender == _owner,
22
- "ERROR:KVS-001:NOT_OWNER");
23
- _;
24
- }
25
-
26
- constructor() {
27
- _owner = msg.sender;
18
+ function create(
19
+ Key32 key32,
20
+ bytes memory data
21
+ )
22
+ internal
23
+ {
24
+ _create(key32, data);
28
25
  }
29
26
 
30
- function create(
27
+ function _create(
31
28
  Key32 key32,
32
- ObjectType objectType,
33
29
  bytes memory data
34
30
  )
35
- public
36
- onlyOwner
31
+ internal
37
32
  {
33
+ ObjectType objectType = key32.toObjectType();
38
34
  require(objectType.gtz(), "ERROR:KVS-010:TYPE_UNDEFINED");
39
35
 
40
36
  Metadata storage metadata = _value[key32].metadata;
@@ -55,12 +51,25 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
55
51
  _value[key32].data = data;
56
52
 
57
53
  // solhint-disable-next-line avoid-tx-origin
58
- emit LogInfoCreated(toKey(key32), initialState, createdBy, tx.origin);
54
+ emit LogInfoCreated(key32.toObjectType(), key32.toKeyId(), initialState, createdBy, tx.origin);
55
+ }
56
+
57
+ function update(
58
+ Key32 key32,
59
+ bytes memory data,
60
+ StateId state
61
+ )
62
+ internal
63
+ {
64
+ _update(key32, data, state);
59
65
  }
60
66
 
61
- function update(Key32 key32, StateId state, bytes memory data)
62
- public
63
- onlyOwner
67
+ function _update(
68
+ Key32 key32,
69
+ bytes memory data,
70
+ StateId state
71
+ )
72
+ internal
64
73
  {
65
74
  require(state.gtz(), "ERROR:KVS-020:STATE_UNDEFINED");
66
75
  Metadata storage metadata = _value[key32].metadata;
@@ -78,16 +87,20 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
78
87
  metadata.updatedIn = blockBlocknumber();
79
88
 
80
89
  // create log entries
81
- Key memory key = toKey(key32);
82
- // solhint-disable-next-line avoid-tx-origin
83
- emit LogStateUpdated(key, state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
84
- // solhint-disable-next-line avoid-tx-origin
85
- emit LogInfoUpdated(key, state, updatedBy, tx.origin, lastUpdatedIn);
90
+ // solhint-disable avoid-tx-origin
91
+ emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), stateOld, state, updatedBy, tx.origin, lastUpdatedIn);
92
+ emit LogInfoUpdated(key32.toObjectType(), key32.toKeyId(), state, updatedBy, tx.origin, lastUpdatedIn);
93
+ // solhing-enable
86
94
  }
87
95
 
88
96
  function updateData(Key32 key32, bytes memory data)
89
- public
90
- onlyOwner
97
+ internal
98
+ {
99
+ _updateData(key32, data);
100
+ }
101
+
102
+ function _updateData(Key32 key32, bytes memory data)
103
+ internal
91
104
  {
92
105
  Metadata storage metadata = _value[key32].metadata;
93
106
  StateId state = metadata.state;
@@ -103,20 +116,27 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
103
116
  metadata.updatedIn = blockBlocknumber();
104
117
 
105
118
  // create log entry
106
- Key memory key = toKey(key32);
107
119
  // solhint-disable-next-line avoid-tx-origin
108
- emit LogInfoUpdated(key, state, updatedBy, tx.origin, lastUpdatedIn);
120
+ emit LogInfoUpdated(key32.toObjectType(), key32.toKeyId(), state, updatedBy, tx.origin, lastUpdatedIn);
109
121
  }
110
122
 
111
123
  function updateState(Key32 key32, StateId state)
112
- public
113
- onlyOwner
124
+ internal
125
+ {
126
+ _updateState(key32, state);
127
+ }
128
+
129
+ function _updateState(Key32 key32, StateId state)
130
+ internal
114
131
  {
115
132
  require(state.gtz(), "ERROR:KVS-040:STATE_UNDEFINED");
116
133
  Metadata storage metadata = _value[key32].metadata;
117
134
  StateId stateOld = metadata.state;
118
135
  require(stateOld.gtz(), "ERROR:KVS-041:NOT_EXISTING");
119
136
 
137
+ // ensure state transistion is valid
138
+ checkTransition(metadata.objectType, stateOld, state);
139
+
120
140
  // update metadata (and state)
121
141
  address updatedBy = msg.sender;
122
142
  Blocknumber lastUpdatedIn = metadata.updatedIn;
@@ -125,9 +145,8 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
125
145
  metadata.updatedIn = blockBlocknumber();
126
146
 
127
147
  // create log entry
128
- Key memory key = toKey(key32);
129
148
  // solhint-disable-next-line avoid-tx-origin
130
- emit LogStateUpdated(key, state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
149
+ emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), stateOld, state, updatedBy, tx.origin, lastUpdatedIn);
131
150
  }
132
151
 
133
152
  function exists(Key32 key32) public view returns (bool) {
@@ -153,9 +172,4 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
153
172
  function toKey32(ObjectType objectType, KeyId id) external pure override returns(Key32) {
154
173
  return Key32Lib.toKey32(objectType, id);
155
174
  }
156
-
157
- function toKey(Key32 key32) public pure override returns (Key memory key) {
158
- (ObjectType objectType, KeyId id) = key32.toKey();
159
- return Key(objectType, id);
160
- }
161
175
  }
@@ -1,19 +1,27 @@
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} from "../../types/NftId.sol";
5
7
  import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK} from "../../types/ObjectType.sol";
6
8
  import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, UNDERWRITTEN, REVOKED, DECLINED} from "../../types/StateId.sol";
7
9
  import {ILifecycle} from "./ILifecycle.sol";
8
10
 
9
- contract Lifecycle is ILifecycle {
11
+ contract Lifecycle is
12
+ Initializable,
13
+ ILifecycle
14
+ {
10
15
  mapping(ObjectType objectType => StateId initialState)
11
16
  private _initialState;
12
17
 
13
18
  mapping(ObjectType objectType => mapping(StateId stateFrom => mapping(StateId stateTo => bool isValid)))
14
19
  private _isValidTransition;
15
20
 
16
- constructor() {
21
+ function initializeLifecycle()
22
+ public
23
+ onlyInitializing
24
+ {
17
25
  _setupBundleLifecycle();
18
26
  _setupComponentLifecycle();
19
27
  _setupPolicyLifecycle();
@@ -78,6 +86,7 @@ contract Lifecycle is ILifecycle {
78
86
  function _setupBundleLifecycle() internal {
79
87
  _initialState[BUNDLE()] = ACTIVE();
80
88
  _isValidTransition[BUNDLE()][ACTIVE()][PAUSED()] = true;
89
+ _isValidTransition[BUNDLE()][ACTIVE()][CLOSED()] = true;
81
90
  _isValidTransition[BUNDLE()][PAUSED()][ACTIVE()] = true;
82
91
  _isValidTransition[BUNDLE()][PAUSED()][CLOSED()] = true;
83
92
  }
@@ -0,0 +1,54 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
5
+
6
+ import {RoleId} from "../../types/RoleId.sol";
7
+ import {Timestamp} from "../../types/Timestamp.sol";
8
+
9
+ interface IAccess {
10
+
11
+ enum Type {
12
+ NotInitialized,
13
+ Core,
14
+ Gif,
15
+ Custom
16
+ }
17
+
18
+ struct RoleInfo {
19
+ ShortString name;
20
+ Type rtype;
21
+ //bool isLocked;
22
+ RoleId admin;
23
+ Timestamp createdAt;
24
+ Timestamp updatedAt;
25
+ }
26
+
27
+ struct TargetInfo {
28
+ ShortString name;
29
+ Type ttype;
30
+ bool isLocked;
31
+ Timestamp createdAt;
32
+ Timestamp updatedAt;
33
+ }
34
+
35
+ error ErrorIAccessCallerIsNotRoleAdmin(address caller, RoleId roleId);
36
+
37
+ error ErrorIAccessRoleIdDoesNotExist(RoleId roleId);
38
+ error ErrorIAccessRoleIdTooBig(RoleId roleId);
39
+ error ErrorIAccessRoleIdTooSmall(RoleId roleId);
40
+ error ErrorIAccessRoleIdExists(RoleId roleId);
41
+ error ErrorIAccessRoleNameEmpty(RoleId roleId);
42
+ error ErrorIAccessRoleNameExists(RoleId roleId, RoleId existingRoleId, ShortString name);
43
+ error ErrorIAccessRoleTypeInvalid(RoleId roleId, Type rtype);
44
+
45
+ error ErrorIAccessTargetAddressZero();
46
+ error ErrorIAccessTargetDoesNotExist(ShortString name);
47
+ error ErrorIAccessTargetExists(address target, ShortString name);
48
+ error ErrorIAccessTargetTypeInvalid(ShortString name, Type ttype);
49
+ error ErrorIAccessTargetNameEmpty(address target);
50
+ error ErrorIAccessTargetNameExists(address target, address existingTarget, ShortString name);
51
+ error ErrorIAccessTargetLocked(address target);
52
+ error ErrorIAccessTargetNotRegistered(address target);
53
+ error ErrorIAccessTargetAuthorityInvalid(address target, address targetAuthority);
54
+ }
@@ -0,0 +1,21 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {Fee} from "../../types/Fee.sol";
6
+ import {Seconds} from "../../types/Seconds.sol";
7
+ import {Timestamp} from "../../types/Timestamp.sol";
8
+
9
+ interface IBundle {
10
+ struct BundleInfo {
11
+ NftId poolNftId;
12
+ Fee fee; // bundle fee on net premium amounts
13
+ bytes filter; // required conditions for applications to be considered for collateralization by this bundle
14
+ uint256 capitalAmount; // net investment capital + net premiums - payouts
15
+ uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
16
+ uint256 balanceAmount; // total amount of funds: capitalAmount + fees (balance >= captial)
17
+ Seconds lifetime;
18
+ Timestamp expiredAt; // no new policies
19
+ Timestamp closedAt; // no open policies, locked amount = 0
20
+ }
21
+ }
@@ -0,0 +1,35 @@
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
+
6
+ import {Fee} from "../../types/Fee.sol";
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {RoleId} from "../../types/RoleId.sol";
9
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
10
+ import {UFixed} from "../../types/UFixed.sol";
11
+
12
+ interface IComponents {
13
+
14
+ struct ComponentInfo {
15
+ string name; // component name (needs to be unique per instance)
16
+ IERC20Metadata token;
17
+ TokenHandler tokenHandler;
18
+ address wallet;
19
+ bytes data; // will hold component type specific additional info (eg encoded pool info)
20
+ }
21
+
22
+ struct PoolInfo {
23
+ NftId productNftId; // the nft of the product this pool is linked to
24
+ RoleId bundleOwnerRole; // the required role for bundle owners
25
+ uint256 maxCapitalAmount; // max capital amount allowed for pool
26
+ bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
27
+ bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
28
+ bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
29
+ UFixed collateralizationLevel; // factor to calculate collateral for sum insurance (default 100%)
30
+ UFixed retentionLevel; // amount of collateral held in pool (default 100%)
31
+ Fee poolFee; // pool fee on net premium
32
+ Fee stakingFee; // pool fee on staked capital from investor
33
+ Fee performanceFee; // pool fee on profits from capital investors
34
+ }
35
+ }
@@ -0,0 +1,41 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {DistributorType} from "../../types/DistributorType.sol";
5
+ import {NftId} from "../../types/NftId.sol";
6
+ import {Timestamp} from "../../types/Timestamp.sol";
7
+ import {UFixed} from "../../types/UFixed.sol";
8
+
9
+ interface IDistribution {
10
+
11
+ struct DistributorTypeInfo {
12
+ string name;
13
+ UFixed minDiscountPercentage;
14
+ UFixed maxDiscountPercentage;
15
+ UFixed commissionPercentage;
16
+ uint32 maxReferralCount;
17
+ uint32 maxReferralLifetime;
18
+ bool allowSelfReferrals;
19
+ bool allowRenewals;
20
+ bytes data;
21
+ }
22
+
23
+ struct DistributorInfo {
24
+ DistributorType distributorType;
25
+ bool active;
26
+ bytes data;
27
+ uint256 sumCommisions;
28
+ uint256 numPoliciesSold;
29
+ }
30
+
31
+ struct ReferralInfo {
32
+ NftId distributorNftId;
33
+ string referralCode;
34
+ UFixed discountPercentage;
35
+ uint32 maxReferrals;
36
+ uint32 usedReferrals;
37
+ Timestamp expiryAt;
38
+ bytes data;
39
+ }
40
+
41
+ }
@@ -0,0 +1,72 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {ClaimId} from "../../types/ClaimId.sol";
6
+ import {ReferralId} from "../../types/Referral.sol";
7
+ import {RiskId} from "../../types/RiskId.sol";
8
+ import {Seconds} from "../../types/Seconds.sol";
9
+ import {Timestamp} from "../../types/Timestamp.sol";
10
+
11
+ interface IPolicy {
12
+
13
+ struct Premium {
14
+ // this is the net premium calculated by the product
15
+ uint256 netPremiumAmount;
16
+ // fullPremium = netPremium + all fixed amounts + all variable amounts (excl commission and minDistribtuionOwnerFee variable part)
17
+ uint256 fullPremiumAmount;
18
+ // premium = fullPremium - discount
19
+ uint256 premiumAmount;
20
+ uint256 productFeeFixAmount;
21
+ uint256 poolFeeFixAmount;
22
+ uint256 bundleFeeFixAmount;
23
+ uint256 distributionFeeFixAmount;
24
+ uint256 productFeeVarAmount;
25
+ uint256 poolFeeVarAmount;
26
+ uint256 bundleFeeVarAmount;
27
+ uint256 distributionFeeVarAmount;
28
+ uint256 distributionOwnerFeeFixAmount;
29
+ // this is the remaining amount when the commission and discount are subtracted from the distribution fee variable part (must be at least the minDistributionOwnerFee)
30
+ uint256 distributionOwnerFeeVarAmount;
31
+ // this value is based on distributor type referenced in the referral
32
+ uint256 commissionAmount;
33
+ // this is based on referral used
34
+ uint256 discountAmount;
35
+ }
36
+
37
+ /// @dev policy data for the full policy lifecycle
38
+ struct PolicyInfo {
39
+ NftId productNftId;
40
+ NftId bundleNftId;
41
+ ReferralId referralId;
42
+ RiskId riskId;
43
+ uint256 sumInsuredAmount;
44
+ uint256 premiumAmount;
45
+ uint256 premiumPaidAmount;
46
+ Seconds lifetime;
47
+ bytes applicationData;
48
+ bytes policyData;
49
+ uint16 claimsCount;
50
+ uint16 openClaimsCount;
51
+ uint256 payoutAmount;
52
+ Timestamp activatedAt; // time of underwriting
53
+ Timestamp expiredAt; // no new claims (activatedAt + lifetime)
54
+ Timestamp closedAt; // no locked capital (or declinedAt)
55
+ }
56
+
57
+ // claimId neeeds to be encoded policyNftId:claimId combination
58
+ struct ClaimInfo {
59
+ uint256 claimAmount;
60
+ uint256 paidAmount;
61
+ bytes data;
62
+ Timestamp closedAt; // payoment of confirmed claim amount (or declinedAt)
63
+ }
64
+
65
+ // claimId neeeds to be encoded policyNftId:claimId combination
66
+ struct PayoutInfo {
67
+ ClaimId claimId;
68
+ uint256 amount;
69
+ bytes data;
70
+ Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
71
+ }
72
+ }
@@ -0,0 +1,11 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+
6
+ interface IRisk {
7
+ struct RiskInfo {
8
+ NftId productNftId;
9
+ bytes data;
10
+ }
11
+ }