@etherisc/gif-next 0.0.2-9620cae-586 → 0.0.2-9678144-986

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 (325) hide show
  1. package/README.md +16 -2
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +2 -2
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  5. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
  7. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  10. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
  14. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  16. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +69 -26
  18. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
  20. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +43 -0
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +237 -74
  24. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +66 -38
  26. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +43 -0
  28. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +102 -0
  30. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  31. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  32. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  33. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  34. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  35. package/artifacts/contracts/instance/Instance.sol/Instance.json +2 -2
  36. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +2 -2
  38. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  39. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
  40. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  41. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +79 -121
  42. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +2 -2
  44. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +2 -2
  46. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +70 -192
  48. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  50. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  51. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  52. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  53. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  54. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  55. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  56. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  61. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  62. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  63. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  64. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  65. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +46 -16
  66. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  67. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  68. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  69. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  70. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +30 -0
  71. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  72. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  73. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +30 -0
  74. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  75. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
  76. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  77. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
  78. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  79. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +50 -57
  80. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  81. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  82. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  83. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +462 -51
  84. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  85. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +106 -26
  86. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  87. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +252 -1
  88. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  89. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +43 -56
  90. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  91. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +188 -53
  92. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  93. package/artifacts/contracts/pool/Pool.sol/Pool.json +43 -56
  94. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  95. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +320 -89
  96. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  97. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +67 -19
  98. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  99. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +2 -2
  100. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +2 -2
  102. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  103. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +19 -0
  104. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  105. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
  106. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  107. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +2 -2
  108. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  109. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +2 -2
  110. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  111. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  112. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  113. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +86 -1
  114. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  115. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  116. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +19 -0
  117. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  118. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  119. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +169 -52
  120. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  121. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +42 -26
  122. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  123. package/artifacts/contracts/product/PricingService.sol/PricingService.json +7 -2
  124. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
  126. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  127. package/artifacts/contracts/product/Product.sol/Product.json +19 -0
  128. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  129. package/artifacts/contracts/product/ProductService.sol/ProductService.json +2 -2
  130. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  131. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +2 -2
  132. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  133. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  134. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  135. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  136. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  137. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  138. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  139. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +2 -2
  140. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  141. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
  142. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  143. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
  144. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  145. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  146. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +2 -2
  147. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  148. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +2 -2
  149. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  150. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  151. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  152. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  153. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +271 -62
  154. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  155. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +60 -32
  156. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  157. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  158. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  159. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +153 -0
  160. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  161. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -0
  162. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  163. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  164. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  165. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  166. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  167. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  168. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  169. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  170. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  171. package/artifacts/contracts/shared/{ERC165.sol/ERC165.json → InitializableERC165.sol/InitializableERC165.json} +4 -4
  172. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  173. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -0
  174. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  175. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  176. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  177. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  178. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  179. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  180. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  181. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  182. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  183. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  184. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  185. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  186. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  187. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  188. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  189. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  190. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  191. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +12 -2
  192. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  193. package/artifacts/contracts/staking/Staking.sol/Staking.json +36 -36
  194. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  195. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  196. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +19 -19
  197. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  198. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
  199. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  200. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +2 -2
  201. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  202. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +2 -2
  203. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  204. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +17 -12
  205. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  206. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +7 -2
  207. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  208. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  209. package/artifacts/contracts/type/Amount.sol/AmountLib.json +37 -8
  210. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  211. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  212. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  213. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  214. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  215. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  216. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  217. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  218. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  219. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  220. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  221. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  222. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  223. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  224. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  225. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  226. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  227. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  228. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  229. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  230. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  231. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  232. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  233. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  234. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  235. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  236. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  237. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
  238. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  239. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  240. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  241. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  242. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  243. package/artifacts/contracts/{shared → upgradeability}/ProxyManager.sol/ProxyManager.json +3 -3
  244. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  245. package/artifacts/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +3 -3
  246. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  247. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  248. package/contracts/distribution/BasicDistribution.sol +4 -15
  249. package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
  250. package/contracts/distribution/Distribution.sol +22 -10
  251. package/contracts/distribution/DistributionService.sol +61 -26
  252. package/contracts/distribution/DistributionServiceManager.sol +2 -5
  253. package/contracts/distribution/IDistributionComponent.sol +8 -4
  254. package/contracts/distribution/IDistributionService.sol +12 -0
  255. package/contracts/instance/InstanceAuthorizationV3.sol +2 -0
  256. package/contracts/instance/InstanceReader.sol +8 -0
  257. package/contracts/instance/InstanceServiceManager.sol +2 -6
  258. package/contracts/instance/InstanceStore.sol +2 -1
  259. package/contracts/instance/module/IBundle.sol +1 -1
  260. package/contracts/instance/module/IComponents.sol +0 -5
  261. package/contracts/instance/module/IDistribution.sol +0 -1
  262. package/contracts/mock/Dip.sol +1 -1
  263. package/contracts/oracle/IOracleComponent.sol +2 -1
  264. package/contracts/oracle/Oracle.sol +15 -6
  265. package/contracts/oracle/OracleServiceManager.sol +2 -5
  266. package/contracts/pool/BasicPool.sol +3 -1
  267. package/contracts/pool/BasicPoolAuthorization.sol +9 -0
  268. package/contracts/pool/BundleService.sol +186 -32
  269. package/contracts/pool/BundleServiceManager.sol +2 -5
  270. package/contracts/pool/IBundleService.sol +33 -5
  271. package/contracts/pool/IPoolComponent.sol +6 -0
  272. package/contracts/pool/IPoolService.sol +12 -13
  273. package/contracts/pool/Pool.sol +28 -11
  274. package/contracts/pool/PoolService.sol +164 -65
  275. package/contracts/pool/PoolServiceManager.sol +2 -5
  276. package/contracts/product/ApplicationService.sol +12 -36
  277. package/contracts/product/ApplicationServiceManager.sol +2 -2
  278. package/contracts/product/BasicProduct.sol +3 -33
  279. package/contracts/product/BasicProductAuthorization.sol +3 -0
  280. package/contracts/product/ClaimService.sol +7 -32
  281. package/contracts/product/ClaimServiceManager.sol +2 -2
  282. package/contracts/product/IPolicyService.sol +8 -2
  283. package/contracts/product/IProductComponent.sol +1 -0
  284. package/contracts/product/PolicyService.sol +72 -18
  285. package/contracts/product/PolicyServiceManager.sol +2 -5
  286. package/contracts/product/PricingServiceManager.sol +2 -5
  287. package/contracts/product/Product.sol +20 -1
  288. package/contracts/product/ProductService.sol +7 -32
  289. package/contracts/product/ProductServiceManager.sol +2 -5
  290. package/contracts/registry/RegistryService.sol +4 -18
  291. package/contracts/registry/RegistryServiceManager.sol +2 -2
  292. package/contracts/registry/ReleaseRegistry.sol +0 -2
  293. package/contracts/shared/Component.sol +13 -14
  294. package/contracts/shared/ComponentService.sol +82 -12
  295. package/contracts/shared/ComponentServiceManager.sol +2 -2
  296. package/contracts/shared/IComponentService.sol +15 -9
  297. package/contracts/shared/IInstanceLinkedComponent.sol +6 -0
  298. package/contracts/shared/IService.sol +1 -1
  299. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
  300. package/contracts/shared/InstanceLinkedComponent.sol +21 -0
  301. package/contracts/shared/NftOwnable.sol +2 -2
  302. package/contracts/shared/PolicyHolder.sol +2 -5
  303. package/contracts/shared/Service.sol +3 -4
  304. package/contracts/staking/IStaking.sol +1 -1
  305. package/contracts/staking/Staking.sol +19 -14
  306. package/contracts/staking/StakingManager.sol +2 -5
  307. package/contracts/staking/StakingReader.sol +6 -9
  308. package/contracts/staking/StakingServiceManager.sol +2 -2
  309. package/contracts/staking/StakingStore.sol +5 -15
  310. package/contracts/type/Amount.sol +12 -5
  311. package/contracts/type/Blocknumber.sol +7 -1
  312. package/contracts/type/Referral.sol +1 -0
  313. package/contracts/type/Seconds.sol +13 -1
  314. package/contracts/type/Timestamp.sol +11 -1
  315. package/contracts/type/UFixed.sol +29 -10
  316. package/contracts/{shared → upgradeability}/ProxyManager.sol +3 -4
  317. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  318. package/package.json +1 -1
  319. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  320. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  321. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  322. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  323. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  324. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
  325. /package/contracts/{shared → upgradeability}/Versionable.sol +0 -0
