@etherisc/gif-next 0.0.2-888aabe-141 → 0.0.2-8985927-403

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 (333) 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 -90
  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 -64
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +201 -75
  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 -26
  28. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +90 -1
  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 +14 -14
  40. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  41. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +213 -117
  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 +315 -194
  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 -77
  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 -26
  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 -61
  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 +35 -125
  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 +391 -51
  85. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  86. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +94 -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 +25 -83
  91. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  92. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +190 -60
  93. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  94. package/artifacts/contracts/pool/Pool.sol/Pool.json +25 -121
  95. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  96. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +258 -96
  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 +3 -67
  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 +183 -108
  117. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  118. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +1 -1
  119. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  120. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +0 -26
  121. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  122. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  123. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +239 -167
  124. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +34 -26
  126. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  127. package/artifacts/contracts/product/PricingService.sol/PricingService.json +8 -3
  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 +3 -67
  132. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  133. package/artifacts/contracts/product/ProductService.sol/ProductService.json +2 -2
  134. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  135. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +2 -2
  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 +14 -14
  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/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  150. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  151. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +2 -2
  152. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  153. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  154. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  155. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  156. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  157. package/artifacts/contracts/shared/Component.sol/Component.json +0 -64
  158. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  159. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +177 -93
  160. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  161. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +43 -47
  162. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  163. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  164. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +0 -26
  165. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  166. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +92 -0
  167. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  168. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -26
  169. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  170. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  171. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  172. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  173. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  174. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  175. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  176. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  177. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  178. package/artifacts/contracts/shared/{ERC165.sol/ERC165.json → InitializableERC165.sol/InitializableERC165.json} +4 -4
  179. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  180. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -64
  181. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  182. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  183. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  184. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  185. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  186. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  187. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  188. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  189. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  190. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  191. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  192. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  193. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  194. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  195. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  196. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  197. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  198. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  199. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +0 -26
  200. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  201. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  202. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +40 -113
  203. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  204. package/artifacts/contracts/staking/Staking.sol/Staking.json +44 -108
  205. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  206. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  207. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  208. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +23 -23
  209. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  210. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -6
  211. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  212. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +22 -22
  213. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  214. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +12 -12
  215. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  216. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +89 -84
  217. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  218. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +25 -20
  219. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  220. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  221. package/artifacts/contracts/type/Amount.sol/AmountLib.json +37 -8
  222. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  223. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  224. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  225. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  226. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  227. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  228. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  229. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  230. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  231. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  232. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  233. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  234. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  235. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  236. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  237. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  238. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  239. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  240. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  241. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  242. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  243. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  244. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  245. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
  246. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  247. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  248. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  249. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  250. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  251. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  252. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  253. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  254. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  255. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  256. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  258. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  259. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
  260. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  262. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  263. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  264. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +2 -2
  265. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  266. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  267. package/contracts/authorization/Authorization.sol +0 -1
  268. package/contracts/distribution/BasicDistribution.sol +4 -15
  269. package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
  270. package/contracts/distribution/Distribution.sol +15 -21
  271. package/contracts/distribution/DistributionService.sol +63 -15
  272. package/contracts/distribution/IDistributionComponent.sol +5 -2
  273. package/contracts/distribution/IDistributionService.sol +18 -2
  274. package/contracts/instance/InstanceAdmin.sol +23 -4
  275. package/contracts/instance/InstanceAuthorizationV3.sol +2 -3
  276. package/contracts/instance/InstanceReader.sol +24 -7
  277. package/contracts/instance/InstanceService.sol +52 -28
  278. package/contracts/instance/InstanceStore.sol +16 -1
  279. package/contracts/instance/base/ObjectLifecycle.sol +8 -4
  280. package/contracts/instance/module/IBundle.sol +1 -1
  281. package/contracts/instance/module/IComponents.sol +1 -6
  282. package/contracts/instance/module/IDistribution.sol +0 -1
  283. package/contracts/instance/module/IPolicy.sol +4 -2
  284. package/contracts/mock/Dip.sol +1 -1
  285. package/contracts/oracle/IOracleComponent.sol +2 -1
  286. package/contracts/oracle/Oracle.sol +15 -6
  287. package/contracts/pool/BasicPool.sol +7 -5
  288. package/contracts/pool/BasicPoolAuthorization.sol +11 -2
  289. package/contracts/pool/BundleService.sol +176 -22
  290. package/contracts/pool/IBundleService.sol +33 -5
  291. package/contracts/pool/IPoolComponent.sol +6 -2
  292. package/contracts/pool/IPoolService.sol +36 -26
  293. package/contracts/pool/Pool.sol +30 -33
  294. package/contracts/pool/PoolService.sol +149 -76
  295. package/contracts/product/ApplicationService.sol +37 -17
  296. package/contracts/product/BasicProduct.sol +3 -33
  297. package/contracts/product/BasicProductAuthorization.sol +3 -0
  298. package/contracts/product/ClaimService.sol +8 -8
  299. package/contracts/product/IApplicationService.sol +1 -0
  300. package/contracts/product/IClaimService.sol +1 -0
  301. package/contracts/product/IPolicyService.sol +25 -30
  302. package/contracts/product/IPricingService.sol +1 -1
  303. package/contracts/product/IProductComponent.sol +1 -4
  304. package/contracts/product/IProductService.sol +1 -0
  305. package/contracts/product/PolicyService.sol +271 -170
  306. package/contracts/product/PricingService.sol +13 -9
  307. package/contracts/product/Product.sol +31 -34
  308. package/contracts/registry/RegistryAdmin.sol +10 -1
  309. package/contracts/registry/ReleaseRegistry.sol +0 -2
  310. package/contracts/registry/ServiceAuthorizationV3.sol +2 -3
  311. package/contracts/shared/Component.sol +17 -23
  312. package/contracts/shared/ComponentService.sol +58 -34
  313. package/contracts/shared/IComponent.sol +4 -4
  314. package/contracts/shared/IComponentService.sol +9 -9
  315. package/contracts/shared/IInstanceLinkedComponent.sol +9 -3
  316. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
  317. package/contracts/shared/InstanceLinkedComponent.sol +21 -0
  318. package/contracts/shared/NftOwnable.sol +2 -2
  319. package/contracts/shared/PolicyHolder.sol +2 -5
  320. package/contracts/shared/TokenHandler.sol +100 -19
  321. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  322. package/contracts/staking/StakeManagerLib.sol +0 -25
  323. package/contracts/staking/Staking.sol +5 -22
  324. package/contracts/staking/StakingService.sol +8 -12
  325. package/contracts/type/Amount.sol +12 -5
  326. package/contracts/type/Blocknumber.sol +7 -1
  327. package/contracts/type/ObjectType.sol +15 -11
  328. package/contracts/type/Referral.sol +1 -0
  329. package/contracts/type/Seconds.sol +13 -1
  330. package/contracts/type/Timestamp.sol +11 -1
  331. package/contracts/type/UFixed.sol +29 -10
  332. package/package.json +1 -1
  333. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
