@etherisc/gif-next 0.0.2-7d7c399-079 → 0.0.2-7d91021-862

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 (494) hide show
  1. package/README.md +63 -1
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +1 -1
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +106 -38
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +1 -1
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +91 -45
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +1 -1
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +58 -6
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +603 -280
  10. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +1289 -0
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +8 -39
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +409 -33
  16. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  18. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +487 -207
  19. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +179 -19
  21. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +246 -16
  23. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +420 -27
  25. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +66 -154
  27. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +381 -46
  29. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +21 -98
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +512 -204
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +147 -77
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +20 -97
  37. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +358 -82
  39. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
  40. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
  41. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +109 -110
  42. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
  43. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +355 -52
  44. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
  45. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +145 -142
  46. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
  47. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +380 -45
  48. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
  49. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
  50. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +128 -178
  51. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +1 -1
  52. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +380 -45
  53. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  54. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +39 -73
  55. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  56. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +130 -148
  57. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +1 -1
  58. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +355 -52
  59. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  60. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +360 -193
  61. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +1 -1
  62. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +380 -45
  63. package/artifacts/contracts/instance/BaseStore.sol/BaseStore.dbg.json +4 -0
  64. package/artifacts/contracts/{shared/IKeyValueStore.sol/IKeyValueStore.json → instance/BaseStore.sol/BaseStore.json} +51 -229
  65. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  66. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +88 -45
  67. package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.dbg.json +4 -0
  68. package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.json +304 -0
  69. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  70. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +472 -28
  71. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  72. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +345 -12
  73. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  74. package/artifacts/contracts/instance/Instance.sol/Instance.json +510 -85
  75. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  76. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +892 -408
  77. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  78. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +327 -64
  79. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  80. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +674 -494
  81. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  82. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +377 -64
  83. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  84. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +83 -55
  85. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  86. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1328 -2007
  87. package/artifacts/contracts/instance/ProductStore.sol/ProductStore.dbg.json +4 -0
  88. package/artifacts/contracts/instance/ProductStore.sol/ProductStore.json +3427 -0
  89. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +1 -1
  90. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +141 -85
  91. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  92. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +8 -8
  93. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  94. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  95. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  96. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  97. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  98. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  99. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +16 -5
  100. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
  101. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
  102. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  103. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  104. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  105. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  106. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  107. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  108. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  109. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +33 -45
  110. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  111. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +379 -47
  112. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  113. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  114. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +19 -31
  115. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  116. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +29 -0
  117. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  118. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +19 -31
  119. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  120. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +87 -42
  121. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +96 -50
  123. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  124. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +59 -79
  125. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  126. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +355 -52
  127. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  128. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +280 -209
  129. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  130. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +117 -71
  131. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  132. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +174 -87
  133. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  134. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +29 -41
  135. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  136. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +306 -166
  137. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  138. package/artifacts/contracts/pool/Pool.sol/Pool.json +29 -41
  139. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  140. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +522 -0
  141. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  142. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +547 -340
  143. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  144. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +145 -71
  145. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  146. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +273 -50
  147. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  148. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +103 -41
  149. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  150. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +46 -58
  151. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  152. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +380 -45
  153. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  154. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +137 -139
  155. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  156. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +113 -87
  157. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  158. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +208 -1
  159. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  160. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +45 -23
  161. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  162. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +133 -65
  163. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  164. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +50 -0
  165. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  166. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +40 -52
  167. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  168. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +231 -19
  169. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  170. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +245 -161
  171. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  172. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +783 -0
  173. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  174. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +126 -80
  175. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  176. package/artifacts/contracts/product/PricingService.sol/PricingService.json +116 -114
  177. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  178. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +100 -70
  179. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  180. package/artifacts/contracts/product/Product.sol/Product.json +40 -52
  181. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  182. package/artifacts/contracts/product/RiskService.sol/RiskService.json +279 -43
  183. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  184. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +91 -41
  185. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  186. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  187. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +52 -22
  188. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  189. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +29 -0
  190. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +1 -1
  191. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  192. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  193. package/artifacts/contracts/registry/Registry.sol/Registry.json +90 -60
  194. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  195. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +713 -414
  196. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
  197. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1074 -0
  198. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  199. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +47 -18
  200. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  201. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +76 -38
  202. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +1 -1
  203. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +784 -427
  204. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  205. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  206. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  207. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +188 -124
  208. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  209. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +437 -26
  210. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  211. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +119 -59
  212. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  213. package/artifacts/contracts/shared/Component.sol/Component.json +19 -31
  214. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  215. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +206 -252
  216. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  217. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +110 -72
  218. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  219. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +130 -39
  220. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +1 -1
  221. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +1 -1
  222. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +1 -1
  223. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +2 -2
  224. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  225. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +19 -31
  226. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  227. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +111 -157
  228. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  229. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -31
  230. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  231. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  232. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +19 -0
  233. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  234. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  235. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +19 -0
  236. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  237. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  238. package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
  239. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  240. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -2
  241. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  242. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -31
  243. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  244. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  245. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  246. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  247. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +21 -2
  248. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  249. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  250. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  251. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -0
  252. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  253. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  254. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  255. package/artifacts/contracts/shared/Service.sol/Service.json +29 -0
  256. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  257. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +62 -161
  258. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
  259. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +118 -29
  260. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  261. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +32 -32
  262. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  263. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1453 -153
  264. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  265. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +187 -107
  266. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.dbg.json +4 -0
  267. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.json +50 -0
  268. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  269. package/artifacts/contracts/staking/Staking.sol/Staking.json +1565 -239
  270. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  271. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +470 -0
  272. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  273. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +129 -70
  274. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  275. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +294 -177
  276. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  277. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +229 -157
  278. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  279. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +87 -53
  280. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  281. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +1633 -819
  282. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +4 -0
  283. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +309 -0
  284. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  285. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +159 -87
  286. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  287. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/Amount.sol/AmountLib.json +10 -10
  289. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +45 -19
  291. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
  292. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +193 -0
  293. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  295. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  297. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/Fee.sol/FeeLib.json +93 -37
  299. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  300. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  301. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +1 -1
  302. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +2 -2
  303. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  304. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  305. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  306. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  307. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  308. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +33 -31
  309. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  310. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  311. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  312. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  313. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  314. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  315. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  316. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +9 -4
  317. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  318. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +42 -157
  319. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  320. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +45 -2
  321. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  322. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
  323. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  324. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
  325. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  326. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  327. package/artifacts/contracts/type/String.sol/StrLib.json +50 -2
  328. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  329. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +3 -3
  330. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  331. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +60 -36
  332. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  333. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  334. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  335. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +56 -2
  336. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  337. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.json +10 -0
  338. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  339. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +65 -27
  340. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  341. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +15 -2
  342. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  343. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.json +10 -0
  344. package/contracts/accounting/AccountingService.sol +15 -3
  345. package/contracts/accounting/IAccountingService.sol +4 -2
  346. package/contracts/authorization/AccessAdmin.sol +396 -275
  347. package/contracts/authorization/AccessAdminLib.sol +396 -0
  348. package/contracts/authorization/AccessManagerCloneable.sol +40 -31
  349. package/contracts/authorization/Authorization.sol +142 -262
  350. package/contracts/authorization/IAccess.sol +25 -7
  351. package/contracts/authorization/IAccessAdmin.sol +83 -79
  352. package/contracts/authorization/IAuthorization.sol +9 -43
  353. package/contracts/authorization/IServiceAuthorization.sol +55 -17
  354. package/contracts/authorization/ServiceAuthorization.sol +248 -34
  355. package/contracts/distribution/BasicDistribution.sol +14 -13
  356. package/contracts/distribution/BasicDistributionAuthorization.sol +29 -9
  357. package/contracts/distribution/Distribution.sol +22 -64
  358. package/contracts/distribution/DistributionService.sol +166 -75
  359. package/contracts/distribution/IDistributionComponent.sol +3 -10
  360. package/contracts/distribution/IDistributionService.sol +34 -19
  361. package/contracts/examples/fire/FirePool.sol +0 -4
  362. package/contracts/examples/fire/FirePoolAuthorization.sol +1 -1
  363. package/contracts/examples/fire/FireProduct.sol +7 -12
  364. package/contracts/examples/fire/FireProductAuthorization.sol +1 -1
  365. package/contracts/examples/unpermissioned/SimpleDistribution.sol +32 -8
  366. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +1 -1
  367. package/contracts/examples/unpermissioned/SimpleOracle.sol +4 -8
  368. package/contracts/examples/unpermissioned/SimplePool.sol +0 -5
  369. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +1 -1
  370. package/contracts/examples/unpermissioned/SimpleProduct.sol +94 -27
  371. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +1 -1
  372. package/contracts/instance/BaseStore.sol +93 -0
  373. package/contracts/instance/BundleSet.sol +4 -4
  374. package/contracts/instance/IBaseStore.sol +37 -0
  375. package/contracts/instance/IInstance.sol +103 -13
  376. package/contracts/instance/IInstanceService.sol +54 -7
  377. package/contracts/instance/Instance.sol +177 -61
  378. package/contracts/instance/InstanceAdmin.sol +249 -196
  379. package/contracts/instance/InstanceAuthorizationV3.sol +117 -67
  380. package/contracts/instance/InstanceReader.sol +398 -382
  381. package/contracts/instance/InstanceService.sol +283 -173
  382. package/contracts/instance/InstanceStore.sol +153 -128
  383. package/contracts/instance/ProductStore.sol +290 -0
  384. package/contracts/instance/RiskSet.sol +14 -5
  385. package/contracts/instance/TargetNames.sol +10 -0
  386. package/contracts/instance/base/BalanceStore.sol +4 -6
  387. package/contracts/instance/base/ObjectLifecycle.sol +2 -6
  388. package/contracts/instance/base/ObjectSet.sol +7 -8
  389. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  390. package/contracts/instance/module/IBundle.sol +6 -5
  391. package/contracts/instance/module/IComponents.sol +15 -6
  392. package/contracts/instance/module/IDistribution.sol +21 -8
  393. package/contracts/instance/module/IPolicy.sol +28 -8
  394. package/contracts/instance/module/IRisk.sol +2 -0
  395. package/contracts/oracle/BasicOracle.sol +3 -6
  396. package/contracts/oracle/BasicOracleAuthorization.sol +15 -8
  397. package/contracts/oracle/IOracle.sol +9 -4
  398. package/contracts/oracle/Oracle.sol +4 -8
  399. package/contracts/oracle/OracleService.sol +8 -8
  400. package/contracts/pool/BasicPool.sol +4 -18
  401. package/contracts/pool/BasicPoolAuthorization.sol +29 -16
  402. package/contracts/pool/BundleService.sol +57 -96
  403. package/contracts/pool/IBundleService.sol +27 -32
  404. package/contracts/pool/IPoolService.sol +57 -40
  405. package/contracts/pool/Pool.sol +15 -29
  406. package/contracts/pool/PoolLib.sol +341 -0
  407. package/contracts/pool/PoolService.sol +189 -190
  408. package/contracts/product/ApplicationService.sol +85 -17
  409. package/contracts/product/BasicProduct.sol +2 -5
  410. package/contracts/product/BasicProductAuthorization.sol +31 -9
  411. package/contracts/product/ClaimService.sol +112 -194
  412. package/contracts/product/IApplicationService.sol +24 -2
  413. package/contracts/product/IClaimService.sol +6 -6
  414. package/contracts/product/IPolicyService.sol +20 -8
  415. package/contracts/product/IPricingService.sol +1 -0
  416. package/contracts/product/IRiskService.sol +25 -10
  417. package/contracts/product/PolicyService.sol +110 -201
  418. package/contracts/product/PolicyServiceLib.sol +139 -0
  419. package/contracts/product/PricingService.sol +33 -31
  420. package/contracts/product/Product.sol +61 -33
  421. package/contracts/product/RiskService.sol +63 -25
  422. package/contracts/registry/IRegistry.sol +17 -9
  423. package/contracts/registry/IRelease.sol +6 -3
  424. package/contracts/registry/Registry.sol +19 -9
  425. package/contracts/registry/RegistryAdmin.sol +100 -253
  426. package/contracts/registry/RegistryAuthorization.sol +336 -0
  427. package/contracts/registry/RegistryService.sol +1 -1
  428. package/contracts/registry/ReleaseAdmin.sol +62 -112
  429. package/contracts/registry/ReleaseRegistry.sol +57 -43
  430. package/contracts/registry/ServiceAuthorizationV3.sol +131 -31
  431. package/contracts/registry/TokenRegistry.sol +56 -52
  432. package/contracts/shared/Component.sol +19 -35
  433. package/contracts/shared/ComponentService.sol +281 -290
  434. package/contracts/shared/ContractLib.sol +137 -77
  435. package/contracts/shared/IComponent.sol +1 -4
  436. package/contracts/shared/IComponentService.sol +21 -26
  437. package/contracts/shared/INftOwnable.sol +2 -0
  438. package/contracts/shared/IRegisterable.sol +0 -1
  439. package/contracts/shared/InitializableERC165.sol +9 -1
  440. package/contracts/shared/InstanceLinkedComponent.sol +8 -13
  441. package/contracts/shared/NftOwnable.sol +4 -2
  442. package/contracts/shared/PolicyHolder.sol +3 -2
  443. package/contracts/shared/Registerable.sol +1 -4
  444. package/contracts/shared/Service.sol +6 -4
  445. package/contracts/shared/TokenHandler.sol +44 -91
  446. package/contracts/staking/IStaking.sol +266 -72
  447. package/contracts/staking/IStakingService.sol +45 -75
  448. package/contracts/staking/ITargetLimitHandler.sol +17 -0
  449. package/contracts/staking/Staking.sol +475 -204
  450. package/contracts/staking/{StakeManagerLib.sol → StakingLib.sol} +55 -84
  451. package/contracts/staking/StakingManager.sol +4 -3
  452. package/contracts/staking/StakingReader.sol +58 -77
  453. package/contracts/staking/StakingService.sol +62 -180
  454. package/contracts/staking/StakingServiceManager.sol +6 -4
  455. package/contracts/staking/StakingStore.sol +1093 -330
  456. package/contracts/staking/TargetHandler.sol +132 -0
  457. package/contracts/staking/TargetManagerLib.sol +69 -46
  458. package/contracts/type/Amount.sol +4 -0
  459. package/contracts/type/Blocknumber.sol +15 -15
  460. package/contracts/type/ChainId.sol +101 -0
  461. package/contracts/type/Fee.sol +8 -8
  462. package/contracts/type/NftId.sol +3 -3
  463. package/contracts/type/ObjectType.sol +69 -52
  464. package/contracts/type/RiskId.sol +4 -3
  465. package/contracts/type/RoleId.sol +60 -45
  466. package/contracts/type/Seconds.sol +19 -0
  467. package/contracts/type/Selector.sol +5 -0
  468. package/contracts/type/String.sol +12 -0
  469. package/contracts/type/Timestamp.sol +4 -2
  470. package/contracts/type/UFixed.sol +28 -10
  471. package/contracts/type/Version.sol +39 -0
  472. package/contracts/upgradeability/IVersionable.sol +3 -0
  473. package/contracts/upgradeability/ProxyManager.sol +25 -11
  474. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +12 -2
  475. package/contracts/upgradeability/Versionable.sol +6 -3
  476. package/package.json +2 -2
  477. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +0 -4
  478. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +0 -24
  479. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  480. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
  481. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
  482. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +0 -485
  483. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  484. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  485. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +0 -538
  486. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
  487. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -440
  488. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +0 -4
  489. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +0 -205
  490. package/contracts/instance/module/IAccess.sol +0 -46
  491. package/contracts/shared/ComponentVerifyingService.sol +0 -128
  492. package/contracts/shared/IKeyValueStore.sol +0 -54
  493. package/contracts/shared/KeyValueStore.sol +0 -131
  494. package/contracts/staking/StakingLifecycle.sol +0 -23