@@ -1,48 +1,22 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IRisk} from "../instance/module/IRisk.sol";
5
- import {IService} from "./IApplicationService.sol";
6
-
7
4
  import {IComponents} from "../instance/module/IComponents.sol";
8
- import {IRegistry} from "../registry/IRegistry.sol";
9
- import {IProductComponent} from "./IProductComponent.sol";
10
- import {Product} from "./Product.sol";
11
- import {IPoolComponent} from "../pool/IPoolComponent.sol";
12
- import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
13
5
  import {IInstance} from "../instance/IInstance.sol";
14
6
  import {IPolicy} from "../instance/module/IPolicy.sol";
15
- import {IRisk} from "../instance/module/IRisk.sol";
16
- import {IBundle} from "../instance/module/IBundle.sol";
17
- import {IProductService} from "./IProductService.sol";
18
-
19
- import {TokenHandler} from "../shared/TokenHandler.sol";
20
-
21
- import {IVersionable} from "../shared/IVersionable.sol";
22
- import {Versionable} from "../shared/Versionable.sol";
23
-
24
7
  import {Amount, AmountLib} from "../type/Amount.sol";
25
- import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
26
- import {UFixed, UFixedLib} from "../type/UFixed.sol";
27
- import {Blocknumber, blockNumber} from "../type/Blocknumber.sol";
28
- import {ObjectType, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, CLAIM, BUNDLE} from "../type/ObjectType.sol";
29
- import {SUBMITTED, ACTIVE, KEEP_STATE, DECLINED, CONFIRMED, CLOSED, PAID} from "../type/StateId.sol";
30
- import {NftId, NftIdLib} from "../type/NftId.sol";
31
- import {Fee, FeeLib} from "../type/Fee.sol";
32
- import {ReferralId} from "../type/Referral.sol";
33
- import {RiskId} from "../type/RiskId.sol";
8
+ import {TimestampLib} from "../type/Timestamp.sol";
9
+ import {ObjectType, CLAIM, PRODUCT, POOL} from "../type/ObjectType.sol";
10
+ import {SUBMITTED, KEEP_STATE, DECLINED, CONFIRMED, CLOSED, PAID} from "../type/StateId.sol";
11
+ import {NftId} from "../type/NftId.sol";
12
+ import {FeeLib} from "../type/Fee.sol";
34
13
  import {StateId} from "../type/StateId.sol";