@@ -71,7 +71,7 @@ contract PricingService is
71
71
  view
72
72
  virtual override
73
73
  returns (
74
- IPolicy.Premium memory premium
74
+ IPolicy.PremiumInfo memory premium
75
75
  )
76
76
  {
77
77
  InstanceReader reader;
@@ -84,6 +84,7 @@ contract PricingService is
84
84
  IInstance instance
85
85
  ) = _getAndVerifyComponentInfo(productNftId, PRODUCT(), false);
86
86
 
87
+ // get instance reader from local instance variable
87
88
  reader = instance.getInstanceReader();
88
89
 
89
90
  // calculate net premium
@@ -104,19 +105,21 @@ contract PricingService is
104
105
  revert ErrorIPricingServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, productInfo.poolNftId);
105
106
  }
106
107
 
107
- // calculate premium, order is important
108
+ // calculate fixed fees for product, pool, bundle
108
109
  premium = _getFixedFeeAmounts(
109
110
  netPremiumAmount,
110
111
  productInfo,
111
112
  bundleInfo
112
113
  );
113
114
 
115
+ // calculate variable fees for product, pool, bundle
114
116
  premium = _calculateVariableFeeAmounts(
115
117
  premium,
116
118
  productInfo,
117
119
  bundleInfo
118
120
  );