@@ -1,19 +1,21 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Amount} from "../type/Amount.sol";
5
- import {COMPONENT, DISTRIBUTION, DISTRIBUTOR} from "../type/ObjectType.sol";
6
4
  import {IAuthorization} from "../authorization/IAuthorization.sol";
7
- import {IDistributionService} from "./IDistributionService.sol";
8
- import {NftId, NftIdLib} from "../type/NftId.sol";
9
- import {ReferralId, ReferralStatus, ReferralLib} from "../type/Referral.sol";
10
- import {Fee} from "../type/Fee.sol";
11
- import {InstanceLinkedComponent} from "../shared/InstanceLinkedComponent.sol";
12
5
  import {IComponentService} from "../shared/IComponentService.sol";
13
6
  import {IDistributionComponent} from "./IDistributionComponent.sol";
14
- import {UFixed} from "../type/UFixed.sol";
7
+ import {IDistributionService} from "./IDistributionService.sol";
8
+
9
+ import {Amount} from "../type/Amount.sol";
10
+ import {COMPONENT, DISTRIBUTION, DISTRIBUTOR} from "../type/ObjectType.sol";
15
11
  import {DistributorType} from "../type/DistributorType.sol";
12
+ import {Fee} from "../type/Fee.sol";
13
+ import {NftId} from "../type/NftId.sol";
14
+ import {ReferralId, ReferralStatus, ReferralLib} from "../type/Referral.sol";
15
+ import {InstanceLinkedComponent} from "../shared/InstanceLinkedComponent.sol";
16
+ import {Seconds} from "../type/Seconds.sol";
16
17
  import {Timestamp} from "../type/Timestamp.sol";
