@etherisc/gif-next 0.0.2-c7609c4-545 → 0.0.2-c7ade86-552

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