@etherisc/gif-next 0.0.2-888aabe-141 → 0.0.2-897d5be-225

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 (324) hide show
  1. package/README.md +19 -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 +66 -101
  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 +24 -75
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +182 -74
  24. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +54 -38
  26. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +24 -37
  28. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +71 -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 +54 -54
  38. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  39. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +2 -2
  40. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  41. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +81 -123
  42. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +16 -16
  44. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +9 -9
  46. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +74 -196
  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/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  55. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  56. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  57. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  61. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  62. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  63. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  64. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  65. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  66. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +59 -88
  67. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  68. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  69. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  70. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  71. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +30 -37
  72. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  73. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  74. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +27 -72
  75. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  76. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
  77. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  78. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
  79. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  80. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +36 -137
  81. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  82. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  83. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  84. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +383 -51
  85. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  86. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +90 -26
  87. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  88. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +205 -1
  89. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  90. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +26 -95
  91. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  92. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +194 -54
  93. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  94. package/artifacts/contracts/pool/Pool.sol/Pool.json +26 -133
  95. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  96. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +262 -90
  97. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  98. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +35 -19
  99. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  100. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +21 -32
  101. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  102. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +9 -17
  103. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  104. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +0 -75
  105. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  106. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
  107. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  108. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +74 -58
  109. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +30 -30
  111. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  112. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  113. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  114. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +16 -0
  115. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  116. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +188 -108
  117. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  118. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  119. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +0 -37
  120. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  121. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
  122. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  123. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +254 -174
  124. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +42 -26
  126. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  127. package/artifacts/contracts/product/PricingService.sol/PricingService.json +7 -2
  128. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  129. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
  130. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  131. package/artifacts/contracts/product/Product.sol/Product.json +0 -75
  132. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  133. package/artifacts/contracts/product/{ProductService.sol/ProductService.json → RiskService.sol/RiskService.json} +4 -17
  134. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  135. package/artifacts/contracts/product/{ProductServiceManager.sol/ProductServiceManager.json → RiskServiceManager.sol/RiskServiceManager.json} +12 -12
  136. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  137. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  138. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  139. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  140. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  141. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  142. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  143. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +28 -28
  144. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  145. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
  146. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  147. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
  148. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  149. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  150. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +2 -2
  151. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  152. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +2 -2
  153. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  154. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  155. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  156. package/artifacts/contracts/shared/Component.sol/Component.json +0 -64
  157. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  158. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +177 -93
  159. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  160. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +43 -47
  161. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  162. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  163. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +0 -26
  164. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  165. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +92 -0
  166. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  167. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -37
  168. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  169. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  170. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  171. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  172. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  173. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  174. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  175. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  176. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  177. package/artifacts/contracts/shared/{ERC165.sol/ERC165.json → InitializableERC165.sol/InitializableERC165.json} +4 -4
  178. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  179. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -75
  180. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  181. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  182. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  183. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  184. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  185. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  186. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  187. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  188. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  189. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  190. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  191. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  192. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  193. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  194. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  195. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  196. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  197. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +0 -26
  198. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  199. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  200. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +40 -113
  201. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  202. package/artifacts/contracts/staking/Staking.sol/Staking.json +44 -108
  203. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  204. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  205. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +23 -23
  206. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  207. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
  208. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  209. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +22 -22
  210. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  211. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +12 -12
  212. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  213. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +17 -12
  214. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  215. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +7 -2
  216. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  217. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  218. package/artifacts/contracts/type/Amount.sol/AmountLib.json +37 -8
  219. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  220. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  221. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  222. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  223. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  224. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  225. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  226. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  227. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  228. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  229. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  230. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  231. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  232. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  233. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  234. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  235. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  236. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  237. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  238. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  239. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  240. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  241. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  242. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  243. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  244. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  245. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  246. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
  247. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  248. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  249. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  250. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  251. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +2 -2
  252. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  253. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  254. package/contracts/authorization/Authorization.sol +0 -1
  255. package/contracts/distribution/BasicDistribution.sol +4 -15
  256. package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
  257. package/contracts/distribution/Distribution.sol +15 -21
  258. package/contracts/distribution/DistributionService.sol +45 -11
  259. package/contracts/distribution/IDistributionComponent.sol +5 -2
  260. package/contracts/distribution/IDistributionService.sol +10 -0
  261. package/contracts/instance/IInstance.sol +7 -30
  262. package/contracts/instance/Instance.sol +8 -33
  263. package/contracts/instance/InstanceAdmin.sol +23 -4
  264. package/contracts/instance/InstanceReader.sol +10 -7
  265. package/contracts/instance/InstanceService.sol +52 -28
  266. package/contracts/instance/InstanceStore.sol +2 -1
  267. package/contracts/instance/base/ObjectLifecycle.sol +2 -3
  268. package/contracts/instance/module/IBundle.sol +1 -1
  269. package/contracts/instance/module/IComponents.sol +1 -6
  270. package/contracts/instance/module/IDistribution.sol +0 -1
  271. package/contracts/instance/module/IPolicy.sol +1 -1
  272. package/contracts/mock/Dip.sol +1 -1
  273. package/contracts/oracle/IOracleComponent.sol +2 -1
  274. package/contracts/oracle/Oracle.sol +16 -6
  275. package/contracts/oracle/OracleService.sol +1 -0
  276. package/contracts/pool/BasicPool.sol +7 -5
  277. package/contracts/pool/BasicPoolAuthorization.sol +11 -2
  278. package/contracts/pool/BundleService.sol +168 -16
  279. package/contracts/pool/IBundleService.sol +33 -5
  280. package/contracts/pool/IPoolComponent.sol +6 -2
  281. package/contracts/pool/IPoolService.sol +37 -24
  282. package/contracts/pool/Pool.sol +39 -40
  283. package/contracts/pool/PoolService.sol +165 -60
  284. package/contracts/product/ApplicationService.sol +37 -17
  285. package/contracts/product/BasicProduct.sol +3 -32
  286. package/contracts/product/BasicProductAuthorization.sol +3 -0
  287. package/contracts/product/ClaimService.sol +8 -8
  288. package/contracts/product/IApplicationService.sol +1 -0
  289. package/contracts/product/IClaimService.sol +1 -0
  290. package/contracts/product/IPolicyService.sol +23 -17
  291. package/contracts/product/IProductComponent.sol +1 -3
  292. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  293. package/contracts/product/PolicyService.sol +242 -133
  294. package/contracts/product/PricingService.sol +5 -1
  295. package/contracts/product/Product.sol +39 -37
  296. package/contracts/product/{ProductService.sol → RiskService.sol} +4 -6
  297. package/contracts/product/{ProductServiceManager.sol → RiskServiceManager.sol} +8 -8
  298. package/contracts/registry/RegistryAdmin.sol +10 -1
  299. package/contracts/registry/ReleaseRegistry.sol +0 -2
  300. package/contracts/shared/Component.sol +17 -23
  301. package/contracts/shared/ComponentService.sol +58 -34
  302. package/contracts/shared/IComponent.sol +4 -4
  303. package/contracts/shared/IComponentService.sol +9 -9
  304. package/contracts/shared/IInstanceLinkedComponent.sol +9 -10
  305. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
  306. package/contracts/shared/InstanceLinkedComponent.sol +21 -0
  307. package/contracts/shared/NftOwnable.sol +2 -2
  308. package/contracts/shared/PolicyHolder.sol +2 -5
  309. package/contracts/shared/TokenHandler.sol +100 -19
  310. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  311. package/contracts/staking/StakeManagerLib.sol +0 -25
  312. package/contracts/staking/Staking.sol +5 -22
  313. package/contracts/staking/StakingService.sol +8 -12
  314. package/contracts/type/Amount.sol +12 -5
  315. package/contracts/type/Blocknumber.sol +7 -1
  316. package/contracts/type/Referral.sol +1 -0
  317. package/contracts/type/Seconds.sol +13 -1
  318. package/contracts/type/Timestamp.sol +11 -1
  319. package/contracts/type/UFixed.sol +29 -10
  320. package/package.json +1 -1
  321. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  322. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  323. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  324. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