119
121
 
122
+ // calculate distribution fee and (if applicable) commission
120
123
  premium = _calculateDistributionOwnerFeeAmount(
121
124
  premium,
122
125
  productInfo,
@@ -124,6 +127,7 @@ contract PricingService is
124
127
  reader
125
128
  );
126
129
 
130
+ // calculate resulting amounts for product, pool, and distribution wallets
127
131
  premium = _calculateTargetWalletAmounts(premium);
128
132
 
129
133
  // sanity check to validate the fee calculation
@@ -168,7 +172,7 @@ contract PricingService is
168
172
  internal
169
173
  pure
170
174
  returns (
171
- IPolicy.Premium memory premium
175
+ IPolicy.PremiumInfo memory premium
172
176
  )
173
177
  {
174
178
  // initial premium amount is the net premium
@@ -193,14 +197,14 @@ contract PricingService is
193
197
  }
194
198
 
195
199
  function _calculateVariableFeeAmounts(
196
- IPolicy.Premium memory premium,
200
+ IPolicy.PremiumInfo memory premium,
197
201
  IComponents.ProductInfo memory productInfo,
198
202
  IBundle.BundleInfo memory bundleInfo
199
203
  )
200
204
  internal
201
205
  pure
202
206
  returns (
203
- IPolicy.Premium memory intermadiatePremium
207
+ IPolicy.PremiumInfo memory intermadiatePremium
204
208
  )
205
209
  {
206
210
  UFixed netPremiumAmount = UFixedLib.toUFixed(premium.netPremiumAmount);
@@ -225,7 +229,7 @@ contract PricingService is
225
229
  }
226
230
 
227
231
  function _calculateDistributionOwnerFeeAmount(
228
- IPolicy.Premium memory premium,
232
+ IPolicy.PremiumInfo memory premium,
229
233
  IComponents.ProductInfo memory productInfo,
230
234
  // ISetup.DistributionSetupInfo memory distInfo,
231
235
  ReferralId referralId,
@@ -233,7 +237,7 @@ contract PricingService is
233
237
  )
234
238
  internal
235
239
  view