18
+ import {UFixed} from "../type/UFixed.sol";
17
19
 
18
20
 
19
21
  abstract contract Distribution is
@@ -26,17 +28,8 @@ abstract contract Distribution is
26
28
  struct DistributionStorage {
27
29
  IComponentService _componentService;
28
30
  IDistributionService _distributionService;
29
- mapping(address distributor => NftId distributorNftId) _distributorNftId;
30
31
  }
31
32
 
32
- modifier onlyDistributor() {
33
- if (!isDistributor(msg.sender)) {
34
- revert ErrorDistributionNotDistributor(msg.sender);
35
- }
36
- _;
37
- }
38
-
39
-
40
33
  function processRenewal(
41
34
  ReferralId referralId,
42
35
  uint256 feeAmount
@@ -44,6 +37,7 @@ abstract contract Distribution is
44
37
  external
45
38
  virtual
46
39
  restricted()
40
+ // solhint-disable-next-line no-empty-blocks
47
41
  {
48
42
  // default is no action
49
43
  }
@@ -54,7 +48,6 @@ abstract contract Distribution is
54
48
  external
55
49
  virtual
56
50
  restricted()
57
- onlyDistributor()
58
51
  onlyNftOfType(distributorNftId, DISTRIBUTOR())
59
52
  onlyNftOwner(distributorNftId)
60
53
  returns (Amount withdrawnAmount)
@@ -62,29 +55,9 @@ abstract contract Distribution is
62
55
  return _withdrawCommission(distributorNftId, amount);
63
56
  }