@@ -12,11 +12,11 @@ import {IApplicationService} from "./IApplicationService.sol";
12
12
  import {IAuthorization} from "../authorization/IAuthorization.sol";
13
13
  import {IComponentService} from "../shared/IComponentService.sol";
14
14
  import {IPolicyService} from "./IPolicyService.sol";
15
- import {IProductService} from "./IProductService.sol";
15
+ import {IRiskService} from "./IRiskService.sol";
16
16
  import {IClaimService} from "./IClaimService.sol";
17
17
  import {IPricingService} from "./IPricingService.sol";
18
18
  import {IProductComponent} from "./IProductComponent.sol";
19
- import {NftId, NftIdLib} from "../type/NftId.sol";
19
+ import {NftId} from "../type/NftId.sol";
20
20
  import {PayoutId} from "../type/PayoutId.sol";
21
21
  import {COMPONENT, PRODUCT, APPLICATION, POLICY, CLAIM, PRICE } from "../type/ObjectType.sol";
22
22
  import {ReferralId} from "../type/Referral.sol";
@@ -25,9 +25,6 @@ import {Seconds} from "../type/Seconds.sol";
25
25
  import {StateId} from "../type/StateId.sol";
26
26
  import {Timestamp} from "../type/Timestamp.sol";
27
27
 
