@etherisc/gif-next 0.0.2-d9bed37-033 → 0.0.2-d9d5e42-801

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