@etherisc/gif-next 0.0.2-af8c650-079 → 0.0.2-afc9e82-014

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 (551) hide show
  1. package/README.md +249 -23
  2. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  3. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +1376 -0
  4. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  5. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1556 -0
  6. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  7. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +780 -0
  8. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +1000 -0
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  11. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +840 -0
  12. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  13. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +320 -1684
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +616 -0
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +420 -1756
  20. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1348 -0
  22. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  23. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  24. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  25. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1574 -0
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +979 -0
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +656 -0
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2847 -0
  32. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  33. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +190 -0
  34. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  35. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +478 -0
  36. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  37. package/artifacts/contracts/instance/{module/lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  38. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  39. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +581 -0
  40. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +194 -0
  42. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  43. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +256 -0
  44. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  45. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +237 -0
  46. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  47. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  48. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  49. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IComponents.sol/IComponents.json} +2 -2
  50. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  51. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  52. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  53. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  54. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  55. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  56. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  57. package/artifacts/contracts/instance/module/{pool/IPoolModule.sol/IPool.json → ISetup.sol/ISetup.json} +2 -2
  58. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  59. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  60. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  61. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
  62. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  63. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +696 -0
  64. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  65. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +735 -0
  66. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  67. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +1095 -0
  68. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  69. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
  70. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  71. package/artifacts/contracts/pool/Pool.sol/Pool.json +1407 -0
  72. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  73. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
  74. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  75. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +708 -0
  76. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  77. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
  78. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  79. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
  80. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  81. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1386 -0
  82. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  83. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +748 -0
  84. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  85. package/artifacts/contracts/{instance/service/IProductService.sol/IProductService.json → product/IApplicationService.sol/IApplicationService.json} +250 -234
  86. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  87. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +753 -0
  88. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +651 -0
  90. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  91. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +510 -0
  92. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  93. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +861 -0
  94. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  95. package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → product/IProductService.sol/IProductService.json} +222 -156
  96. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  97. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
  98. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
  100. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  101. package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
  102. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +688 -0
  104. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  105. package/artifacts/contracts/product/Product.sol/Product.json +1198 -0
  106. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  107. package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
  108. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  109. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +640 -0
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +199 -12
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +485 -34
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +858 -0
  116. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  117. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +52 -0
  118. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/Registry.sol/Registry.json +491 -105
  120. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  121. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1150 -0
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +657 -0
  126. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  127. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
  128. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  129. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +485 -0
  130. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  131. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  132. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  133. package/artifacts/contracts/shared/Component.sol/Component.json +873 -0
  134. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  135. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +631 -0
  136. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  137. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  138. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  139. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +636 -0
  140. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  141. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +125 -0
  142. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  143. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
  144. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  145. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +91 -37
  146. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  147. package/artifacts/contracts/{registry → shared}/IRegistryLinked.sol/IRegistryLinked.json +13 -2
  148. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  149. package/artifacts/contracts/{instance/InstanceBase.sol/InstanceBase.json → shared/IService.sol/IService.json} +160 -146
  150. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  151. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +16 -125
  152. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  153. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +238 -0
  154. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  155. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
  156. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  157. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +569 -0
  158. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  159. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +245 -27
  160. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  161. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
  162. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  163. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → shared/Service.sol/Service.json} +256 -220
  164. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  165. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +114 -0
  166. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  167. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  168. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  169. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +29 -115
  170. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  171. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +523 -0
  172. package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  173. package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.json +628 -0
  174. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  175. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +767 -0
  176. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  177. package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
  178. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  179. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  180. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  181. package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
  182. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  183. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  184. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  185. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +104 -0
  186. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  187. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  188. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  189. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +125 -0
  190. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  191. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +166 -0
  192. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  193. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +33 -0
  194. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  195. package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
  196. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  197. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  198. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  199. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  200. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  201. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +86 -0
  202. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +156 -0
  204. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  205. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -0
  206. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  208. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  209. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +280 -0
  210. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  211. package/artifacts/contracts/{types/ChainId.sol/ChainIdLib.json → type/UFixed.sol/MathLib.json} +4 -4
  212. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  213. package/artifacts/contracts/{types/UFixed.sol/UFixedMathLib.json → type/UFixed.sol/UFixedLib.json} +4 -4
  214. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  215. package/artifacts/contracts/type/Version.sol/VersionLib.json +177 -0
  216. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  217. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +49 -0
  218. package/contracts/distribution/Distribution.sol +285 -0
  219. package/contracts/distribution/DistributionService.sol +349 -0
  220. package/contracts/distribution/DistributionServiceManager.sol +51 -0
  221. package/contracts/distribution/IDistributionComponent.sol +71 -0
  222. package/contracts/distribution/IDistributionService.sol +87 -0
  223. package/contracts/instance/BundleManager.sol +126 -0
  224. package/contracts/instance/IInstance.sol +69 -45
  225. package/contracts/instance/IInstanceService.sol +73 -0
  226. package/contracts/instance/Instance.sol +216 -53
  227. package/contracts/instance/InstanceAccessManager.sol +543 -0
  228. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  229. package/contracts/instance/InstanceReader.sol +368 -0
  230. package/contracts/instance/InstanceService.sol +308 -0
  231. package/contracts/instance/InstanceServiceManager.sol +54 -0
  232. package/contracts/instance/InstanceStore.sol +211 -0
  233. package/contracts/instance/base/Cloneable.sol +51 -0
  234. package/contracts/instance/base/IKeyValueStore.sol +53 -0
  235. package/contracts/instance/base/ILifecycle.sol +30 -0
  236. package/contracts/instance/base/KeyValueStore.sol +169 -0
  237. package/contracts/instance/base/Lifecycle.sol +121 -0
  238. package/contracts/instance/base/ObjectManager.sol +82 -0
  239. package/contracts/instance/module/IAccess.sol +54 -0
  240. package/contracts/instance/module/IBundle.sol +23 -0
  241. package/contracts/instance/module/IComponents.sol +41 -0
  242. package/contracts/instance/module/IDistribution.sol +42 -0
  243. package/contracts/instance/module/IPolicy.sol +78 -0
  244. package/contracts/instance/module/IRisk.sol +11 -0
  245. package/contracts/instance/module/ISetup.sol +33 -0
  246. package/contracts/instance/module/ITreasury.sol +23 -0
  247. package/contracts/pool/BundleService.sol +382 -0
  248. package/contracts/pool/BundleServiceManager.sol +51 -0
  249. package/contracts/pool/IBundleService.sol +118 -0
  250. package/contracts/pool/IPoolComponent.sol +114 -0
  251. package/contracts/pool/IPoolService.sol +114 -0
  252. package/contracts/pool/Pool.sol +302 -0
  253. package/contracts/pool/PoolService.sol +403 -0
  254. package/contracts/pool/PoolServiceManager.sol +51 -0
  255. package/contracts/product/ApplicationService.sol +186 -0
  256. package/contracts/product/ApplicationServiceManager.sol +35 -0
  257. package/contracts/product/ClaimService.sol +442 -0
  258. package/contracts/product/ClaimServiceManager.sol +35 -0
  259. package/contracts/product/IApplicationService.sol +62 -0
  260. package/contracts/product/IClaimService.sol +93 -0
  261. package/contracts/product/IPolicyService.sol +80 -0
  262. package/contracts/product/IPricingService.sol +37 -0
  263. package/contracts/product/IProductComponent.sol +41 -0
  264. package/contracts/product/IProductService.sol +40 -0
  265. package/contracts/product/PolicyService.sol +376 -0
  266. package/contracts/product/PolicyServiceManager.sol +54 -0
  267. package/contracts/product/PricingService.sol +275 -0
  268. package/contracts/product/PricingServiceManager.sol +51 -0
  269. package/contracts/product/Product.sol +379 -0
  270. package/contracts/product/ProductService.sol +210 -0
  271. package/contracts/product/ProductServiceManager.sol +54 -0
  272. package/contracts/registry/ChainNft.sol +87 -36
  273. package/contracts/registry/IRegistry.sol +71 -27
  274. package/contracts/registry/IRegistryService.sol +66 -0
  275. package/contracts/registry/ITransferInterceptor.sol +7 -0
  276. package/contracts/registry/Registry.sol +372 -286
  277. package/contracts/registry/RegistryAccessManager.sol +216 -0
  278. package/contracts/registry/RegistryService.sol +285 -0
  279. package/contracts/registry/RegistryServiceManager.sol +60 -0
  280. package/contracts/registry/ReleaseManager.sol +328 -0
  281. package/contracts/registry/TokenRegistry.sol +116 -0
  282. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
  283. package/contracts/shared/Component.sol +271 -0
  284. package/contracts/shared/ComponentService.sol +150 -0
  285. package/contracts/shared/ERC165.sol +14 -8
  286. package/contracts/shared/IComponent.sol +90 -0
  287. package/contracts/shared/INftOwnable.sol +23 -0
  288. package/contracts/shared/IPolicyHolder.sol +40 -0
  289. package/contracts/shared/IRegisterable.sol +10 -19
  290. package/contracts/shared/IRegistryLinked.sol +11 -0
  291. package/contracts/shared/IService.sol +18 -0
  292. package/contracts/shared/IVersionable.sol +38 -37
  293. package/contracts/shared/NftOwnable.sol +118 -0
  294. package/contracts/shared/PolicyHolder.sol +94 -0
  295. package/contracts/shared/ProxyManager.sol +169 -0
  296. package/contracts/shared/Registerable.sol +54 -65
  297. package/contracts/shared/RegistryLinked.sol +43 -0
  298. package/contracts/shared/Service.sol +72 -0
  299. package/contracts/shared/TokenHandler.sol +35 -0
  300. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  301. package/contracts/shared/Versionable.sol +38 -68
  302. package/contracts/staking/IStakingService.sol +102 -0
  303. package/contracts/staking/StakeingServiceManager.sol +37 -0
  304. package/contracts/staking/StakingService.sol +166 -0
  305. package/contracts/type/Amount.sol +109 -0
  306. package/contracts/{types → type}/Blocknumber.sol +1 -0
  307. package/contracts/type/ClaimId.sol +75 -0
  308. package/contracts/type/DistributorType.sol +55 -0
  309. package/contracts/type/Fee.sol +65 -0
  310. package/contracts/type/Key32.sol +50 -0
  311. package/contracts/{types → type}/NftId.sol +24 -1
  312. package/contracts/type/NftIdSet.sol +62 -0
  313. package/contracts/{types → type}/ObjectType.sol +62 -15
  314. package/contracts/type/PayoutId.sol +82 -0
  315. package/contracts/type/Referral.sol +89 -0
  316. package/contracts/type/RiskId.sol +43 -0
  317. package/contracts/type/RoleId.sol +132 -0
  318. package/contracts/type/Seconds.sol +54 -0
  319. package/contracts/{types → type}/StateId.sol +19 -4
  320. package/contracts/{types → type}/Timestamp.sol +22 -13
  321. package/contracts/{types → type}/UFixed.sol +129 -12
  322. package/contracts/{types → type}/Version.sol +14 -1
  323. package/package.json +6 -5
  324. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  325. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -174
  326. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  327. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -174
  328. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  329. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -356
  330. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  331. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -279
  332. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  333. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -387
  334. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  335. package/artifacts/contracts/components/Product.sol/Product.json +0 -305
  336. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  337. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  338. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  339. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  340. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  342. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  343. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  344. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  345. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  346. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  347. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  348. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  349. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  350. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  351. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  352. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  353. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  354. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  355. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  356. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  357. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  358. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  359. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  360. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  361. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  362. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  363. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  364. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  365. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  366. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  367. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  368. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  369. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  370. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  371. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  372. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +0 -4
  373. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +0 -50
  374. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  375. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  376. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  377. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  378. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  379. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  380. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  381. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -276
  382. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  383. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  384. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -276
  385. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  386. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  387. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  388. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
  389. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  390. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
  391. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  392. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  393. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  394. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  395. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  396. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  397. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  398. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  399. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  400. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  401. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  402. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  403. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  404. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
  405. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  406. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
  407. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  408. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  409. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
  410. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  411. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
  412. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  413. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  414. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -10
  415. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  416. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
  417. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  418. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  419. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -533
  420. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  421. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  422. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  423. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -533
  424. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  425. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -491
  426. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  427. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.json +0 -300
  428. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  429. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +0 -364
  430. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  431. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  432. package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +0 -4
  433. package/artifacts/contracts/instance/service/IService.sol/IService.json +0 -300
  434. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  435. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -471
  436. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  437. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -673
  438. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  439. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.json +0 -300
  440. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  441. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  442. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  443. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  444. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  445. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  446. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  447. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  448. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  449. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  450. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  451. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -137
  452. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  453. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -82
  454. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  455. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -379
  456. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  457. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -338
  458. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  459. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  460. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  461. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -206
  462. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  463. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -338
  464. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  465. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  466. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  467. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  468. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -218
  469. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  470. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -92
  471. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  472. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +0 -10
  473. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  474. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  475. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  476. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +0 -236
  477. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  478. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  479. package/artifacts/contracts/types/Version.sol/VersionLib.json +0 -139
  480. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  481. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +0 -30
  482. package/contracts/components/BaseComponent.sol +0 -89
  483. package/contracts/components/IBaseComponent.sol +0 -19
  484. package/contracts/components/IPoolComponent.sol +0 -57
  485. package/contracts/components/IProductComponent.sol +0 -19
  486. package/contracts/components/Pool.sol +0 -174
  487. package/contracts/components/Product.sol +0 -117
  488. package/contracts/experiment/errors/Require.sol +0 -38
  489. package/contracts/experiment/errors/Revert.sol +0 -44
  490. package/contracts/experiment/inheritance/A.sol +0 -53
  491. package/contracts/experiment/inheritance/B.sol +0 -28
  492. package/contracts/experiment/inheritance/C.sol +0 -34
  493. package/contracts/experiment/inheritance/IA.sol +0 -13
  494. package/contracts/experiment/inheritance/IB.sol +0 -10
  495. package/contracts/experiment/inheritance/IC.sol +0 -12
  496. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  497. package/contracts/experiment/statemachine/ISM.sol +0 -25
  498. package/contracts/experiment/statemachine/README.md +0 -112
  499. package/contracts/experiment/statemachine/SM.sol +0 -57
  500. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  501. package/contracts/experiment/types/TypeA.sol +0 -47
  502. package/contracts/experiment/types/TypeB.sol +0 -29
  503. package/contracts/instance/IInstanceLinked.sol +0 -8
  504. package/contracts/instance/IServiceLinked.sol +0 -12
  505. package/contracts/instance/InstanceBase.sol +0 -71
  506. package/contracts/instance/module/access/Access.sol +0 -149
  507. package/contracts/instance/module/access/IAccess.sol +0 -53
  508. package/contracts/instance/module/bundle/BundleModule.sol +0 -228
  509. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  510. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  511. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  512. package/contracts/instance/module/component/ComponentModule.sol +0 -103
  513. package/contracts/instance/module/component/IComponent.sol +0 -53
  514. package/contracts/instance/module/lifecycle/ILifecycle.sol +0 -47
  515. package/contracts/instance/module/lifecycle/LifecycleModule.sol +0 -89
  516. package/contracts/instance/module/policy/IPolicy.sol +0 -60
  517. package/contracts/instance/module/policy/PolicyModule.sol +0 -84
  518. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  519. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  520. package/contracts/instance/module/risk/IRisk.sol +0 -10
  521. package/contracts/instance/module/risk/RiskModule.sol +0 -8
  522. package/contracts/instance/module/treasury/ITreasury.sol +0 -103
  523. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  524. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
  525. package/contracts/instance/service/ComponentOwnerService.sol +0 -171
  526. package/contracts/instance/service/ComponentServiceBase.sol +0 -41
  527. package/contracts/instance/service/IComponentOwnerService.sol +0 -22
  528. package/contracts/instance/service/IPoolService.sol +0 -30
  529. package/contracts/instance/service/IProductService.sol +0 -58
  530. package/contracts/instance/service/IService.sol +0 -15
  531. package/contracts/instance/service/PoolService.sol +0 -123
  532. package/contracts/instance/service/ProductService.sol +0 -355
  533. package/contracts/instance/service/ServiceBase.sol +0 -39
  534. package/contracts/registry/IChainNft.sol +0 -21
  535. package/contracts/registry/IRegistryLinked.sol +0 -8
  536. package/contracts/shared/IOwnable.sol +0 -6
  537. package/contracts/test/TestFee.sol +0 -25
  538. package/contracts/test/TestPool.sol +0 -22
  539. package/contracts/test/TestProduct.sol +0 -44
  540. package/contracts/test/TestRegisterable.sol +0 -19
  541. package/contracts/test/TestRoleId.sol +0 -14
  542. package/contracts/test/TestService.sol +0 -32
  543. package/contracts/test/TestToken.sol +0 -26
  544. package/contracts/test/TestVersion.sol +0 -44
  545. package/contracts/test/TestVersionable.sol +0 -17
  546. package/contracts/test/Usdc.sol +0 -26
  547. package/contracts/types/ChainId.sol +0 -38
  548. package/contracts/types/Fee.sol +0 -51
  549. package/contracts/types/NftIdSet.sol +0 -60
  550. package/contracts/types/RoleId.sol +0 -36
  551. /package/contracts/{types → type}/AddressSet.sol +0 -0