35
14
  import {ClaimId, ClaimIdLib} from "../type/ClaimId.sol";
36
15
  import {PayoutId, PayoutIdLib} from "../type/PayoutId.sol";
37
- import {Version, VersionLib} from "../type/Version.sol";
38
-
39
16
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
40
17
  import {InstanceReader} from "../instance/InstanceReader.sol";
41
- import {IBundleService} from "../pool/IBundleService.sol";
42
18
  import {IClaimService} from "./IClaimService.sol";
43
19
  import {IPoolService} from "../pool/IPoolService.sol";
44
- import {IService} from "../shared/IService.sol";
45
- import {Service} from "../shared/Service.sol";
46
20
 
47
21
 
48
22
  contract ClaimService is
@@ -362,7 +336,8 @@ contract ClaimService is
362
336
  // TODO transfer processing fees to product wallet
363
337
  // TODO inform product to update fee book keeping
364
338
  }
365
-
339
+
340
+ // TODO: centralize token handling (issue #471)
366
341
  poolInfo.tokenHandler.transfer(
367
342
  poolInfo.wallet,
368
343
  beneficiary,
@@ -1,8 +1,8 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "../shared/IVersionable.sol";
5
- import {ProxyManager} from "../shared/ProxyManager.sol";
4
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
5
+ import {ProxyManager} from "../upgradeability/ProxyManager.sol";
6
6
  import {ClaimService} from "./ClaimService.sol";
7
7
 
8
8
  contract ClaimServiceManager is ProxyManager {
@@ -34,10 +34,15 @@ interface IPolicyService is IService {
34
34
  error ErrorPolicyServicePremiumNotFullyPaid(NftId policyNftId, Amount premiumAmount, Amount premiumPaidAmount);
35
35
  error ErrorIPolicyServiceOpenClaims(NftId policyNftId, uint16 openClaimsCount);
36
36
  error ErrorIPolicyServicePolicyHasNotExpired(NftId policyNftId, Timestamp expiredAt);
37
+ error ErrorIPolicyServicePolicyExpirationTooLate(NftId policyNftId, Timestamp upperLimit, Timestamp expiredAt);
38
+ error ErrorIPolicyServicePolicyExpirationTooEarly(NftId policyNftId, Timestamp lowerLimit, Timestamp expiredAt);
37
39
 
38
40
  error ErrorPolicyServicePremiumMismatch(NftId policyNftId, Amount expectedPremiumAmount, Amount recalculatedPremiumAmount);
39
41
  error ErrorPolicyServiceTransferredPremiumMismatch(NftId policyNftId, Amount expectedPremiumAmount, Amount transferredPremiumAmount);
40
42
 
43
+ event LogPolicyServicePolicyDeclined(NftId policyNftId);
44
+ event LogPolicyServicePolicyExpirationUpdated(NftId policyNftId, Timestamp expiredAt);
45
+
41
46
  /// @dev collateralizes the policy represented by {policyNftId}
42
47
  /// sets the policy state to collateralized
43
48
  /// may set the policy state to activated and set the activation date
@@ -64,11 +69,12 @@ interface IPolicyService is IService {
64
69
  /// to activate a policy it needs to be in underwritten state
65
70
  function activate(NftId policyNftId, Timestamp activateAt) external;
66
71
 
67
- /// @dev expires the specified policy and sets the expiry date in the policy metadata
72
+ /// @dev expires the specified policy and sets the expiry date in the policy metadata. If expiry date is set to 0, then the earliest possible expiry date (current blocktime) is set
68
73
  /// to expire a policy it must be in active state, policies may be expired even when the predefined expiry date is still in the future
69
74
  /// a policy can only be closed when it has been expired. in addition, it must not have any open claims
70
75
  /// this function can only be called by a product. the policy needs to match with the calling product
71
- function expire(NftId policyNftId) external;
76
+ /// @return expiredAt the effective expiry date
77
+ function expire(NftId policyNftId, Timestamp expireAt) external returns (Timestamp expiredAt);
72
78
 
73
79
  /// @dev closes the specified policy and sets the closed data in the policy metadata
74
80
  /// a policy can only be closed when it has been expired. in addition, it must not have any open claims
@@ -36,4 +36,5 @@ interface IProductComponent is
36
36
 
37
37
  /// @dev returns initial pool specific infos for this pool
38
38
  function getInitialProductInfo() external view returns (IComponents.ProductInfo memory info);
39
+
39
40
  }
@@ -4,23 +4,16 @@ pragma solidity ^0.8.20;
4
4
  import {IRegistry} from "../registry/IRegistry.sol";
5
5
  import {Product} from "./Product.sol";
6
6
  import {IComponents} from "../instance/module/IComponents.sol";
7
- import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
8
7
  import {IInstance} from "../instance/IInstance.sol";
9
8
  import {IPolicy} from "../instance/module/IPolicy.sol";
10
- import {IPoolComponent} from "../pool/IPoolComponent.sol";
11
- import {IRisk} from "../instance/module/IRisk.sol";
12
- import {IBundle} from "../instance/module/IBundle.sol";
13
9
 
14
10
  import {TokenHandler} from "../shared/TokenHandler.sol";
15
11
 
16
12
  import {Amount, AmountLib} from "../type/Amount.sol";
17
- import {ClaimId, ClaimIdLib} from "../type/ClaimId.sol";
18
13
  import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
19
- import {UFixed, UFixedLib} from "../type/UFixed.sol";
20
14
  import {ObjectType, APPLICATION, COMPONENT, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../type/ObjectType.sol";
21
- import {APPLIED, COLLATERALIZED, ACTIVE, KEEP_STATE, CLOSED, DECLINED, CONFIRMED} from "../type/StateId.sol";
15
+ import {APPLIED, COLLATERALIZED, ACTIVE, KEEP_STATE, CLOSED, DECLINED} from "../type/StateId.sol";
22
16
  import {NftId, NftIdLib} from "../type/NftId.sol";
23
- import {PayoutId, PayoutIdLib} from "../type/PayoutId.sol";
24
17
  import {ReferralId} from "../type/Referral.sol";
25
18
  import {StateId} from "../type/StateId.sol";
26
19
  import {VersionPart} from "../type/Version.sol";
@@ -36,8 +29,6 @@ import {InstanceStore} from "../instance/InstanceStore.sol";
36
29
  import {IPolicyService} from "./IPolicyService.sol";
37
30
  import {IPoolService} from "../pool/IPoolService.sol";
38
31
  import {IPricingService} from "./IPricingService.sol";
39
- import {IService} from "../shared/IService.sol";
40
- import {Service} from "../shared/Service.sol";
41
32
 
42
33
  contract PolicyService is
43
34
  ComponentVerifyingService,
@@ -90,15 +81,38 @@ contract PolicyService is
90
81
  (, productInfo,) = _getAndVerifyActiveComponent(PRODUCT());
91
82
  product = Product(productInfo.objectAddress);
92
83
  }
93
-
84
+
94
85
 
95
86
  function decline(
96
- NftId policyNftId
87
+ NftId applicationNftId // = policyNftId
97
88
  )
98
89
  external
99
- override
90
+ virtual override
100
91
  {
101
- revert();
92
+ (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
93
+ InstanceReader instanceReader = instance.getInstanceReader();
94
+
95
+ // check policy is in state applied
96
+ if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
97
+ revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
98
+ }
99
+
100
+ // check policy matches with calling product
101
+ IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
102
+ if(applicationInfo.productNftId != productNftId) {
103
+ revert ErrorPolicyServicePolicyProductMismatch(
104
+ applicationNftId,
105
+ applicationInfo.productNftId,
106
+ productNftId);
107
+ }
108
+
109
+
110
+ // store updated policy info
111
+ instance.getInstanceStore().updatePolicyState(
112
+ applicationNftId,
113
+ DECLINED());
114
+
115
+ emit LogPolicyServicePolicyDeclined(applicationNftId);
102
116
  }
103
117
 
104
118
  event LogDebug(uint idx, string message);
@@ -230,15 +244,54 @@ contract PolicyService is
230
244
  // TODO: add logging
231
245
  }
232
246
 
233
-
247
+ /// @inheritdoc IPolicyService
234
248
  function expire(
235
- NftId policyNftId
249
+ NftId policyNftId,
250
+ Timestamp expireAt
236
251
  )
237
252
  external
238
253
  override
239
- // solhint-disable-next-line no-empty-blocks
254
+ virtual
255
+ returns (Timestamp)
240
256
  {
241
-
257
+ (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
258
+ InstanceReader instanceReader = instance.getInstanceReader();
259
+
260
+ // check policy is in state applied
261
+ if (instanceReader.getPolicyState(policyNftId) != ACTIVE()) {
262
+ revert ErrorIPolicyServicePolicyNotActive(policyNftId, instanceReader.getPolicyState(policyNftId));
263
+ }
264
+
265
+ // check policy matches with calling product
266
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
267
+ if(policyInfo.productNftId != productNftId) {
268
+ revert ErrorPolicyServicePolicyProductMismatch(
269
+ policyNftId,
270
+ policyInfo.productNftId,
271
+ productNftId);
272
+ }
273
+
274
+ if (expireAt.eqz()) {
275
+ expireAt = TimestampLib.blockTimestamp();
276
+ }
277
+
278
+ // check preconditions
279
+ if (expireAt >= policyInfo.expiredAt) {
280
+ revert ErrorIPolicyServicePolicyExpirationTooLate(policyNftId, policyInfo.expiredAt, expireAt);
281
+ }
282
+ if (expireAt < TimestampLib.blockTimestamp()) {
283
+ revert ErrorIPolicyServicePolicyExpirationTooEarly(policyNftId, TimestampLib.blockTimestamp(), expireAt);
284
+ }
285
+ if (policyInfo.openClaimsCount > 0) {
286
+ revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
287
+ }
288
+
289
+ policyInfo.expiredAt = expireAt;
290
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
291
+
292
+ emit LogPolicyServicePolicyExpirationUpdated(policyNftId, expireAt);
293
+
294
+ return expireAt;
242
295
  }
243
296
 
244
297
  function close(
@@ -427,6 +480,7 @@ contract PolicyService is
427
480
  bundleNftId,
428
481
  premium);
429
482
 
483
+ // TODO: centralize token handling (issue #471)
430
484
  // transfer premium amounts to target wallets
431
485
  tokenHandler.transfer(policyHolder, productWallet, premium.productFeeAmount);
432
486
  tokenHandler.transfer(policyHolder, distributionWallet, premium.distributionFeeAndCommissionAmount);
@@ -1,12 +1,9 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "../shared/IVersionable.sol";
5
- import {ProxyManager} from "../shared/ProxyManager.sol";
4
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
5
+ import {ProxyManager} from "../upgradeability/ProxyManager.sol";
6
6
  import {PolicyService} from "./PolicyService.sol";
7
- import {Registry} from "../registry/Registry.sol";
8
- import {RegistryService} from "../registry/RegistryService.sol";
9
- import {VersionLib} from "../type/Version.sol";
10
7
 
11
8
  contract PolicyServiceManager is ProxyManager {
12
9
 
@@ -1,12 +1,9 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "../shared/IVersionable.sol";
5
- import {ProxyManager} from "../shared/ProxyManager.sol";
4
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
5
+ import {ProxyManager} from "../upgradeability/ProxyManager.sol";
6
6
  import {PricingService} from "./PricingService.sol";
7
- import {Registry} from "../registry/Registry.sol";
8
- import {RegistryService} from "../registry/RegistryService.sol";
9
- import {REGISTRY} from "../type/ObjectType.sol";
10
7
 
11
8
  contract PricingServiceManager is ProxyManager {
12
9
 
@@ -102,6 +102,7 @@ abstract contract Product is
102
102
  onlyOwner()
103
103
  {
104
104
  _getProductStorage()._componentService.registerProduct();
105
+ _approveTokenHandler(type(uint256).max);
105
106
  }
106
107
 
107
108
 
@@ -134,7 +135,6 @@ abstract contract Product is
134
135
  return getRegistry().getNftId(address(_getProductStorage()._distribution));
135
136
  }
136
137
 
137
-
138
138
  function _initializeProduct(
139
139
  address registry,
140
140
  NftId instanceNftId,
@@ -265,6 +265,25 @@ abstract contract Product is
265
265
  activateAt);
266
266
  }
267
267
 
268
+ function _decline(
269
+ NftId policyNftId
270
+ )
271
+ internal
272
+ {
273
+ _getProductStorage()._policyService.decline(
274
+ policyNftId);
275
+ }
276
+
277
+ function _expire(
278
+ NftId policyNftId,
279
+ Timestamp expireAt
280
+ )
281
+ internal
282
+ returns (Timestamp)
283
+ {
284
+ return _getProductStorage()._policyService.expire(policyNftId, expireAt);
285
+ }
286
+
268
287
  function _collectPremium(
269
288
  NftId policyNftId,
270
289
  Timestamp activateAt
@@ -1,45 +1,20 @@
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 {IProductComponent} from "./IProductComponent.sol";
6
- import {Product} from "./Product.sol";
7
- import {IInstanceLinkedComponent} from "../shared/IInstanceLinkedComponent.sol";
8
- import {IPoolComponent} from "../pool/IPoolComponent.sol";
9
- import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
10
4
  import {IInstance} from "../instance/IInstance.sol";
11
- import {IPolicy} from "../instance/module/IPolicy.sol";
12
- import {IRisk} from "../instance/module/IRisk.sol";
13
- import {IBundle} from "../instance/module/IBundle.sol";
5
+ import {IInstanceService} from "../instance/IInstanceService.sol";
6
+ import {IPoolService} from "../pool/PoolService.sol";
14
7
  import {IProductService} from "./IProductService.sol";
15
- import {IComponents} from "../instance/module/IComponents.sol";
16
-
17
- import {TokenHandler} from "../shared/TokenHandler.sol";
18
-
19
- import {IVersionable} from "../shared/IVersionable.sol";
20
- import {Versionable} from "../shared/Versionable.sol";
8
+ import {IRegistryService} from "../registry/IRegistryService.sol";
9
+ import {IRisk} from "../instance/module/IRisk.sol";
21
10
 
22
- import {Timestamp, zeroTimestamp} from "../type/Timestamp.sol";
23
- import {UFixed, UFixedLib} from "../type/UFixed.sol";
24
- import {Blocknumber, blockNumber} from "../type/Blocknumber.sol";
11
+ import {InstanceReader} from "../instance/InstanceReader.sol";
25
12
  import {ObjectType, INSTANCE, PRODUCT, POOL, POLICY, REGISTRY} from "../type/ObjectType.sol";
26
- import {APPLIED, ACTIVE, KEEP_STATE} from "../type/StateId.sol";
27
- import {NftId, NftIdLib} from "../type/NftId.sol";
28
- import {Fee, FeeLib} from "../type/Fee.sol";
29
- import {ReferralId} from "../type/Referral.sol";
13
+ import {KEEP_STATE} from "../type/StateId.sol";
14
+ import {NftId} from "../type/NftId.sol";
30
15
  import {RiskId} from "../type/RiskId.sol";
31
16
  import {StateId} from "../type/StateId.sol";
32
- import {Version, VersionLib} from "../type/Version.sol";
33
- import {RoleId, PRODUCT_OWNER_ROLE} from "../type/RoleId.sol";
34
-
35
- import {IService} from "../shared/IService.sol";
36
- import {Service} from "../shared/Service.sol";
37
17
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
38
- import {IInstanceService} from "../instance/IInstanceService.sol";
39
- import {IProductService} from "./IProductService.sol";
40
- import {IRegistryService} from "../registry/IRegistryService.sol";
41
- import {InstanceReader} from "../instance/InstanceReader.sol";
42
- import {IPoolService} from "../pool/PoolService.sol";
43
18
 
44
19
  contract ProductService is
45
20
  ComponentVerifyingService,
@@ -1,12 +1,9 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "../shared/IVersionable.sol";
5
- import {ProxyManager} from "../shared/ProxyManager.sol";
4
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
5
+ import {ProxyManager} from "../upgradeability/ProxyManager.sol";
6
6
  import {ProductService} from "./ProductService.sol";
7
- import {Registry} from "../registry/Registry.sol";
8
- import {RegistryService} from "../registry/RegistryService.sol";
9
- import {VersionLib} from "../type/Version.sol";
10
7
 
11
8
  contract ProductServiceManager is ProxyManager {
12
9
 
@@ -1,32 +1,18 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
5
- // import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
6
-
7
- import {IRegistry} from "./IRegistry.sol";
8
- import {IInstance} from "../instance/IInstance.sol";
9
-
10
4
  import {IComponent} from "../../contracts/shared/IComponent.sol";
5
+ import {IDistributionComponent} from "../../contracts/distribution/IDistributionComponent.sol";
6
+ import {IInstance} from "../instance/IInstance.sol";
11
7
  import {IPoolComponent} from "../../contracts/pool/IPoolComponent.sol";
12
8
  import {IProductComponent} from "../../contracts/product/IProductComponent.sol";
13
- import {IDistributionComponent} from "../../contracts/distribution/IDistributionComponent.sol";
14
-
15
- import {IVersionable} from "../../contracts/shared/IVersionable.sol";
16
- import {Versionable} from "../../contracts/shared/Versionable.sol";
17
9
  import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
10
+ import {IRegistry} from "./IRegistry.sol";
11
+ import {IRegistryService} from "./IRegistryService.sol";
18
12
 
19
- import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../contracts/type/RoleId.sol";
20
13
  import {ObjectType, REGISTRY, SERVICE, PRODUCT, ORACLE, POOL, INSTANCE, COMPONENT, DISTRIBUTION, DISTRIBUTOR, APPLICATION, POLICY, CLAIM, BUNDLE, STAKE, STAKING, PRICE} from "../../contracts/type/ObjectType.sol";
21
- import {StateId, ACTIVE, PAUSED} from "../../contracts/type/StateId.sol";
22
14
  import {NftId, NftIdLib} from "../../contracts/type/NftId.sol";
23
- import {Fee, FeeLib} from "../../contracts/type/Fee.sol";
24
- import {Version, VersionPart, VersionLib} from "../../contracts/type/Version.sol";
25
-
26
15
  import {Service} from "../shared/Service.sol";
27
- import {IService} from "../shared/IService.sol";
28
- import {IRegistryService} from "./IRegistryService.sol";
29
- import {Registry} from "./Registry.sol";
30
16
 
31
17
  contract RegistryService is
32
18
  Service,
@@ -1,8 +1,8 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "../shared/IVersionable.sol";
5
- import {ProxyManager} from "../shared/ProxyManager.sol";
4
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
5
+ import {ProxyManager} from "../upgradeability/ProxyManager.sol";
6
6
  import {RegistryService} from "./RegistryService.sol";
7
7
 
8
8
  contract RegistryServiceManager is
@@ -32,8 +32,6 @@ import {Registry} from "./Registry.sol";
32
32
  import {TokenRegistry} from "./TokenRegistry.sol";
33
33
  import {ReleaseLifecycle} from "./ReleaseLifecycle.sol";
34
34
 
35
- // TODO rename to something that does not end with 'Manager'
36
- // everywhere else *Manager points to an upgradeable contract
37
35
  contract ReleaseRegistry is
38
36
  AccessManaged,
39
37
  ReleaseLifecycle,
@@ -26,7 +26,6 @@ abstract contract Component is
26
26
  struct ComponentStorage {
27
27
  string _name; // unique (per instance) component name
28
28
  IERC20Metadata _token; // token for this component
29
- TokenHandler _tokenHandler;
30
29
  address _wallet;
31
30
  bool _isInterceptor;
32
31
  bytes _data;
@@ -40,6 +39,12 @@ abstract contract Component is
40
39
  _;
41
40
  }
42
41
 
42
+ modifier onlyNftOwner(NftId nftId) {
43
+ if(msg.sender != getRegistry().ownerOf(nftId)) {
44
+ revert ErrorNftOwnableNotOwner(msg.sender);
45
+ }
46
+ _;
47
+ }
43
48
 
44
49
  function _getComponentStorage() private pure returns (ComponentStorage storage $) {
45
50
  assembly {
@@ -78,7 +83,6 @@ abstract contract Component is
78
83
  ComponentStorage storage $ = _getComponentStorage();
79
84
  $._name = name;
80
85
  $._token = IERC20Metadata(token);
81
- $._tokenHandler = TokenHandler(address(0));
82
86
  $._wallet = address(this);
83
87
  $._isInterceptor = isInterceptor;
84
88
  $._data = componentData;
@@ -253,29 +257,24 @@ abstract contract Component is
253
257
  }
254
258
 
255
259
 
256
- /// @dev for component contracts that hold its own component information
257
- /// this function creates and sets a token hanlder for the components tokens
258
- function _createAndSetTokenHandler()
259
- internal
260
- {
261
- ComponentStorage storage $ = _getComponentStorage();
262
- $._tokenHandler = new TokenHandler(address($._token));
263
- }
264
-
265
-
266
260
  /// @dev depending on the source of the component information this function needs to be overwritten.
267
261
  /// eg for instance linked components that externally store this information with the instance store contract
268
262
  function _getComponentInfo() internal virtual view returns (IComponents.ComponentInfo memory info) {
269
263
  ComponentStorage storage $ = _getComponentStorage();
270
-
264
+
271
265
  return IComponents.ComponentInfo({
272
266
  name: $._name,
273
267
  productNftId: NftIdLib.zero(),
274
268
  token: $._token,
275
- tokenHandler: $._tokenHandler,
269
+ tokenHandler: TokenHandler(address(0)),
276
270
  wallet: $._wallet, // initial wallet address
277
271
  data: $._data // user specific component data
278
272
  });
279
273
  }
280
274
 
275
+ function _approveTokenHandler(uint256 amount) internal {
276
+ ComponentStorage storage $ = _getComponentStorage();
277
+ $._token.approve(address(getComponentInfo().tokenHandler), amount);
278
+ }
279
+
281
280
  }
@@ -1,33 +1,32 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
4
6
  import {Amount, AmountLib} from "../type/Amount.sol";
5
7
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
6
8
  import {Fee, FeeLib} from "../type/Fee.sol";
9
+ import {IComponents} from "../instance/module/IComponents.sol";
10
+ import {IComponentService} from "./IComponentService.sol";
11
+ import {IInstance} from "../instance/IInstance.sol";
7
12
  import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
13
+ import {InstanceReader} from "../instance/InstanceReader.sol";
14
+ import {InstanceStore} from "../instance/InstanceStore.sol";
15
+ import {IInstanceService} from "../instance/IInstanceService.sol";
16
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
17
+ import {IProductComponent} from "../product/IProductComponent.sol";
8
18
  import {IRegistry} from "../registry/IRegistry.sol";
9
19
  import {IRegistryService} from "../registry/IRegistryService.sol";
10
- import {IInstance} from "../instance/IInstance.sol";
11
- import {IAccess} from "../instance/module/IAccess.sol";
20
+ import {KEEP_STATE} from "../type/StateId.sol";
12
21
  import {NftId} from "../type/NftId.sol";
13
22
  import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
14
23
  import {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE} from "../type/RoleId.sol";
15
- import {KEEP_STATE} from "../type/StateId.sol";
16
- import {IComponents} from "../instance/module/IComponents.sol";
17
- import {IComponentService} from "./IComponentService.sol";
18
- import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
19
- import {IInstanceService} from "../instance/IInstanceService.sol";
20
- import {IPoolComponent} from "../pool/IPoolComponent.sol";
21
- import {IProductComponent} from "../product/IProductComponent.sol";
22
- import {InstanceReader} from "../instance/InstanceReader.sol";
23
- import {InstanceStore} from "../instance/InstanceStore.sol";
24
24
  import {TokenHandler} from "./TokenHandler.sol";
25
25
 
26
26
  contract ComponentService is
27
27
  ComponentVerifyingService,
28
28
  IComponentService
29
29
  {
30
-
31
30
  error ErrorComponentServiceAlreadyRegistered(address component);
32
31
  error ErrorComponentServiceNotComponent(address component);
33
32
  error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
@@ -94,6 +93,47 @@ contract ComponentService is
94
93
  // TODO implement
95
94
  function unlock() external virtual {}
96
95
 
96
+ function withdrawFees(Amount amount)
97
+ external
98
+ virtual
99
+ returns (Amount withdrawnAmount)
100
+ {
101
+ (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
102
+ IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
103
+ address componentWallet = info.wallet;
104
+
105
+ // determine withdrawn amount
106
+ withdrawnAmount = amount;
107
+ if (withdrawnAmount.gte(AmountLib.max())) {
108
+ withdrawnAmount = instance.getInstanceReader().getFeeAmount(componentNftId);
109
+ } else if (withdrawnAmount.eqz()) {
110
+ revert ErrorComponentServiceWithdrawAmountIsZero();
111
+ } else {
112
+ Amount withdrawLimit = instance.getInstanceReader().getFeeAmount(componentNftId);
113
+ if (withdrawnAmount.gt(withdrawLimit)) {
114
+ revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, withdrawLimit);
115
+ }
116
+ }
117
+
118
+ // check allowance
119
+ TokenHandler tokenHandler = info.tokenHandler;
120
+ IERC20Metadata token = IERC20Metadata(info.token);
121
+ uint256 tokenAllowance = token.allowance(componentWallet, address(tokenHandler));
122
+ if (tokenAllowance < withdrawnAmount.toInt()) {
123
+ revert ErrorComponentServiceWalletAllowanceTooSmall(componentWallet, address(tokenHandler), tokenAllowance, withdrawnAmount.toInt());
124
+ }
125
+
126
+ // decrease fee counters by withdrawnAmount
127
+ _changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
128
+
129
+ // transfer amount to component owner
130
+ address componentOwner = getRegistry().ownerOf(componentNftId);
131
+ // TODO: centralize token handling (issue #471)
132
+ tokenHandler.transfer(componentWallet, componentOwner, withdrawnAmount);
133
+
134
+ emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(token), withdrawnAmount);
135
+ }
136
+
97
137
 
98
138
  //-------- product ------------------------------------------------------//
99
139
 
@@ -255,6 +295,36 @@ contract ComponentService is
255
295
  _changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
256
296
  }
257
297
 
298
+ //-------- distributor -------------------------------------------------------//
299
+
300
+ function increaseDistributorBalance(
301
+ InstanceStore instanceStore,
302
+ NftId distributorNftId,
303
+ Amount amount,
304
+ Amount feeAmount
305
+ )
306
+ external
307
+ virtual
308
+ // TODO re-enable once role granting is stable and fixed
309
+ // restricted()
310
+ {
311
+ _changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
312
+ }
313
+
314
+ function decreaseDistributorBalance(
315
+ InstanceStore instanceStore,
316
+ NftId distributorNftId,
317
+ Amount amount,
318
+ Amount feeAmount
319
+ )
320
+ external
321
+ virtual
322
+ // TODO re-enable once role granting is stable and fixed
323
+ // restricted()
324
+ {
325
+ _changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
326
+ }
327
+
258
328
  //-------- oracle -------------------------------------------------------//
259
329
 
260
330
  function registerOracle()