28
- import {TokenHandler} from "../shared/TokenHandler.sol";
29
-
30
- import {InstanceReader} from "../instance/InstanceReader.sol";
31
28
  import {IPolicy} from "../instance/module/IPolicy.sol";
32
29
  import {IComponents} from "../instance/module/IComponents.sol";
33
30
  import {Pool} from "../pool/Pool.sol";
@@ -41,7 +38,7 @@ abstract contract Product is
41
38
  bytes32 public constant PRODUCT_STORAGE_LOCATION_V1 = 0x0bb7aafdb8e380f81267337bc5b5dfdf76e6d3a380ecadb51ec665246d9d6800;
42
39
 
43
40
  struct ProductStorage {
44
- IProductService _productService;
41
+ IRiskService _riskService;
45
42
  IApplicationService _applicationService;
46
43
  IPolicyService _policyService;
47
44
  IClaimService _claimService;
@@ -62,7 +59,7 @@ abstract contract Product is
62
59
  NftId bundleNftId,
63
60
  ReferralId referralId
64
61
  )
65
- external
62
+ public
66
63
  view
67
64
  override
68
65
  returns (Amount premiumAmount)
@@ -135,15 +132,6 @@ abstract contract Product is
135
132
  return getRegistry().getNftId(address(_getProductStorage()._distribution));
136
133
  }
137
134
 
138
- function withdrawFees(Amount amount)
139
- external
140
- virtual
141
- onlyOwner()
142
- returns (Amount withdrawnAmount)
143
- {
144
- return _withdrawFees(amount);
145
- }
146
-
147
135
  function _initializeProduct(
148
136
  address registry,
149
137
  NftId instanceNftId,
@@ -152,8 +140,9 @@ abstract contract Product is
152
140
  string memory name,
153
141
  address token,
154
142
  bool isInterceptor,
155
- address pool,
156
- address distribution,
143
+ address pool, // switch to pool nft id (#527)
144
+ address distribution, // switch to distribution nft id (#527)
145
+ // add NftId [] oracleNftIds (#527)
157
146
  bytes memory registryData, // writeonly data that will saved in the object info record of the registry
158
147
  bytes memory componentData // writeonly data that will saved in the object info record of the registry
159
148
  )
@@ -175,8 +164,8 @@ abstract contract Product is
175
164
 
176
165
  ProductStorage storage $ = _getProductStorage();
177
166
  // TODO add validation
178
- // TODO refactor to go via registry ?
179
- $._productService = IProductService(_getServiceAddress(PRODUCT()));
167
+ // TODO refactor to go via registry for all components linked to this product (#527)
168
+ $._riskService = IRiskService(_getServiceAddress(PRODUCT()));
180
169
  $._applicationService = IApplicationService(_getServiceAddress(APPLICATION()));
181
170
  $._policyService = IPolicyService(_getServiceAddress(POLICY()));
182
171
  $._claimService = IClaimService(_getServiceAddress(CLAIM()));
@@ -206,7 +195,7 @@ abstract contract Product is
206
195
  RiskId id,
207
196
  bytes memory data