64
57
 
65
-
66
- function isDistributor(address candidate)
67
- public
68
- view
69
- returns (bool)
70
- {
71
- DistributionStorage storage $ = _getDistributionStorage();
72
- return $._distributorNftId[candidate].gtz();
73
- }
74
-
75
-
76
- function getDistributorNftId(address distributor)
77
- public
78
- view
79
- returns (NftId distributorNftId)
80
- {
81
- DistributionStorage storage $ = _getDistributionStorage();
82
- return $._distributorNftId[distributor];
83
- }
84
-
85
-
86
58
  function getDiscountPercentage(string memory referralCode)
87
59
  external
60
+ virtual
88
61
  view
89
62
  returns (
90
63
  UFixed discountPercentage,
@@ -100,6 +73,7 @@ abstract contract Distribution is
100
73
  string memory referralCode
101
74
  )
102
75
  public
76
+ virtual
103
77
  view
104
78
  returns (ReferralId referralId)
105
79
  {
@@ -110,7 +84,7 @@ abstract contract Distribution is
110
84
 
111
85
 
112
86
  function calculateRenewalFeeAmount(
113
- ReferralId referralId,
87
+ ReferralId, // referralId
114
88
  uint256 netPremiumAmount
115
89
  )
116
90
  external
@@ -124,34 +98,31 @@ abstract contract Distribution is
124
98
 
125
99
 
126
100
  /// @dev Returns true iff the component needs to be called when selling/renewing policis
127
- function isVerifying() external pure returns (bool verifying) {
101
+ function isVerifying() external virtual pure returns (bool verifying) {
128
102
  return true;
129
103
  }
130
104
 
131
105
 
132
- function _initializeDistribution(
106
+ function __Distribution_init(
133
107
  address registry,
134
108
  NftId productNftId,
135
109
  IAuthorization authorization,
110
+ bool isInterceptor,
136
111
  address initialOwner,
137
- string memory name,
138
- address token,
139
- bytes memory componentData // component specifidc data
112
+ string memory name
140
113
  )
141
114
  internal
142
115
  virtual
143
116
  onlyInitializing()
144
117
  {
145
- _initializeInstanceLinkedComponent(
118
+ __InstanceLinkedComponent_init(
146
119
  registry,
147
120
  productNftId,
148
121
  name,
149
- token,
150
122
  DISTRIBUTION(),
151
123
  authorization,
152
- true,
153
- initialOwner,
154
- componentData);
124
+ isInterceptor,
125
+ initialOwner);
155
126
 
156
127
  DistributionStorage storage $ = _getDistributionStorage();
157
128
  $._distributionService = IDistributionService(_getServiceAddress(DISTRIBUTION()));
@@ -180,7 +151,7 @@ abstract contract Distribution is
180
151
  UFixed maxDiscountPercentage,
181
152
  UFixed commissionPercentage,
182
153
  uint32 maxReferralCount,
183
- uint32 maxReferralLifetime,
154
+ Seconds maxReferralLifetime,
184
155
  bool allowSelfReferrals,
185
156
  bool allowRenewals,
186
157
  bytes memory data
@@ -213,16 +184,11 @@ abstract contract Distribution is
213
184
  returns(NftId distributorNftId)
214
185
  {
215
186
  DistributionStorage storage $ = _getDistributionStorage();
216
- if($._distributorNftId[distributor].gtz()) {
217
- revert ErrorDistributionAlreadyDistributor(distributor, $._distributorNftId[distributor]);
218
- }
219
187
 
220
188
  distributorNftId = $._distributionService.createDistributor(
221
189
  distributor,
222
190
  distributorType,
223
191
  data);
224
-
225
- $._distributorNftId[distributor] = distributorNftId;
226
192
  }
227
193
 
228
194
  /// @dev Uptates the distributor type for the specified distributor.
@@ -271,14 +237,6 @@ abstract contract Distribution is
271
237
  return _getDistributionStorage()._distributionService.withdrawCommission(distributorNftId, amount);
272
238
  }
273
239
 
274
- function _nftTransferFrom(address from, address to, uint256 tokenId, address operator) internal virtual override {
275
- // keep track of distributor nft owner
276
- emit LogDistributorUpdated(to, operator);
277
- DistributionStorage storage $ = _getDistributionStorage();
278
- $._distributorNftId[from] = NftIdLib.zero();
279
- $._distributorNftId[to] = NftIdLib.toNftId(tokenId);
280
- }
281
-
282
240
  function _getDistributionStorage() private pure returns (DistributionStorage storage $) {
283
241
  assembly {
284
242
  $.slot := DISTRIBUTION_STORAGE_LOCATION_V1
@@ -2,31 +2,35 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {IAccountingService} from "../accounting/IAccountingService.sol";
5
- import {IRegistry} from "../registry/IRegistry.sol";
6
- import {IInstance} from "../instance/IInstance.sol";
7
5
  import {IComponentService} from "../shared/IComponentService.sol";
6
+ import {IDistribution} from "../instance/module/IDistribution.sol";
7
+ import {IDistributionService} from "./IDistributionService.sol";
8
+ import {IInstance} from "../instance/IInstance.sol";
8
9
  import {IInstanceService} from "../instance/IInstanceService.sol";
10
+ import {IRegistry} from "../registry/IRegistry.sol";
9
11
  import {IRegistryService} from "../registry/IRegistryService.sol";
10
- import {InstanceReader} from "../instance/InstanceReader.sol";
11
12
  import {IComponents} from "../instance/module/IComponents.sol";
12
13
  import {IPolicy} from "../instance/module/IPolicy.sol";
13
14
 
14
15
  import {Amount, AmountLib} from "../type/Amount.sol";
16
+ import {ContractLib} from "../shared/ContractLib.sol";
17
+ import {DistributorType, DistributorTypeLib} from "../type/DistributorType.sol";
15
18
  import {NftId, NftIdLib} from "../type/NftId.sol";
16
19
  import {KEEP_STATE} from "../type/StateId.sol";
17
20
  import {ObjectType, ACCOUNTING, COMPONENT, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR, REGISTRY} from "../type/ObjectType.sol";
18
- import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
19
- import {IDistributionService} from "./IDistributionService.sol";
20
- import {UFixed} from "../type/UFixed.sol";
21
- import {DistributorType, DistributorTypeLib} from "../type/DistributorType.sol";
22
- import {ReferralId, ReferralLib} from "../type/Referral.sol";
23
- import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
24
- import {IDistribution} from "../instance/module/IDistribution.sol";
21
+ import {InstanceReader} from "../instance/InstanceReader.sol";
25
22
  import {InstanceStore} from "../instance/InstanceStore.sol";
23
+ // TODO PoolLib feels wrong, should likely go in a component type independent lib
24
+ import {PoolLib} from "../pool/PoolLib.sol";
25
+ import {ReferralId, ReferralStatus, ReferralLib, REFERRAL_OK, REFERRAL_ERROR_UNKNOWN, REFERRAL_ERROR_EXPIRED, REFERRAL_ERROR_EXHAUSTED} from "../type/Referral.sol";
26
+ import {Seconds} from "../type/Seconds.sol";
27
+ import {Service} from "../shared/Service.sol";
28
+ import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
29
+ import {UFixed, UFixedLib} from "../type/UFixed.sol";
26
30
 
27
31
 
28
32
  contract DistributionService is
29
- ComponentVerifyingService,
33
+ Service,
30
34
  IDistributionService
31
35
  {
32
36
  IAccountingService private _accountingService;
@@ -64,19 +68,20 @@ contract DistributionService is
64
68
  UFixed maxDiscountPercentage,
65
69
  UFixed commissionPercentage,
66
70
  uint32 maxReferralCount,
67
- uint32 maxReferralLifetime,
71
+ Seconds maxReferralLifetime,
68
72
  bool allowSelfReferrals,
69
73
  bool allowRenewals,
70
74
  bytes memory data
71
75
  )
72
76
  external
77
+ virtual
78
+ restricted()
73
79
  returns (DistributorType distributorType)
74
80
  {
75
- (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
76
- // InstanceReader instanceReader = instance.getInstanceReader();
81
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveDistribution();
77
82
 
78
83
  {
79
- NftId productNftId = _getProductNftId(distributionNftId);
84
+ NftId productNftId = getRegistry().getParentNftId(distributionNftId);
80
85
  IComponents.FeeInfo memory feeInfo = instance.getInstanceReader().getFeeInfo(productNftId);
81
86
 
82
87
  UFixed variableDistributionFees = feeInfo.distributionFee.fractionalFee;
@@ -87,24 +92,27 @@ contract DistributionService is
87
92
  }
88
93
  UFixed maxDiscountPercentageLimit = variableDistributionFees - variableFeesPartsTotal;
89
94
 
90
- if (maxDiscountPercentage.gt(maxDiscountPercentageLimit)) {
95
+ if (maxDiscountPercentage > maxDiscountPercentageLimit) {
91
96
  revert ErrorDistributionServiceMaxDiscountTooHigh(maxDiscountPercentage.toInt1000(), maxDiscountPercentageLimit.toInt1000());
92
97
  }
93
98
  }
94
99
 
95
100
  distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
96
- IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
97
- name,
98
- minDiscountPercentage,
99
- maxDiscountPercentage,
100
- commissionPercentage,
101
- maxReferralCount,
102
- maxReferralLifetime,
103
- allowSelfReferrals,
104
- allowRenewals,
105
- data);
101
+ IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo({
102
+ name: name,
103
+ distributionNftId: distributionNftId,
104
+ minDiscountPercentage: minDiscountPercentage,
105
+ maxDiscountPercentage: maxDiscountPercentage,
106
+ commissionPercentage: commissionPercentage,
107
+ maxReferralCount: maxReferralCount,
108
+ maxReferralLifetime: maxReferralLifetime,
109
+ allowSelfReferrals: allowSelfReferrals,
110
+ allowRenewals: allowRenewals,
111
+ data: data});
106
112
 
107
113
  instance.getInstanceStore().createDistributorType(distributorType, info);
114
+
115
+ emit LogDistributionServiceDistributorTypeCreated(distributionNftId, name);
108
116
  }
109
117
 
110
118
 
@@ -115,9 +123,11 @@ contract DistributionService is
115
123
  )
116
124
  external
117
125
  virtual
126
+ restricted()
118
127
  returns (NftId distributorNftId)
119
128
  {
120
- (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
129
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveDistribution();
130
+ _checkDistributionType(instance.getInstanceReader(), distributorType, distributionNftId);
121
131
 
122
132
  distributorNftId = _registryService.registerDistributor(
123
133
  IRegistry.ObjectInfo(
@@ -130,28 +140,37 @@ contract DistributionService is
130
140
  ""
131
141
  ));
132
142
 
133
- IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo(
134
- distributorType,
135
- true, // active
136
- data,
137
- 0);
143
+ IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo({
144
+ distributorType: distributorType,
145
+ active: true,
146
+ numPoliciesSold: 0,
147
+ data: data});
138
148
 
139
149
  instance.getInstanceStore().createDistributor(distributorNftId, info);
150
+
151
+ emit LogDistributionServiceDistributorCreated(distributionNftId, distributorNftId, distributorType, distributor);
140
152
  }
141
153
 
142
154
  function changeDistributorType(
143
155
  NftId distributorNftId,
144
- DistributorType distributorType,
156
+ DistributorType newDistributorType,
145
157
  bytes memory data
146
158
  )
147
159
  external
148
160
  virtual
161
+ restricted()
149
162
  {
150
- (,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
163
+ _checkNftType(distributorNftId, DISTRIBUTOR());
164
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveDistribution();
165
+ _checkDistributionType(instance.getInstanceReader(), newDistributorType, distributionNftId);
166
+
151
167
  IDistribution.DistributorInfo memory distributorInfo = instance.getInstanceReader().getDistributorInfo(distributorNftId);
152
- distributorInfo.distributorType = distributorType;
168
+ DistributorType oldDistributorType = distributorInfo.distributorType;
169
+ distributorInfo.distributorType = newDistributorType;
153
170
  distributorInfo.data = data;
154
171
  instance.getInstanceStore().updateDistributor(distributorNftId, distributorInfo, KEEP_STATE());
172
+
173
+ emit LogDistributionServiceDistributorTypeChanged(distributorNftId, oldDistributorType, newDistributorType);
155
174
  }
156
175
 
157
176
 
@@ -165,16 +184,22 @@ contract DistributionService is
165
184
  )
166
185
  external
167
186
  virtual
187
+ restricted()
168
188
  onlyNftOfType(distributorNftId, DISTRIBUTOR())
169
189
  returns (ReferralId referralId)
170
190
  {
171
- (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
191
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveDistribution();
172
192
 
173
193
  if (bytes(code).length == 0) {
174
- revert ErrorIDistributionServiceInvalidReferral(code);
194
+ revert ErrorDistributionServiceInvalidReferral();
195
+ }
196
+ if (expiryAt.eqz() || expiryAt < TimestampLib.current()) {
197
+ revert ErrorDistributionServiceExpirationInvalid(expiryAt);
175
198
  }
176
- if (expiryAt.eqz() || expiryAt.lte(TimestampLib.blockTimestamp())) {
177
- revert ErrorIDistributionServiceExpirationInvalid(expiryAt);
199
+
200
+ NftId distributorDistributionNftId = getRegistry().getParentNftId(distributorNftId);
201
+ if (distributorDistributionNftId != distributionNftId) {
202
+ revert ErrorDistributionServiceDistributorDistributionMismatch(distributorNftId, distributorDistributionNftId, distributionNftId);
178
203
  }
179
204
 
180
205
  {
@@ -183,32 +208,35 @@ contract DistributionService is
183
208
  IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
184
209
 
185
210
  if (distributorTypeData.maxReferralCount < maxReferrals) {
186
- revert ErrorIDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount);
211
+ revert ErrorDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount, maxReferrals);
187
212
  }
188
213
  if (distributorTypeData.minDiscountPercentage > discountPercentage) {
189
- revert ErrorIDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage.toInt(), discountPercentage.toInt());
214
+ revert ErrorDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage, discountPercentage);
190
215
  }
191
216
  if (distributorTypeData.maxDiscountPercentage < discountPercentage) {
192
- revert ErrorIDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage.toInt(), discountPercentage.toInt());
217
+ revert ErrorDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage, discountPercentage);
193
218
  }
194
- if (expiryAt.toInt() - TimestampLib.blockTimestamp().toInt() > distributorTypeData.maxReferralLifetime) {
195
- revert ErrorIDistributionServiceExpiryTooLong(distributorTypeData.maxReferralLifetime, expiryAt.toInt());
219
+ if (expiryAt.toInt() - TimestampLib.current().toInt() > distributorTypeData.maxReferralLifetime.toInt()) {
220
+ revert ErrorDistributionServiceExpiryTooLong(distributorTypeData.maxReferralLifetime, expiryAt);
196
221
  }
197
222
  }
198
223
 
199
224
  {
200
225
  referralId = ReferralLib.toReferralId(distributionNftId, code);
201
- IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
202
- distributorNftId,
203
- code,
204
- discountPercentage,
205
- maxReferrals,
206
- 0, // used referrals
207
- expiryAt,
208
- data
209
- );
226
+ IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo({
227
+ distributionNftId: distributionNftId,
228
+ distributorNftId: distributorNftId,
229
+ referralCode: code,
230
+ discountPercentage: discountPercentage,
231
+ maxReferrals: maxReferrals,
232
+ usedReferrals: 0,
233
+ expiryAt: expiryAt,
234
+ data: data
235
+ });
210
236
 
211
237
  instance.getInstanceStore().createReferral(referralId, info);
238
+
239
+ emit LogDistributionServiceReferralCreated(distributionNftId, distributorNftId, referralId, code);
212
240
  }
213
241
  }
214
242
 
@@ -223,14 +251,14 @@ contract DistributionService is
223
251
  onlyNftOfType(distributionNftId, DISTRIBUTION())
224
252
  {
225
253
  if (referralIsValid(distributionNftId, referralId)) {
226
- IRegistry registry = getRegistry();
227
- IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionNftId);
228
- IInstance instance = _getInstanceForComponent(registry, distributionInfo.parentNftId);
254
+ IInstance instance = IInstance(ContractLib.getInstanceForComponent(getRegistry(), distributionNftId));
229
255
 
230
256
  // update book keeping for referral info
231
257
  IDistribution.ReferralInfo memory referralInfo = instance.getInstanceReader().getReferralInfo(referralId);
232
258
  referralInfo.usedReferrals += 1;
233
259
  instance.getInstanceStore().updateReferral(referralId, referralInfo, KEEP_STATE());
260
+
261
+ emit LogDistributionServiceReferralProcessed(distributionNftId, referralInfo.distributorNftId, referralId, referralInfo.usedReferrals);
234
262
  }
235
263
  }