236
- returns (IPolicy.Premium memory finalPremium)
240
+ returns (IPolicy.PremiumInfo memory finalPremium)
237
241
  {
238
242
 
239
243
  // if the referral is not valid, then the distribution owner gets everything
@@ -266,13 +270,13 @@ contract PricingService is
266
270
 
267
271
 
268
272
  function _calculateTargetWalletAmounts(
269
- IPolicy.Premium memory premium
273
+ IPolicy.PremiumInfo memory premium
270
274
  )
271
275
  internal
272
276
  virtual
273
277
  view
274
278
  returns (
275
- IPolicy.Premium memory premiumWithTargetWalletAmounts
279
+ IPolicy.PremiumInfo memory premiumWithTargetWalletAmounts
276
280
  )
277
281
  {
278
282
  // fees for product owner
@@ -1,8 +1,6 @@
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
-
6
4
  import {Amount, AmountLib} from "../type/Amount.sol";
7
5
  import {ClaimId} from "../type/ClaimId.sol";
8
6
  import {InstanceLinkedComponent} from "../shared/InstanceLinkedComponent.sol";
@@ -16,7 +14,7 @@ import {IProductService} from "./IProductService.sol";
16
14
  import {IClaimService} from "./IClaimService.sol";
17
15
  import {IPricingService} from "./IPricingService.sol";
18
16
  import {IProductComponent} from "./IProductComponent.sol";
19
- import {NftId, NftIdLib} from "../type/NftId.sol";
17
+ import {NftId} from "../type/NftId.sol";
20
18
  import {PayoutId} from "../type/PayoutId.sol";
21
19
  import {COMPONENT, PRODUCT, APPLICATION, POLICY, CLAIM, PRICE } from "../type/ObjectType.sol";
22
20
  import {ReferralId} from "../type/Referral.sol";
@@ -25,9 +23,6 @@ import {Seconds} from "../type/Seconds.sol";
25
23
  import {StateId} from "../type/StateId.sol";
26
24
  import {Timestamp} from "../type/Timestamp.sol";
27
25
 
28
- import {TokenHandler} from "../shared/TokenHandler.sol";
29
-
30
- import {InstanceReader} from "../instance/InstanceReader.sol";
31
26
  import {IPolicy} from "../instance/module/IPolicy.sol";
32
27
  import {IComponents} from "../instance/module/IComponents.sol";
33
28
  import {Pool} from "../pool/Pool.sol";
@@ -62,12 +57,12 @@ abstract contract Product is
62
57
  NftId bundleNftId,
63
58
  ReferralId referralId
64
59
  )
65
- external
60
+ public
66
61
  view
67
62
  override
68
63
  returns (Amount premiumAmount)
69
64
  {
70
- IPolicy.Premium memory premium = _getProductStorage()._pricingService.calculatePremium(
65
+ IPolicy.PremiumInfo memory premium = _getProductStorage()._pricingService.calculatePremium(
71
66
  getNftId(),
72
67
  riskId,
73
68
  sumInsuredAmount,
@@ -82,9 +77,9 @@ abstract contract Product is
82
77
 
83
78
  function calculateNetPremium(
84
79
  Amount sumInsuredAmount,
85
- RiskId riskId,
86
- Seconds lifetime,
87
- bytes memory applicationData
80
+ RiskId,
81
+ Seconds,
82
+ bytes memory
88
83
  )
89
84
  external
90
85
  view
@@ -135,15 +130,6 @@ abstract contract Product is
135
130
  return getRegistry().getNftId(address(_getProductStorage()._distribution));
136
131
  }
137
132
 
138
- function withdrawFees(Amount amount)
139
- external
140
- virtual
141
- onlyOwner()
142
- returns (Amount withdrawnAmount)
143
- {
144
- return _withdrawFees(amount);
145
- }
146
-
147
133
  function _initializeProduct(
148
134
  address registry,
149
135
  NftId instanceNftId,
@@ -242,6 +228,7 @@ abstract contract Product is
242
228
  address applicationOwner,
243
229
  RiskId riskId,
244
230
  Amount sumInsuredAmount,
231
+ Amount premiumAmount,
245
232
  Seconds lifetime,
246
233
  NftId bundleNftId,
247
234
  ReferralId referralId,
@@ -254,6 +241,7 @@ abstract contract Product is
254
241
  applicationOwner,
255
242
  riskId,
256
243
  sumInsuredAmount,
244
+ premiumAmount,
257
245
  lifetime,
258
246
  bundleNftId,
259
247
  referralId,
@@ -261,19 +249,36 @@ abstract contract Product is
261
249
  );
262
250
  }
263
251
 
264
- function _collateralize(
265
- NftId policyNftId,
266
- bool requirePremiumPayment,
252
+ function _createPolicy(
253
+ NftId applicationNftId,
267
254
  Timestamp activateAt
268
255
  )
269
256
  internal
270
257
  {
271
- _getProductStorage()._policyService.collateralize(
272
- policyNftId,
273
- requirePremiumPayment,
258
+ _getProductStorage()._policyService.createPolicy(
259
+ applicationNftId,
274
260
  activateAt);
275
261
  }
276
262
 
263
+ function _decline(
264
+ NftId policyNftId
265
+ )
266
+ internal
267
+ {
268
+ _getProductStorage()._policyService.decline(
269
+ policyNftId);
270
+ }
271
+
272
+ function _expire(
273
+ NftId policyNftId,
274
+ Timestamp expireAt
275
+ )
276
+ internal
277
+ returns (Timestamp expiredAt)
278
+ {
279
+ expiredAt = _getProductStorage()._policyService.expire(policyNftId, expireAt);
280
+ }
281
+
277
282
  function _collectPremium(
278
283
  NftId policyNftId,
279
284
  Timestamp activateAt
@@ -389,14 +394,6 @@ abstract contract Product is
389
394
  return RiskIdLib.toRiskId(riskName);
390
395
  }
391
396
 
392
- function _withdrawFees(Amount amount)
393
- internal
394
- virtual
395
- returns (Amount withdrawnAmount)
396
- {
397
- return _getProductStorage()._componentService.withdrawFees(amount);
398
- }
399
-
400
397
  function _getProductStorage() private pure returns (ProductStorage storage $) {
401
398
  assembly {
402
399
  $.slot := PRODUCT_STORAGE_LOCATION_V1
@@ -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,
@@ -2,14 +2,12 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {
5
- ALL, REGISTRY, SERVICE, PRODUCT, ORACLE, POOL, INSTANCE, COMPONENT, DISTRIBUTION, DISTRIBUTOR, APPLICATION, POLICY, CLAIM, BUNDLE, STAKE, STAKING, PRICE
5
+ ALL, REGISTRY, PRODUCT, ORACLE, POOL, INSTANCE, COMPONENT, DISTRIBUTION, DISTRIBUTOR, APPLICATION, POLICY, CLAIM, BUNDLE, STAKING, PRICE
6
6
  } from "../../contracts/type/ObjectType.sol";
7
7
 
8
- import {ComponentService} from "../shared/ComponentService.sol";
9
8
  import {IAccess} from "../authorization/IAccess.sol";
10
9
  import {IBundleService} from "../pool/IBundleService.sol";
11
10
  import {IDistributionService} from "../distribution/IDistributionService.sol";
12
- import {InstanceService} from "../instance/InstanceService.sol";
13
11
  import {IInstanceService} from "../instance/IInstanceService.sol";
14
12
  import {IPoolService} from "../pool/IPoolService.sol";
15
13
  import {IStakingService} from "../staking/IStakingService.sol";
@@ -163,6 +161,7 @@ contract ServiceAuthorizationV3
163
161
 
164
162
  functions = _authorizeForService(DISTRIBUTION(), POLICY());
165
163
  _authorize(functions, IDistributionService.processSale.selector, "processSale");
164
+ _authorize(functions, IDistributionService.processReferral.selector, "processReferral");
166
165
  }
167
166
 
168
167
 
@@ -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
  }
@@ -4,6 +4,7 @@ pragma solidity ^0.8.20;
4
4
  import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
5
5
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
6
6
 
7
+ import {Amount} from "../type/Amount.sol";
7
8
  import {IComponent} from "../shared/IComponent.sol";
8
9
  import {IAuthorization} from "../authorization/IAuthorization.sol";
9
10
  import {IComponents} from "../instance/module/IComponents.sol";
@@ -37,14 +38,19 @@ interface IInstanceLinkedComponent is
37
38
  /// only component owner (nft holder) is authorizes to call this function
38
39
  function unlock() external;
39
40
 
41
+ /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
42
+ /// @param amount the amount to withdraw
43
+ /// @return withdrawnAmount the amount that was actually withdrawn
44
+ function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
45
+
40
46
  /// @dev defines the instance to which this component is linked to
41
47
  function getInstance() external view returns (IInstance instance);
42
48
 
49
+ /// @dev returns the initial component authorization specification.
50
+ function getAuthorization() external view returns (IAuthorization authorization);
51
+
43
52
  /// @dev defines the product to which this component is linked to
44
53
  /// this is only relevant for pool and distribution components
45
54
  function getProductNftId() external view returns (NftId productNftId);
46
55
 
47
- /// @dev returns the initial component authorization specification.
48
- function getAuthorization() external view returns (IAuthorization authorization);
49
-
50
56
  }