208
197
  ) internal {
209
- _getProductService().createRisk(
198
+ _getRiskService().createRisk(
210
199
  id,
211
200
  data
212
201
  );
@@ -216,7 +205,7 @@ abstract contract Product is
216
205
  RiskId id,
217
206
  bytes memory data
218
207
  ) internal {
219
- _getProductService().updateRisk(
208
+ _getRiskService().updateRisk(
220
209
  id,
221
210
  data
222
211
  );
@@ -226,7 +215,7 @@ abstract contract Product is
226
215
  RiskId id,
227
216
  StateId state
228
217
  ) internal {
229
- _getProductService().updateRiskState(
218
+ _getRiskService().updateRiskState(
230
219
  id,
231
220
  state
232
221
  );
@@ -242,6 +231,7 @@ abstract contract Product is
242
231
  address applicationOwner,
243
232
  RiskId riskId,
244
233
  Amount sumInsuredAmount,
234
+ Amount premiumAmount,
245
235
  Seconds lifetime,
246
236
  NftId bundleNftId,
247
237
  ReferralId referralId,
@@ -254,6 +244,7 @@ abstract contract Product is
254
244
  applicationOwner,
255
245
  riskId,
256
246
  sumInsuredAmount,
247
+ premiumAmount,
257
248
  lifetime,
258
249
  bundleNftId,
259
250
  referralId,
@@ -261,19 +252,38 @@ abstract contract Product is
261
252
  );
262
253
  }
263
254
 
264
- function _collateralize(
265
- NftId policyNftId,
255
+ function _createPolicy(
256
+ NftId applicationNftId,
266
257
  bool requirePremiumPayment,
267
258
  Timestamp activateAt
268
259
  )
269
260
  internal
270
261
  {
271
- _getProductStorage()._policyService.collateralize(
272
- policyNftId,
262
+ _getProductStorage()._policyService.createPolicy(
263
+ applicationNftId,
273
264
  requirePremiumPayment,
274
265
  activateAt);
275
266
  }
276
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 expiredAt)
283
+ {
284
+ expiredAt = _getProductStorage()._policyService.expire(policyNftId, expireAt);
285
+ }
286
+
277
287
  function _collectPremium(
278
288
  NftId policyNftId,
279
289
  Timestamp activateAt
@@ -389,21 +399,13 @@ abstract contract Product is
389
399
  return RiskIdLib.toRiskId(riskName);
390
400
  }
391
401
 
392
- function _withdrawFees(Amount amount)
393
- internal
394
- virtual
395
- returns (Amount withdrawnAmount)
396
- {
397
- return _getProductStorage()._componentService.withdrawFees(amount);
398
- }
399
-
400
402
  function _getProductStorage() private pure returns (ProductStorage storage $) {
401
403
  assembly {
402
404
  $.slot := PRODUCT_STORAGE_LOCATION_V1
403
405
  }
404
406
  }
405
407
 
406
- function _getProductService() internal view returns (IProductService) {
407
- return _getProductStorage()._productService;
408
+ function _getRiskService() internal view returns (IRiskService) {
409
+ return _getProductStorage()._riskService;
408
410
  }
409
411
  }
@@ -4,7 +4,7 @@ pragma solidity ^0.8.20;
4
4
  import {IInstance} from "../instance/IInstance.sol";
5
5
  import {IInstanceService} from "../instance/IInstanceService.sol";
6
6
  import {IPoolService} from "../pool/PoolService.sol";
7
- import {IProductService} from "./IProductService.sol";
7
+ import {IRiskService} from "./IRiskService.sol";
8
8
  import {IRegistryService} from "../registry/IRegistryService.sol";
9
9
  import {IRisk} from "../instance/module/IRisk.sol";
10
10
 
@@ -16,16 +16,14 @@ import {RiskId} from "../type/RiskId.sol";
16
16
  import {StateId} from "../type/StateId.sol";
17
17
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
18
18
 
19
- contract ProductService is
19
+ contract RiskService is
20
20
  ComponentVerifyingService,
21
- IProductService
21
+ IRiskService
22
22
  {
23
23
  IInstanceService private _instanceService;
24
24
  IPoolService internal _poolService;
25
25
  IRegistryService private _registryService;
26
26
 
27
- event LogProductServiceSender(address sender);
28
-
29
27
  function _initialize(
30
28
  address owner,
31
29
  bytes memory data
@@ -46,7 +44,7 @@ contract ProductService is
46
44
  _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart()));
47
45
  _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
48
46
 
49
- registerInterface(type(IProductService).interfaceId);
47
+ registerInterface(type(IRiskService).interfaceId);
50
48
  }
51
49
 
52
50
 
@@ -3,11 +3,11 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IVersionable} from "../upgradeability/IVersionable.sol";
5
5
  import {ProxyManager} from "../upgradeability/ProxyManager.sol";
6
- import {ProductService} from "./ProductService.sol";
6
+ import {RiskService} from "./RiskService.sol";
7
7
 
8
- contract ProductServiceManager is ProxyManager {
8
+ contract RiskServiceManager is ProxyManager {
9
9
 
10
- ProductService private _productService;
10
+ RiskService private _riskService;
11
11
 
12
12
  /// @dev initializes proxy manager with product service implementation
13
13
  constructor(
@@ -17,23 +17,23 @@ contract ProductServiceManager is ProxyManager {
17
17
  )
18
18
  ProxyManager(registryAddress)
19
19
  {
20
- ProductService svc = new ProductService{salt: salt}();
20
+ RiskService svc = new RiskService{salt: salt}();
21
21
  bytes memory data = abi.encode(registryAddress, address(this), authority);
22
22
  IVersionable versionable = deployDetermenistic(
23
23
  address(svc),
24
24
  data,
25
25
  salt);
26
26
 
27
- _productService = ProductService(address(versionable));
27
+ _riskService = RiskService(address(versionable));
28
28
  }
29
29
 
30
30
  //--- view functions ----------------------------------------------------//
31
- function getProductService()
31
+ function getRiskService()
32
32
  external
33
33
  view
34
- returns (ProductService productService)
34
+ returns (RiskService riskService)
35
35
  {
36
- return _productService;
36
+ return _riskService;
37
37
  }
38
38
 
39
39
  }
@@ -12,6 +12,7 @@ import {ReleaseRegistry} from "./ReleaseRegistry.sol";
12
12
  import {RoleId, RoleIdLib, ADMIN_ROLE, GIF_MANAGER_ROLE, GIF_ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
13
13
  import {StakingStore} from "../staking/StakingStore.sol";
14
14
  import {STAKING} from "../type/ObjectType.sol";
15
+ import {TokenHandler} from "../shared/TokenHandler.sol";
15
16
  import {TokenRegistry} from "./TokenRegistry.sol";
16
17
  import {VersionPart} from "../type/Version.sol";
17
18
 
@@ -359,7 +360,15 @@ contract RegistryAdmin is
359
360
  functions[12] = toFunction(StakingStore.claimUpTo.selector, "claimUpTo");
360
361
  functions[13] = toFunction(StakingStore.unstakeUpTo.selector, "unstakeUpTo");
361
362
  _authorizeTargetFunctions(_stakingStore, stakingRoleId, functions);
362
-
363
+
363
364
  _grantRoleToAccount(stakingRoleId, _staking);
365
+
366
+ // grant token handler authorizations
367
+ IStaking staking = IStaking(_staking);
368
+ functions = new FunctionInfo[](2);
369
+ functions[0] = toFunction(TokenHandler.collectTokens.selector, "collectTokens");
370
+ functions[1] = toFunction(TokenHandler.distributeTokens.selector, "distributeTokens");
371
+
372
+ _authorizeTargetFunctions(address(staking.getTokenHandler()), stakingRoleId, functions);
364
373
  }
365
374
  }
@@ -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,
@@ -6,7 +6,7 @@ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessMana
6
6
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
7
7
  import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
8
8
 
9
- import {Amount} from "../type/Amount.sol";
9
+ import {Amount, AmountLib} from "../type/Amount.sol";
10
10
  import {IComponent} from "./IComponent.sol";
11
11
  import {IComponents} from "../instance/module/IComponents.sol";
12
12
  import {NftId, NftIdLib} from "../type/NftId.sol";
@@ -39,6 +39,12 @@ abstract contract Component is
39
39
  _;
40
40
  }
41
41
 
42
+ modifier onlyNftOwner(NftId nftId) {
43
+ if(msg.sender != getRegistry().ownerOf(nftId)) {
44
+ revert ErrorNftOwnableNotOwner(msg.sender);
45
+ }
46
+ _;
47
+ }
42
48
 
43
49
  function _getComponentStorage() private pure returns (ComponentStorage storage $) {
44
50
  assembly {
@@ -103,11 +109,11 @@ abstract contract Component is
103
109
  revert ErrorComponentWalletNotComponent();
104
110
  }
105
111
 
112
+ emit LogComponentTokenHandlerApproved(address(getTokenHandler()), spendingLimitAmount);
113
+
106
114
  IERC20Metadata(token).approve(
107
115
  address(getTokenHandler()),
108
116
  spendingLimitAmount.toInt());
109
-
110
- emit LogComponentTokenHandlerApproved(address(getTokenHandler()), spendingLimitAmount);
111
117
  }
112
118
 
113
119
  function setWallet(address newWallet)
@@ -118,34 +124,22 @@ abstract contract Component is
118
124
  {
119
125
  // checks
120
126
  address currentWallet = getWallet();
121
- IERC20Metadata token = getToken();
122
- uint256 currentBalance = token.balanceOf(currentWallet);
123
-
124
- if (currentBalance > 0) {
125
- if (currentWallet == address(this)) {
126
- // move tokens from component smart contract to external wallet
127
- } else {
128
- // move tokens from external wallet to component smart contract or another external wallet
129
- uint256 allowance = token.allowance(currentWallet, address(this));
130
- if (allowance < currentBalance) {
131
- revert ErrorComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
132
- }
133
- }
134
- }
127
+ uint256 currentBalance = getToken().balanceOf(currentWallet);
135
128
 
136
129
  // effects
137
130
  _setWallet(newWallet);
138
131
 
139
132
  // interactions
140
133
  if (currentBalance > 0) {
141
- // transfer tokens from current wallet to new wallet
134
+ // move tokens from old to new wallet
135
+ emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
136
+
142
137
  if (currentWallet == address(this)) {
143
- // transferFrom requires self allowance too
144
- token.approve(address(this), currentBalance);
138
+ // transfer from the component requires an allowance
139
+ getTokenHandler().distributeTokens(currentWallet, newWallet, AmountLib.toAmount(currentBalance));
140
+ } else {
141
+ getTokenHandler().collectTokens(currentWallet, newWallet, AmountLib.toAmount(currentBalance));
145
142
  }
146
-
147
- SafeERC20.safeTransferFrom(token, currentWallet, newWallet, currentBalance);
148
- emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
149
143
  }
150
144
  }
151
145
 
@@ -4,30 +4,27 @@ pragma solidity ^0.8.20;
4
4
  import {Amount, AmountLib} from "../type/Amount.sol";
5
5
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
6
6
  import {Fee, FeeLib} from "../type/Fee.sol";
7
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
7
+ import {IComponents} from "../instance/module/IComponents.sol";
8
+ import {IComponentService} from "./IComponentService.sol";
9
+ import {IInstance} from "../instance/IInstance.sol";
8
10
  import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
11
+ import {InstanceReader} from "../instance/InstanceReader.sol";
12
+ import {InstanceStore} from "../instance/InstanceStore.sol";
13
+ import {IInstanceService} from "../instance/IInstanceService.sol";
14
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
15
+ import {IProductComponent} from "../product/IProductComponent.sol";
9
16
  import {IRegistry} from "../registry/IRegistry.sol";
10
17
  import {IRegistryService} from "../registry/IRegistryService.sol";
11
- import {IInstance} from "../instance/IInstance.sol";
18
+ import {KEEP_STATE} from "../type/StateId.sol";
12
19
  import {NftId} from "../type/NftId.sol";
13
20
  import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
14
21
  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 {IInstanceService} from "../instance/IInstanceService.sol";
19
- import {IPoolComponent} from "../pool/IPoolComponent.sol";
20
- import {IProductComponent} from "../product/IProductComponent.sol";
21
- import {InstanceReader} from "../instance/InstanceReader.sol";
22
- import {InstanceStore} from "../instance/InstanceStore.sol";
23
- import {TokenHandler} from "./TokenHandler.sol";
22
+ import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
24
23
 
25
24
  contract ComponentService is
26
25
  ComponentVerifyingService,
27
26
  IComponentService
28
27
  {
29
- using AmountLib for Amount;
30
-
31
28
  error ErrorComponentServiceAlreadyRegistered(address component);
32
29
  error ErrorComponentServiceNotComponent(address component);
33
30
  error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
@@ -94,7 +91,7 @@ contract ComponentService is
94
91
  // TODO implement
95
92
  function unlock() external virtual {}
96
93
 
97
- function withdrawFees(Amount feeAmount)
94
+ function withdrawFees(Amount amount)
98
95
  external
99
96
  virtual
100
97
  returns (Amount withdrawnAmount)
@@ -103,10 +100,12 @@ contract ComponentService is
103
100
  IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
104
101
  address componentWallet = info.wallet;
105
102
 
106
- // determine withdrawal amount
107
- withdrawnAmount = feeAmount;
108
- if (withdrawnAmount.eq(AmountLib.max())) {
103
+ // determine withdrawn amount
104
+ withdrawnAmount = amount;
105
+ if (withdrawnAmount.gte(AmountLib.max())) {
109
106
  withdrawnAmount = instance.getInstanceReader().getFeeAmount(componentNftId);
107
+ } else if (withdrawnAmount.eqz()) {
108
+ revert ErrorComponentServiceWithdrawAmountIsZero();
110
109
  } else {
111
110
  Amount withdrawLimit = instance.getInstanceReader().getFeeAmount(componentNftId);
112
111
  if (withdrawnAmount.gt(withdrawLimit)) {
@@ -114,20 +113,13 @@ contract ComponentService is
114
113
  }
115
114
  }
116
115
 
117
- // check allowance
118
- TokenHandler tokenHandler = info.tokenHandler;
119
- IERC20Metadata token = IERC20Metadata(info.token);
120
- uint256 tokenAllowance = token.allowance(componentWallet, address(tokenHandler));
121
- if (tokenAllowance < withdrawnAmount.toInt()) {
122
- revert ErrorComponentServiceWalletAllowanceTooSmall(componentWallet, address(tokenHandler), tokenAllowance, withdrawnAmount.toInt());
123
- }
124
-
125
116
  // decrease fee counters by withdrawnAmount
126
117
  _changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
127
118
 
128
119
  // transfer amount to component owner
129
120
  address componentOwner = getRegistry().ownerOf(componentNftId);
130
- tokenHandler.transfer(componentWallet, componentOwner, withdrawnAmount);
121
+ emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
122
+ info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
131
123
  }
132
124
 
133
125
 
@@ -148,7 +140,7 @@ contract ComponentService is
148
140
  contractAddress,
149
141
  PRODUCT(),
150
142
  PRODUCT_OWNER_ROLE());
151
-
143
+
152
144
  // create product info
153
145
  IComponents.ProductInfo memory productInfo = IProductComponent(contractAddress).getInitialProductInfo();
154
146
  instanceStore.createProduct(productNftId, productInfo);
@@ -291,6 +283,36 @@ contract ComponentService is
291
283
  _changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
292
284
  }