236
264
 
@@ -244,9 +272,7 @@ contract DistributionService is
244
272
  restricted()
245
273
  onlyNftOfType(distributionNftId, DISTRIBUTION())
246
274
  {
247
- IRegistry registry = getRegistry();
248
- IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionNftId);
249
- IInstance instance = _getInstanceForComponent(registry, distributionInfo.parentNftId);
275
+ IInstance instance = IInstance(ContractLib.getInstanceForComponent(getRegistry(), distributionNftId));
250
276
  InstanceReader reader = instance.getInstanceReader();
251
277
  InstanceStore store = instance.getInstanceStore();
252
278
 
@@ -273,30 +299,32 @@ contract DistributionService is
273
299
  // increase distribution balance by distribution owner fee
274
300
  _accountingService.increaseDistributionBalance(store, distributionNftId, AmountLib.zero(), distributionOwnerFee);
275
301
  }
302
+
303
+ emit LogDistributionServiceSaleProcessed(distributionNftId, referralId);
276
304
  }
277
305
 
278
306
  /// @inheritdoc IDistributionService
279
307
  function withdrawCommission(NftId distributorNftId, Amount amount)
280
308
  public
281
309
  virtual
282
- // TODO: restricted() (once #462 is done)
310
+ restricted()
283
311
  onlyNftOfType(distributorNftId, DISTRIBUTOR())