@@ -0,0 +1,349 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../registry/IRegistry.sol";
5
+ import {IInstance} from "../instance/IInstance.sol";
6
+ import {InstanceAccessManager} from "../instance/InstanceAccessManager.sol";
7
+ import {InstanceReader} from "../instance/InstanceReader.sol";
8
+ import {ISetup} from "../instance/module/ISetup.sol";
9
+ import {IPolicy} from "../instance/module/IPolicy.sol";
10
+
11
+ import {Amount, AmountLib} from "../type/Amount.sol";
12
+ import {NftId, NftIdLib, zeroNftId} from "../type/NftId.sol";
13
+ import {Fee, FeeLib} from "../type/Fee.sol";
14
+ import {PRODUCT_SERVICE_ROLE, DISTRIBUTION_OWNER_ROLE} from "../type/RoleId.sol";
15
+ import {KEEP_STATE} from "../type/StateId.sol";
16
+ import {ObjectType, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR, PRICE} from "../type/ObjectType.sol";
17
+ import {Version, VersionLib} from "../type/Version.sol";
18
+ import {RoleId} from "../type/RoleId.sol";
19
+
20
+ import {IVersionable} from "../shared/IVersionable.sol";
21
+ import {Versionable} from "../shared/Versionable.sol";
22
+
23
+ import {IService} from "../shared/IService.sol";
24
+ import {Service} from "../shared/Service.sol";
25
+ import {ComponentService} from "../shared/ComponentService.sol";
26
+ import {InstanceService} from "../instance/InstanceService.sol";
27
+ import {IComponent} from "../shared/IComponent.sol";
28
+ import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
29
+ import {IDistributionService} from "./IDistributionService.sol";
30
+ import {IPricingService} from "../product/IPricingService.sol";
31
+
32
+ import {UFixed, UFixedLib} from "../type/UFixed.sol";
33
+ import {DistributorType, DistributorTypeLib} from "../type/DistributorType.sol";
34
+ import {ReferralId, ReferralStatus, ReferralLib} from "../type/Referral.sol";
35
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
36
+ import {Key32} from "../type/Key32.sol";
37
+ import {IDistribution} from "../instance/module/IDistribution.sol";
38
+ import {InstanceStore} from "../instance/InstanceStore.sol";
39
+
40
+
41
+ contract DistributionService is
42
+ ComponentService,
43
+ IDistributionService
44
+ {
45
+ using NftIdLib for NftId;
46
+ using TimestampLib for Timestamp;
47
+ using UFixedLib for UFixed;
48
+ using FeeLib for Fee;
49
+ using ReferralLib for ReferralId;
50
+
51
+ address internal _registryAddress;
52
+
53
+ function _initialize(
54
+ address owner,
55
+ bytes memory data
56
+ )
57
+ internal
58
+ initializer
59
+ virtual override
60
+ {
61
+ address initialOwner;
62
+ address registryAddress;
63
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
64
+ // TODO while DistributionService is not deployed in DistributionServiceManager constructor
65
+ // owner is DistributionServiceManager deployer
66
+ initializeService(registryAddress, address(0), owner);
67
+ registerInterface(type(IDistributionService).interfaceId);
68
+ }
69
+
70
+ function getDomain() public pure override returns(ObjectType) {
71
+ return DISTRIBUTION();
72
+ }
73
+
74
+ function register(address distributionAddress)
75
+ external
76
+ returns(NftId distributionNftId)
77
+ {
78
+ (
79
+ IComponent component,
80
+ address owner,
81
+ IInstance instance,
82
+ NftId instanceNftId
83
+ ) = _checkComponentForRegistration(
84
+ distributionAddress,
85
+ DISTRIBUTION(),
86
+ DISTRIBUTION_OWNER_ROLE());
87
+
88
+ IRegistry.ObjectInfo memory distributionInfo = getRegistryService().registerDistribution(component, owner);
89
+ IDistributionComponent distribution = IDistributionComponent(distributionAddress);
90
+ distribution.linkToRegisteredNftId();
91
+ distributionNftId = distributionInfo.nftId;
92
+
93
+ instance.getInstanceStore().createDistributionSetup(distributionNftId, distribution.getSetupInfo());
94
+ // TODO move to distribution?
95
+ bytes4[][] memory selectors = new bytes4[][](2);
96
+ selectors[0] = new bytes4[](1);
97
+ // TODO check if array size should be 1 instead of 2
98
+ selectors[1] = new bytes4[](2);
99
+
100
+ selectors[0][0] = IDistributionComponent.setFees.selector;
101
+ selectors[1][0] = IDistributionComponent.processRenewal.selector;
102
+
103
+ RoleId[] memory roles = new RoleId[](2);
104
+ roles[0] = DISTRIBUTION_OWNER_ROLE();
105
+ roles[1] = PRODUCT_SERVICE_ROLE();
106
+
107
+ getInstanceService().createGifTarget(
108
+ instanceNftId,
109
+ distributionAddress,
110
+ distribution.getName(),
111
+ selectors,
112
+ roles);
113
+ }
114
+
115
+ function setFees(
116
+ Fee memory minDistributionOwnerFee,
117
+ Fee memory distributionFee
118
+ )
119
+ external
120
+ override
121
+ {
122
+ if (minDistributionOwnerFee.fractionalFee > distributionFee.fractionalFee) {
123
+ revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
124
+ }
125
+
126
+ (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
127
+ InstanceReader instanceReader = instance.getInstanceReader();
128
+
129
+ ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
130
+ distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
131
+ distSetupInfo.distributionFee = distributionFee;
132
+
133
+ instance.getInstanceStore().updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
134
+ }
135
+
136
+ function createDistributorType(
137
+ string memory name,
138
+ UFixed minDiscountPercentage,
139
+ UFixed maxDiscountPercentage,
140
+ UFixed commissionPercentage,
141
+ uint32 maxReferralCount,
142
+ uint32 maxReferralLifetime,
143
+ bool allowSelfReferrals,
144
+ bool allowRenewals,
145
+ bytes memory data
146
+ )
147
+ external
148
+ returns (DistributorType distributorType)
149
+ {
150
+ (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
151
+
152
+ {
153
+ ISetup.DistributionSetupInfo memory setupInfo = instance.getInstanceReader().getDistributionSetupInfo(distributionNftId);
154
+ UFixed variableFeesPartsTotal = setupInfo.minDistributionOwnerFee.fractionalFee.add(commissionPercentage);
155
+ UFixed maxDiscountPercentageLimit = setupInfo.distributionFee.fractionalFee.sub(variableFeesPartsTotal);
156
+ if (maxDiscountPercentage.gt(maxDiscountPercentageLimit)) {
157
+ revert ErrorIDistributionServiceMaxDiscountTooHigh(maxDiscountPercentage.toInt(), maxDiscountPercentageLimit.toInt());
158
+ }
159
+ }
160
+
161
+ distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
162
+ IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
163
+ name,
164
+ minDiscountPercentage,
165
+ maxDiscountPercentage,
166
+ commissionPercentage,
167
+ maxReferralCount,
168
+ maxReferralLifetime,
169
+ allowSelfReferrals,
170
+ allowRenewals,
171
+ data);
172
+
173
+ instance.getInstanceStore().createDistributorType(distributorType, info);
174
+ }
175
+
176
+
177
+ function createDistributor(
178
+ address distributor,
179
+ DistributorType distributorType,
180
+ bytes memory data
181
+ )
182
+ external
183
+ virtual
184
+ returns (NftId distributorNftId)
185
+ {
186
+ (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
187
+
188
+ distributorNftId = getRegistryService().registerDistributor(
189
+ IRegistry.ObjectInfo(
190
+ zeroNftId(),
191
+ distributionNftId,
192
+ DISTRIBUTOR(),
193
+ true, // intercepting property for bundles is defined on pool
194
+ address(0),
195
+ distributor,
196
+ ""
197
+ ));
198
+
199
+ IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo(
200
+ distributorType,
201
+ true, // active
202
+ data,
203
+ AmountLib.zero(),
204
+ 0);
205
+
206
+ instance.getInstanceStore().createDistributor(distributorNftId, info);
207
+ }
208
+
209
+ // function updateDistributorType(
210
+ // NftId distributorNftId,
211
+ // DistributorType distributorType,
212
+ // bytes memory data
213
+ // )
214
+ // external
215
+ // virtual
216
+ // {
217
+ // (, IInstance instance) = _getAndVerifyCallingDistribution();
218
+ // InstanceReader instanceReader = instance.getInstanceReader();
219
+ // IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
220
+ // distributorInfo.distributorType = distributorType;
221
+ // distributorInfo.data = data;
222
+ // instance.updateDistributor(distributorNftId, distributorInfo, KEEP_STATE());
223
+ // }
224
+
225
+
226
+ function createReferral(
227
+ NftId distributorNftId,
228
+ string memory code,
229
+ UFixed discountPercentage,
230
+ uint32 maxReferrals,
231
+ Timestamp expiryAt,
232
+ bytes memory data
233
+ )
234
+ external
235
+ virtual
236
+ returns (ReferralId referralId)
237
+ {
238
+ (NftId distributionNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(DISTRIBUTION());
239
+
240
+ if (bytes(code).length == 0) {
241
+ revert ErrorIDistributionServiceInvalidReferral(code);
242
+ }
243
+ if (expiryAt.eqz()) {
244
+ revert ErrorIDistributionServiceExpirationInvalid(expiryAt);
245
+ }
246
+
247
+ InstanceReader instanceReader = instance.getInstanceReader();
248
+ DistributorType distributorType = instanceReader.getDistributorInfo(distributorNftId).distributorType;
249
+ IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
250
+
251
+ if (distributorTypeData.maxReferralCount < maxReferrals) {
252
+ revert ErrorIDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount);
253
+ }
254
+ if (distributorTypeData.minDiscountPercentage > discountPercentage) {
255
+ revert ErrorIDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage.toInt(), discountPercentage.toInt());
256
+ }
257
+ if (distributorTypeData.maxDiscountPercentage < discountPercentage) {
258
+ revert ErrorIDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage.toInt(), discountPercentage.toInt());
259
+ }
260
+ if (expiryAt.toInt() - TimestampLib.blockTimestamp().toInt() > distributorTypeData.maxReferralLifetime) {
261
+ revert ErrorIDistributionServiceExpiryTooLong(distributorTypeData.maxReferralLifetime, expiryAt.toInt());
262
+ }
263
+
264
+ referralId = ReferralLib.toReferralId(distributionNftId, code);
265
+ IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
266
+ distributorNftId,
267
+ code,
268
+ discountPercentage,
269
+ maxReferrals,
270
+ 0, // used referrals
271
+ expiryAt,
272
+ data
273
+ );
274
+
275
+ instance.getInstanceStore().createReferral(referralId, info);
276
+ return referralId;
277
+ }
278
+
279
+ function processSale(
280
+ NftId distributionNftId, // assume always of distribution type
281
+ ReferralId referralId,
282
+ IPolicy.Premium memory premium,
283
+ Amount transferredDistributionFeeAmount
284
+ )
285
+ external
286
+ virtual
287
+ {
288
+ bool isReferral = ! referralId.eqz();
289
+ bool referralValid = referralIsValid(distributionNftId, referralId);
290
+
291
+ if (isReferral && ! referralValid) {
292
+ revert ErrorIDistributionServiceReferralInvalid(distributionNftId, referralId);
293
+ }
294
+
295
+ IInstance instance = _getInstanceForDistribution(distributionNftId);
296
+ InstanceReader reader = instance.getInstanceReader();
297
+ InstanceStore store = instance.getInstanceStore();
298
+ IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
299
+ IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
300
+ ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
301
+
302
+ Amount distributionOwnerFee = AmountLib.toAmount(premium.distributionOwnerFeeFixAmount + premium.distributionOwnerFeeVarAmount);
303
+ Amount commissionAmount = AmountLib.toAmount(premium.commissionAmount);
304
+
305
+ if (!(transferredDistributionFeeAmount == distributionOwnerFee + commissionAmount)) {
306
+ revert ErrorDistributionServiceInvalidFeeTransferred(transferredDistributionFeeAmount, distributionOwnerFee + commissionAmount);
307
+ }
308
+
309
+
310
+ if (distributionOwnerFee.gtz()) {
311
+ setupInfo.sumDistributionOwnerFees += distributionOwnerFee.toInt();
312
+ store.updateDistributionSetup(distributionNftId, setupInfo, KEEP_STATE());
313
+ }
314
+
315
+ if (isReferral) {
316
+ referralInfo.usedReferrals += 1;
317
+ store.updateReferral(referralId, referralInfo, KEEP_STATE());
318
+
319
+ if (commissionAmount.gtz()) {
320
+ distributorInfo.commissionAmount = distributorInfo.commissionAmount + commissionAmount;
321
+ distributorInfo.numPoliciesSold += 1;
322
+ store.updateDistributor(referralInfo.distributorNftId, distributorInfo, KEEP_STATE());
323
+ }
324
+ }
325
+ }
326
+
327
+ // TODO: zero should return false
328
+ function referralIsValid(NftId distributionNftId, ReferralId referralId) public view returns (bool isValid) {
329
+ IInstance instance = _getInstanceForDistribution(distributionNftId);
330
+ IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
331
+
332
+ if (info.distributorNftId.eqz()) {
333
+ return false;
334
+ }
335
+
336
+ isValid = info.expiryAt.eqz() || (info.expiryAt.gtz() && TimestampLib.blockTimestamp() <= info.expiryAt);
337
+ isValid = isValid && info.usedReferrals < info.maxReferrals;
338
+ }
339
+
340
+ function _getInstanceForDistribution(NftId distributionNftId)
341
+ internal
342
+ view
343
+ returns(IInstance instance)
344
+ {
345
+ NftId instanceNftId = getRegistry().getObjectInfo(distributionNftId).parentNftId;
346
+ address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
347
+ return IInstance(instanceAddress);
348
+ }
349
+ }
@@ -0,0 +1,51 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../shared/ProxyManager.sol";
6
+ import {DistributionService} from "./DistributionService.sol";
7
+ import {Registry} from "../registry/Registry.sol";
8
+ import {RegistryService} from "../registry/RegistryService.sol";
9
+ import {REGISTRY} from "../type/ObjectType.sol";
10
+
11
+ contract DistributionServiceManager is ProxyManager {
12
+
13
+ DistributionService private _distributionService;
14
+
15
+ /// @dev initializes proxy manager with distribution service implementation and deploys instance
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager(registryAddress)
20
+ {
21
+ DistributionService distSrv = new DistributionService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(distSrv),
25
+ data);
26
+
27
+ _distributionService = DistributionService(address(versionable));
28
+
29
+ // TODO `thi` must have a role or own nft to register service
30
+ //Registry registry = Registry(registryAddress);
31
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _distributionService.getMajorVersion());
32
+ //RegistryService registryService = RegistryService(registryServiceAddress);
33
+ //registryService.registerService(_distributionService);
34
+
35
+ // TODO no nft to link yet
36
+ // link ownership of instance service manager ot nft owner of instance service
37
+ //_linkToNftOwnable(
38
+ // address(registryAddress),
39
+ // address(_distributionService));
40
+ }
41
+
42
+ //--- view functions ----------------------------------------------------//
43
+ function getDistributionService()
44
+ external
45
+ view
46
+ returns (DistributionService distributionService)
47
+ {
48
+ return _distributionService;
49
+ }
50
+
51
+ }
@@ -0,0 +1,71 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Fee} from "../type/Fee.sol";
5
+ import {IComponent} from "../shared/IComponent.sol";
6
+ import {ISetup} from "../instance/module/ISetup.sol";
7
+ import {ReferralId, ReferralStatus} from "../type/Referral.sol";
8
+ import {NftId} from "../type/NftId.sol";
9
+ import {DistributorType} from "../type/DistributorType.sol";
10
+ import {UFixed} from "../type/UFixed.sol";
11
+ import {Timestamp} from "../type/Timestamp.sol";
12
+
13
+ interface IDistributionComponent is IComponent {
14
+
15
+ event LogDistributorUpdated(address to, address caller);
16
+
17
+ function getSetupInfo() external view returns (ISetup.DistributionSetupInfo memory setupInfo);
18
+
19
+ function setFees(
20
+ Fee memory minDistributionOwnerFee,
21
+ Fee memory distributionFee
22
+ ) external;
23
+
24
+ function createDistributorType(
25
+ string memory name,
26
+ UFixed minDiscountPercentage,
27
+ UFixed maxDiscountPercentage,
28
+ UFixed commissionPercentage,
29
+ uint32 maxReferralCount,
30
+ uint32 maxReferralLifetime,
31
+ bool allowSelfReferrals,
32
+ bool allowRenewals,
33
+ bytes memory data
34
+ ) external returns (DistributorType distributorType);
35
+
36
+ function createDistributor(
37
+ address distributor,
38
+ DistributorType distributorType,
39
+ bytes memory data
40
+ ) external returns(NftId distributorNftId);
41
+
42
+ function updateDistributorType(
43
+ NftId distributorNftId,
44
+ DistributorType distributorType,
45
+ bytes memory data
46
+ ) external;
47
+
48
+ function calculateRenewalFeeAmount(
49
+ ReferralId referralId,
50
+ uint256 netPremiumAmount
51
+ ) external view returns (uint256 feeAmount);
52
+
53
+ /// @dev callback from product service when a policy is renews for a specific referralId
54
+ function processRenewal(
55
+ ReferralId referralId,
56
+ uint256 feeAmount
57
+ ) external;
58
+
59
+ function getDiscountPercentage(
60
+ string memory referralCode
61
+ ) external view returns (UFixed discountPercentage, ReferralStatus status);
62
+
63
+ function getDistributionFee() external view returns (Fee memory distibutionFee);
64
+
65
+ function getReferralId(
66
+ string memory referralCode
67
+ ) external returns (ReferralId referralId);
68
+
69
+ /// @dev returns true iff the component needs to be called when selling/renewing policis
70
+ function isVerifying() external view returns (bool verifying);
71
+ }
@@ -0,0 +1,87 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Amount} from "../type/Amount.sol";
5
+ import {NftId} from "../type/NftId.sol";
6
+ import {Fee} from "../type/Fee.sol";
7
+ import {IPolicy} from "../instance/module/IPolicy.sol";
8
+ import {IService} from "../shared/IService.sol";
9
+ import {UFixed} from "../type/UFixed.sol";
10
+ import {DistributorType} from "../type/DistributorType.sol";
11
+ import {ReferralId} from "../type/Referral.sol";
12
+ import {Timestamp} from "../type/Timestamp.sol";
13
+
14
+
15
+ interface IDistributionService is IService {
16
+ error ErrorDistributionServiceCallerNotRegistered(address caller);
17
+ error ErrorIDistributionServiceParentNftIdNotInstance(NftId nftId, NftId parentNftId);
18
+ error ErrorIDistributionServiceCallerNotDistributor(address caller);
19
+ error ErrorIDistributionServiceInvalidReferralId(ReferralId referralId);
20
+ error ErrorIDistributionServiceMaxReferralsExceeded(uint256 maxReferrals);
21
+ error ErrorIDistributionServiceDiscountTooLow(uint256 minDiscountPercentage, uint256 discountPercentage);
22
+ error ErrorIDistributionServiceDiscountTooHigh(uint256 maxDiscountPercentage, uint256 discountPercentage);
23
+ error ErrorIDistributionServiceExpiryTooLong(uint256 maxReferralLifetime, uint256 expiryAt);
24
+ error ErrorIDistributionServiceInvalidReferral(string code);
25
+ error ErrorIDistributionServiceExpirationInvalid(Timestamp expiryAt);
26
+ error ErrorIDistributionServiceCommissionTooHigh(uint256 commissionPercentage, uint256 maxCommissionPercentage);
27
+ error ErrorIDistributionServiceMinFeeTooHigh(uint256 minFee, uint256 limit);
28
+ error ErrorIDistributionServiceMaxDiscountTooHigh(uint256 maxDiscountPercentage, uint256 limit);
29
+ error ErrorIDistributionServiceReferralInvalid(NftId distributionNftId, ReferralId referralId);
30
+ error ErrorDistributionServiceInvalidFeeTransferred(Amount transferredDistributionFeeAmount, Amount expectedDistributionFeeAmount);
31
+
32
+ function setFees(
33
+ Fee memory minDistributionOwnerFee,
34
+ Fee memory distributionFee
35
+ ) external;
36
+
37
+ function createDistributorType(
38
+ string memory name,
39
+ UFixed minDiscountPercentage,
40
+ UFixed maxDiscountPercentage,
41
+ UFixed commissionPercentage,
42
+ uint32 maxReferralCount,
43
+ uint32 maxReferralLifetime,
44
+ bool allowSelfReferrals,
45
+ bool allowRenewals,
46
+ bytes memory data
47
+ )
48
+ external
49
+ returns (DistributorType distributorType);
50
+
51
+ function createDistributor(
52
+ address distributor,
53
+ DistributorType distributorType,
54
+ bytes memory data
55
+ ) external returns (NftId distributorNftId);
56
+
57
+ // TODO re-enable and reorganize (service contract too large)
58
+ // function updateDistributorType(
59
+ // NftId distributorNftId,
60
+ // DistributorType distributorType,
61
+ // bytes memory data
62
+ // ) external;
63
+
64
+ function createReferral(
65
+ NftId distributorNftId,
66
+ string memory code,
67
+ UFixed discountPercentage,
68
+ uint32 maxReferrals,
69
+ Timestamp expiryAt,
70
+ bytes memory data
71
+ )
72
+ external
73
+ returns (ReferralId referralId);
74
+
75
+ /// @dev callback from product service when selling a policy for a specific referralId
76
+ function processSale(
77
+ NftId distributionNftId,
78
+ ReferralId referralId,
79
+ IPolicy.Premium memory premium,
80
+ Amount transferredDistributionFeeAmount
81
+ ) external;
82
+
83
+ function referralIsValid(
84
+ NftId distributorNftId,
85
+ ReferralId referralId
86
+ ) external view returns (bool isValid);
87
+ }
@@ -0,0 +1,126 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IInstance} from "./IInstance.sol";
5
+ import {INSTANCE} from "../type/ObjectType.sol";
6
+ import {InstanceReader} from "./InstanceReader.sol";
7
+ import {IPolicy} from "../instance/module/IPolicy.sol";
8
+ import {IRegistry} from "../registry/IRegistry.sol";
9
+ import {LibNftIdSet} from "../type/NftIdSet.sol";
10
+ import {NftId} from "../type/NftId.sol";
11
+ import {TimestampLib} from "../type/Timestamp.sol";
12
+
13
+ import {ObjectManager} from "./base/ObjectManager.sol";
14
+
15
+ contract BundleManager is
16
+ ObjectManager
17
+ {
18
+
19
+ event LogBundleManagerPolicyLinked(NftId bundleNftId, NftId policyNftId);
20
+ event LogBundleManagerPolicyUnlinked(NftId bundleNftId, NftId policyNftId);
21
+
22
+ event LogBundleManagerBundleAdded(NftId poolNftId, NftId bundleNftId);
23
+ event LogBundleManagerBundleUnlocked(NftId poolNftId, NftId bundleNftId);
24
+ event LogBundleManagerBundleLocked(NftId poolNftId, NftId bundleNftId);
25
+ event LogBundleManagerBundleClosed(NftId poolNftId, NftId bundleNftId);
26
+
27
+ error ErrorBundleManagerPolicyAlreadyActivated(NftId policyNftId);
28
+ error ErrorBundleManagerBundleLocked(NftId bundleNftId, NftId policyNftId);
29
+ error ErrorBundleManagerPolicyWithOpenClaims(NftId policyNftId, uint256 openClaimsCount);
30
+ error ErrorBundleManagerPolicyNotCloseable(NftId policyNftId);
31
+ error ErrorBundleManagerBundleUnknown(NftId bundleNftId);
32
+ error ErrorBundleManagerBundleNotRegistered(NftId bundleNftId);
33
+
34
+ mapping(NftId bundleNftId => LibNftIdSet.Set policies) internal _activePolicies;
35
+
36
+ /// @dev links a policy to its bundle
37
+ // to link a policy it MUST NOT yet have been linked
38
+ function linkPolicy(NftId policyNftId) external restricted() {
39
+ NftId bundleNftId = _instance.getInstanceReader().getPolicyInfo(policyNftId).bundleNftId;
40
+ // decision will likely depend on the decision what to check here and what in the service
41
+ NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
42
+
43
+ // ensure bundle is unlocked (in active set) and registered with this instance
44
+ if (!_isActive(poolNftId, bundleNftId)) {
45
+ revert ErrorBundleManagerBundleLocked(bundleNftId, policyNftId);
46
+ }
47
+
48
+ LibNftIdSet.add(_activePolicies[bundleNftId], policyNftId);
49
+ emit LogBundleManagerPolicyLinked(bundleNftId, policyNftId);
50
+ }
51
+
52
+
53
+ /// @dev unlinks a policy from its bundle
54
+ // to unlink a policy it must closable, ie. meet one of the following criterias
55
+ // - the policy MUST be past its expiry period and it MUST NOT have any open claims
56
+ // - the policy's payoutAmount MUST be equal to its sumInsuredAmount and MUST NOT have any open claims
57
+ function unlinkPolicy(NftId policyNftId) external restricted() {
58
+ IPolicy.PolicyInfo memory policyInfo = _instance.getInstanceReader().getPolicyInfo(policyNftId);
59
+
60
+ NftId bundleNftId = policyInfo.bundleNftId;
61
+ // decision will likely depend on the decision what to check here and what in the service
62
+ NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
63
+
64
+ // ensure bundle is registered with this instance
65
+ if (!_contains(poolNftId, bundleNftId)) {
66
+ revert ErrorBundleManagerBundleUnknown(bundleNftId);
67
+ }
68
+
69
+ LibNftIdSet.remove(_activePolicies[bundleNftId], policyNftId);
70
+ emit LogBundleManagerPolicyUnlinked(policyInfo.bundleNftId, policyNftId);
71
+ }
72
+
73
+
74
+ /// @dev add a new bundle to a pool registerd with this instance
75
+ // the corresponding pool is fetched via instance reader
76
+ function add(NftId bundleNftId) external restricted() {
77
+ NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
78
+
79
+ // ensure pool is registered with instance
80
+ if(poolNftId.eqz()) {
81
+ revert ErrorBundleManagerBundleNotRegistered(bundleNftId);
82
+ }
83
+
84
+ _add(poolNftId, bundleNftId);
85
+ emit LogBundleManagerBundleAdded(poolNftId, bundleNftId);
86
+ }
87
+
88
+
89
+ /// @dev unlocked (active) bundles are available to collateralize new policies
90
+ function unlock(NftId bundleNftId) external restricted() {
91
+ NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
92
+ _activate(poolNftId, bundleNftId);
93
+ emit LogBundleManagerBundleUnlocked(poolNftId, bundleNftId);
94
+ }
95
+
96
+ /// @dev locked (deactivated) bundles may not collateralize any new policies
97
+ function lock(NftId bundleNftId) external restricted() {
98
+ NftId poolNftId = _instance.getInstanceReader().getBundleInfo(bundleNftId).poolNftId;
99
+ _deactivate(poolNftId, bundleNftId);
100
+ emit LogBundleManagerBundleLocked(poolNftId, bundleNftId);
101
+ }
102
+
103
+ function bundles(NftId poolNftId) external view returns(uint256) {
104
+ return _objects(poolNftId);
105
+ }
106
+
107
+ function getBundleNftId(NftId poolNftId, uint256 idx) external view returns(NftId bundleNftId) {
108
+ return _getObject(poolNftId, idx);
109
+ }
110
+
111
+ function activeBundles(NftId poolNftId) external view returns(uint256) {
112
+ return _activeObjs(poolNftId);
113
+ }
114
+
115
+ function getActiveBundleNftId(NftId poolNftId, uint256 idx) external view returns(NftId bundleNftId) {
116
+ return _getActiveObject(poolNftId, idx);
117
+ }
118
+
119
+ function activePolicies(NftId bundleNftId) external view returns(uint256) {
120
+ return LibNftIdSet.size(_activePolicies[bundleNftId]);
121
+ }
122
+
123
+ function getActivePolicy(NftId bundleNftId, uint256 idx) external view returns(NftId policyNftId) {
124
+ return LibNftIdSet.getElementAt(_activePolicies[bundleNftId], idx);
125
+ }
126
+ }