293
285
 
286
+ //-------- distributor -------------------------------------------------------//
287
+
288
+ function increaseDistributorBalance(
289
+ InstanceStore instanceStore,
290
+ NftId distributorNftId,
291
+ Amount amount,
292
+ Amount feeAmount
293
+ )
294
+ external
295
+ virtual
296
+ // TODO re-enable once role granting is stable and fixed
297
+ // restricted()
298
+ {
299
+ _changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
300
+ }
301
+
302
+ function decreaseDistributorBalance(
303
+ InstanceStore instanceStore,
304
+ NftId distributorNftId,
305
+ Amount amount,
306
+ Amount feeAmount
307
+ )
308
+ external
309
+ virtual
310
+ // TODO re-enable once role granting is stable and fixed
311
+ // restricted()
312
+ {
313
+ _changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
314
+ }
315
+
294
316
  //-------- oracle -------------------------------------------------------//
295
317
 
296
318
  function registerOracle()
@@ -489,22 +511,24 @@ contract ComponentService is
489
511
 
490
512
  component.linkToRegisteredNftId();
491
513
 
492
- // setup initial component authorization
493
- _instanceService.initializeAuthorization(
494
- instance.getNftId(),
495
- component);
496
-
497
514
  // save amended component info with instance
498
515
  instanceReader = instance.getInstanceReader();