284
312
  returns (Amount withdrawnAmount)
285
313
  {
286
- (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
314
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveDistribution();
287
315
  InstanceReader reader = instance.getInstanceReader();
288
316
 
289
317
  IComponents.ComponentInfo memory distributionInfo = reader.getComponentInfo(distributionNftId);
290
- address distributionWallet = distributionInfo.tokenHandler.getWallet();
318
+ // address distributionWallet = distributionInfo.tokenHandler.getWallet();
291
319
 
292
320
  Amount commissionAmount = reader.getFeeAmount(distributorNftId);
293
321
 
294
322
  // determine withdrawn amount
295
323
  withdrawnAmount = amount;
296
- if (withdrawnAmount.gte(AmountLib.max())) {
324
+ if (withdrawnAmount >= AmountLib.max()) {
297
325
  withdrawnAmount = commissionAmount;
298
326
  } else {
299
- if (withdrawnAmount.gt(commissionAmount)) {
327
+ if (withdrawnAmount > commissionAmount) {
300
328
  revert ErrorDistributionServiceCommissionWithdrawAmountExceedsLimit(withdrawnAmount, commissionAmount);
301
329
  }
302
330
  }
@@ -313,13 +341,14 @@ contract DistributionService is
313
341
  // transfer amount to distributor
314
342
  {
315
343
  address distributor = getRegistry().ownerOf(distributorNftId);
316
- emit LogDistributionServiceCommissionWithdrawn(distributorNftId, distributor, address(distributionInfo.token), withdrawnAmount);
317
- distributionInfo.tokenHandler.distributeTokens(distributionWallet, distributor, withdrawnAmount);
344
+ emit LogDistributionServiceCommissionWithdrawn(distributorNftId, distributor, address(distributionInfo.tokenHandler.TOKEN()), withdrawnAmount);
345
+ distributionInfo.tokenHandler.pushToken(distributor, withdrawnAmount);
318
346
  }
319
347
  }
320
348
 
321
349
  function referralIsValid(NftId distributionNftId, ReferralId referralId)
322
350
  public
351
+ virtual
323
352
  view
324
353
  onlyNftOfType(distributionNftId, DISTRIBUTION())
325
354
  returns (bool isValid)
@@ -328,29 +357,91 @@ contract DistributionService is
328
357
  return false;
329
358
  }
330
359
 
331
- IRegistry registry = getRegistry();
332
- IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionNftId);
333
- IInstance instance = _getInstanceForComponent(registry, distributionInfo.parentNftId);
360
+ IInstance instance = IInstance(ContractLib.getInstanceForComponent(getRegistry(), distributionNftId));
334
361
  IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
335
362
 
336
363
  if (info.distributorNftId.eqz()) {
337
364
  return false;
338
365
  }
339
366
 
340
- isValid = info.expiryAt.eqz() || (info.expiryAt.gtz() && TimestampLib.blockTimestamp() <= info.expiryAt);
367
+ // ensure the referral was created on the same distribution
368
+ if(info.distributionNftId != distributionNftId) {
369
+ revert ErrorDistributionServiceReferralDistributionMismatch(referralId, info.distributionNftId, distributionNftId);
370
+ }
371
+
372
+ isValid = info.expiryAt.eqz() || (info.expiryAt.gtz() && TimestampLib.current() <= info.expiryAt);
341
373
  isValid = isValid && info.usedReferrals < info.maxReferrals;
342
374
  }