499
516
  instanceStore = instance.getInstanceStore();
500
517
 
501
- IComponents.ComponentInfo memory componentInfo = component.getComponentInfo();
502
- componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
518
+ IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
519
+ componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
520
+ address(componentInfo.token),
521
+ address(instance.getInstanceAdmin().authority()));
503
522
 
504
523
  instanceStore.createComponent(
505
524
  component.getNftId(),
506
525
  componentInfo);
507
526
 
527
+ // setup initial component authorization
528
+ _instanceService.initializeAuthorization(
529
+ instance.getNftId(),
530
+ component);
531
+
508
532
  // TODO add logging
509
533
  }
510
534
 
@@ -23,7 +23,6 @@ interface IComponent is
23
23
  error ErrorComponentNameLengthZero();
24
24
  error ErrorComponentWalletAddressZero();
25
25
  error ErrorComponentWalletAddressIsSameAsCurrent();
26
- error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
27
26
  error ErrorComponentWalletNotComponent();
28
27
 
29
28
  event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
@@ -35,10 +34,11 @@ interface IComponent is
35
34
  /// only component owner (nft holder) is authorizes to call this function
36
35
  function approveTokenHandler(Amount spendingLimitAmount) external;
37
36
 
38
- /// @dev sets the wallet address for the component
39
- /// if the current wallet has tokens, these will be transferred
37
+ /// @dev sets the wallet address for the component.
38
+ /// if the current wallet has tokens, these will be transferred.
40
39
  /// if the new wallet address is externally owned, an approval from the
41
- /// owner of the external wallet for the component to move all tokens must exist
40
+ /// owner of the external wallet to the tokenhandler of the component that
41
+ /// covers the current component balance must exist
42
42
  function setWallet(address walletAddress) external;
43
43
 
44
44
  /// @dev returns the name of this component
@@ -1,21 +1,12 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
5
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
6
4
 
7
5
  import {Amount} from "../type/Amount.sol";
8
6
  import {Fee} from "../type/Fee.sol";
9
- import {IComponents} from "../instance/module/IComponents.sol";
10
- import {IInstance} from "../instance/IInstance.sol";
11
- import {IInstanceService} from "../instance/IInstanceService.sol";
12
7
  import {InstanceStore} from "../instance/InstanceStore.sol";
13
- import {IProductService} from "../product/IProductService.sol";
14
- import {IRegisterable} from "../shared/IRegisterable.sol";
15
8
  import {IService} from "../shared/IService.sol";
16
9
  import {NftId} from "../type/NftId.sol";
17
- import {ObjectType} from "../type/ObjectType.sol";
18
- import {TokenHandler} from "../shared/TokenHandler.sol";
19
10
  import {UFixed} from "../type/UFixed.sol";
20
11
 
21
12
  /// @dev component base class
@@ -27,10 +18,12 @@ interface IComponentService is
27
18
  error ErrorComponentServiceWalletAddressZero();