343
375
 
344
- function _getInstanceForDistribution(NftId distributionNftId)
376
+
377
+ function getDiscountPercentage(
378
+ InstanceReader instanceReader,
379
+ ReferralId referralId
380
+ )
381
+ external
382
+ virtual
383
+ view
384
+ returns (
385
+ UFixed discountPercentage,
386
+ ReferralStatus status
387
+ )
388
+ {
389
+ IDistribution.ReferralInfo memory info = instanceReader.getReferralInfo(
390
+ referralId);
391
+
392
+ if (info.expiryAt.eqz()) {
393
+ return (
394
+ UFixedLib.zero(),
395
+ REFERRAL_ERROR_UNKNOWN());
396
+ }
397
+
398
+ if (info.expiryAt < TimestampLib.current()) {
399
+ return (
400
+ UFixedLib.zero(),
401
+ REFERRAL_ERROR_EXPIRED());
402
+ }
403
+
404
+ if (info.usedReferrals >= info.maxReferrals) {
405
+ return (
406
+ UFixedLib.zero(),
407
+ REFERRAL_ERROR_EXHAUSTED());
408
+ }
409
+
410
+ return (
411
+ info.discountPercentage,
412
+ REFERRAL_OK()
413
+ );
414
+
415
+ }
416
+
417
+
418
+ function _checkDistributionType(InstanceReader instanceReader, DistributorType distributorType, NftId expectedDistributionNftId)
345
419
  internal