28
19
  error ErrorComponentServiceWalletAddressIsSameAsCurrent();
29
20
 
21
+ error ErrorComponentServiceWithdrawAmountIsZero();
30
22
  error ErrorComponentServiceWithdrawAmountExceedsLimit(Amount withdrawnAmount, Amount withdrawLimit);
31
23
  error ErrorComponentServiceWalletAllowanceTooSmall(address wallet, address spender, uint256 allowance, uint256 amount);
32
24
 
33
25
  event LogComponentServiceWalletAddressChanged(NftId componentNftId, address currentWallet, address newWallet);
26
+ event LogComponentServiceComponentFeesWithdrawn(NftId componentNftId, address recipient, address token, Amount withdrawnAmount);
34
27
  event LogComponentServiceProductFeesUpdated(NftId productNftId);
35
28
  event LogComponentServiceDistributionFeesUpdated(NftId distributionNftId);
36
29
  event LogComponentServicePoolFeesUpdated(NftId poolNftId);
@@ -55,6 +48,8 @@ interface IComponentService is
55
48
  function unlock() external;
56
49
 
57
50
  /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
51
+ /// @param withdrawAmount the amount to withdraw
52
+ /// @return withdrawnAmount the amount that was actually withdrawn
58
53
  function withdrawFees(Amount withdrawAmount) external returns (Amount withdrawnAmount);
59
54
 
60
55
  //-------- product ------------------------------------------------------//
@@ -83,6 +78,10 @@ interface IComponentService is
83
78
  function increaseDistributionBalance(InstanceStore instanceStore, NftId distributionNftId, Amount amount, Amount feeAmount) external;
84
79
  function decreaseDistributionBalance(InstanceStore instanceStore, NftId distributionNftId, Amount amount, Amount feeAmount) external;
85
80
 
81
+ //-------- distributor --------------------------------------------------//
82
+ function increaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
83
+ function decreaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
84
+
86
85
  //-------- oracle -------------------------------------------------------//
87
86
 
88
87
  /// @dev registers the sending component as an oracle component
@@ -105,4 +104,5 @@ interface IComponentService is
105
104
  //-------- bundle -------------------------------------------------------//
106
105
  function increaseBundleBalance(InstanceStore instanceStore, NftId bundleNftId, Amount amount, Amount feeAmount) external;
107
106
  function decreaseBundleBalance(InstanceStore instanceStore, NftId bundleNftId, Amount amount, Amount feeAmount) external;
107
+
108
108
  }