420
+ view
421
+ {
422
+ // enfore distributor type belongs to the calling distribution
423
+ NftId distributorTypeDistributionNftId = instanceReader.getDistributorTypeInfo(distributorType).distributionNftId;
424
+
425
+ if (distributorTypeDistributionNftId != expectedDistributionNftId) {
426
+ revert ErrorDistributionServiceDistributorTypeDistributionMismatch(distributorType, distributorTypeDistributionNftId, expectedDistributionNftId);
427
+ }
428
+ }
429
+
430
+
431
+
432
+ function _getAndVerifyActiveDistribution()
433
+ internal
434
+ virtual
346
435
  view
347
- returns(IInstance instance)
436
+ returns (
437
+ NftId poolNftId,
438
+ IInstance instance
439
+ )
348
440
  {
349
- NftId instanceNftId = getRegistry().getObjectInfo(distributionNftId).parentNftId;
350
- address instanceAddress = getRegistry().getObjectAddress(instanceNftId);
351
- return IInstance(instanceAddress);
441
+ return PoolLib.getAndVerifyActiveComponent(getRegistry(), msg.sender, DISTRIBUTION());
352
442
  }
353
443
 
444
+
354
445
  function _getDomain() internal pure override returns(ObjectType) {
355
446
  return DISTRIBUTION();
356
447
  }
@@ -1,25 +1,18 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Amount} from "../type/Amount.sol";
5
4
  import {IInstanceLinkedComponent} from "../shared/IInstanceLinkedComponent.sol";
5
+
6
+ import {Amount} from "../type/Amount.sol";
6
7
  import {NftId} from "../type/NftId.sol";
7
8
  import {ReferralId, ReferralStatus} from "../type/Referral.sol";
8
9
  import {UFixed} from "../type/UFixed.sol";
9
10
 
10
- interface IDistributionComponent is IInstanceLinkedComponent {
11
11
 
12
- error ErrorDistributionNotDistributor(address distributor);
13
- error ErrorDistributionAlreadyDistributor(address distributor, NftId distributorNftId);
12
+ interface IDistributionComponent is IInstanceLinkedComponent {
14
13
 
15
14
  event LogDistributorUpdated(address to, address operator);
16
15
 
17
- /// @dev Returns true iff the provided address is registered as a distributor with this distribution component.
18
- function isDistributor(address candidate) external view returns (bool);
19
-
20
- /// @dev Returns the distributor Nft Id for the provided address
21
- function getDistributorNftId(address distributor) external view returns (NftId distributorNftId);
22
-
23
16
  function getDiscountPercentage(
24
17
  string memory referralCode
25
18
  ) external view returns (UFixed discountPercentage, ReferralStatus status);