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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/README.md +16 -2
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +2 -2
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  5. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
  7. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  10. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
  14. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  16. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +69 -26
  18. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
  20. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +43 -0
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +237 -74
  24. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +66 -38
  26. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +43 -0
  28. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +102 -0
  30. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  31. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  32. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  33. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  34. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  35. package/artifacts/contracts/instance/Instance.sol/Instance.json +2 -2
  36. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +2 -2
  38. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  39. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
  40. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  41. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +79 -121
  42. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +2 -2
  44. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +2 -2
  46. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +70 -192
  48. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  50. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  51. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  52. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  53. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  54. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  55. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  56. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  61. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  62. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  63. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  64. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  65. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +46 -16
  66. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  67. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  68. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  69. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  70. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +30 -0
  71. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  72. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  73. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +30 -0
  74. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  75. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
  76. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  77. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
  78. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  79. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +50 -57
  80. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  81. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  82. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  83. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +462 -51
  84. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  85. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +106 -26
  86. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  87. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +252 -1
  88. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  89. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +43 -56
  90. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  91. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +188 -53
  92. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  93. package/artifacts/contracts/pool/Pool.sol/Pool.json +43 -56
  94. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  95. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +320 -89
  96. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  97. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +67 -19
  98. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  99. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +2 -2
  100. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +2 -2
  102. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  103. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +19 -0
  104. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  105. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
  106. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  107. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +2 -2
  108. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  109. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +2 -2
  110. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  111. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  112. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  113. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +86 -1
  114. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  115. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  116. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +19 -0
  117. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  118. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  119. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +169 -52
  120. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  121. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +42 -26
  122. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  123. package/artifacts/contracts/product/PricingService.sol/PricingService.json +7 -2
  124. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
  126. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  127. package/artifacts/contracts/product/Product.sol/Product.json +19 -0
  128. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  129. package/artifacts/contracts/product/ProductService.sol/ProductService.json +2 -2
  130. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  131. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +2 -2
  132. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  133. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  134. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  135. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  136. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  137. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  138. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  139. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +2 -2
  140. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  141. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
  142. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  143. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
  144. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  145. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  146. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +2 -2
  147. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  148. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +2 -2
  149. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  150. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  151. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  152. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  153. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +271 -62
  154. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  155. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +60 -32
  156. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  157. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  158. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  159. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +153 -0
  160. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  161. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -0
  162. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  163. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  164. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  165. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  166. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  167. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  168. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  169. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  170. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  171. package/artifacts/contracts/shared/{ERC165.sol/ERC165.json → InitializableERC165.sol/InitializableERC165.json} +4 -4
  172. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  173. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -0
  174. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  175. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  176. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  177. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  178. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  179. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  180. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  181. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  182. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  183. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  184. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  185. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  186. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  187. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  188. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  189. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  190. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  191. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +12 -2
  192. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  193. package/artifacts/contracts/staking/Staking.sol/Staking.json +36 -36
  194. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  195. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  196. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +19 -19
  197. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  198. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
  199. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  200. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +2 -2
  201. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  202. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +2 -2
  203. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  204. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +17 -12
  205. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  206. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +7 -2
  207. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  208. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  209. package/artifacts/contracts/type/Amount.sol/AmountLib.json +37 -8
  210. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  211. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  212. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  213. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  214. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  215. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  216. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  217. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  218. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  219. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  220. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  221. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  222. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  223. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  224. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  225. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  226. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  227. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  228. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  229. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  230. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  231. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  232. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  233. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  234. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  235. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  236. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  237. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
  238. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  239. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  240. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  241. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  242. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  243. package/artifacts/contracts/{shared → upgradeability}/ProxyManager.sol/ProxyManager.json +3 -3
  244. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  245. package/artifacts/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +3 -3
  246. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  247. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  248. package/contracts/distribution/BasicDistribution.sol +4 -15
  249. package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
  250. package/contracts/distribution/Distribution.sol +22 -10
  251. package/contracts/distribution/DistributionService.sol +61 -26
  252. package/contracts/distribution/DistributionServiceManager.sol +2 -5
  253. package/contracts/distribution/IDistributionComponent.sol +8 -4
  254. package/contracts/distribution/IDistributionService.sol +12 -0
  255. package/contracts/instance/InstanceAuthorizationV3.sol +2 -0
  256. package/contracts/instance/InstanceReader.sol +8 -0
  257. package/contracts/instance/InstanceServiceManager.sol +2 -6
  258. package/contracts/instance/InstanceStore.sol +2 -1
  259. package/contracts/instance/module/IBundle.sol +1 -1
  260. package/contracts/instance/module/IComponents.sol +0 -5
  261. package/contracts/instance/module/IDistribution.sol +0 -1
  262. package/contracts/mock/Dip.sol +1 -1
  263. package/contracts/oracle/IOracleComponent.sol +2 -1
  264. package/contracts/oracle/Oracle.sol +15 -6
  265. package/contracts/oracle/OracleServiceManager.sol +2 -5
  266. package/contracts/pool/BasicPool.sol +3 -1
  267. package/contracts/pool/BasicPoolAuthorization.sol +9 -0
  268. package/contracts/pool/BundleService.sol +186 -32
  269. package/contracts/pool/BundleServiceManager.sol +2 -5
  270. package/contracts/pool/IBundleService.sol +33 -5
  271. package/contracts/pool/IPoolComponent.sol +6 -0
  272. package/contracts/pool/IPoolService.sol +12 -13
  273. package/contracts/pool/Pool.sol +28 -11
  274. package/contracts/pool/PoolService.sol +164 -65
  275. package/contracts/pool/PoolServiceManager.sol +2 -5
  276. package/contracts/product/ApplicationService.sol +12 -36
  277. package/contracts/product/ApplicationServiceManager.sol +2 -2
  278. package/contracts/product/BasicProduct.sol +3 -33
  279. package/contracts/product/BasicProductAuthorization.sol +3 -0
  280. package/contracts/product/ClaimService.sol +7 -32
  281. package/contracts/product/ClaimServiceManager.sol +2 -2
  282. package/contracts/product/IPolicyService.sol +8 -2
  283. package/contracts/product/IProductComponent.sol +1 -0
  284. package/contracts/product/PolicyService.sol +72 -18
  285. package/contracts/product/PolicyServiceManager.sol +2 -5
  286. package/contracts/product/PricingServiceManager.sol +2 -5
  287. package/contracts/product/Product.sol +20 -1
  288. package/contracts/product/ProductService.sol +7 -32
  289. package/contracts/product/ProductServiceManager.sol +2 -5
  290. package/contracts/registry/RegistryService.sol +4 -18
  291. package/contracts/registry/RegistryServiceManager.sol +2 -2
  292. package/contracts/registry/ReleaseRegistry.sol +0 -2
  293. package/contracts/shared/Component.sol +13 -14
  294. package/contracts/shared/ComponentService.sol +82 -12
  295. package/contracts/shared/ComponentServiceManager.sol +2 -2
  296. package/contracts/shared/IComponentService.sol +15 -9
  297. package/contracts/shared/IInstanceLinkedComponent.sol +6 -0
  298. package/contracts/shared/IService.sol +1 -1
  299. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
  300. package/contracts/shared/InstanceLinkedComponent.sol +21 -0
  301. package/contracts/shared/NftOwnable.sol +2 -2
  302. package/contracts/shared/PolicyHolder.sol +2 -5
  303. package/contracts/shared/Service.sol +3 -4
  304. package/contracts/staking/IStaking.sol +1 -1
  305. package/contracts/staking/Staking.sol +19 -14
  306. package/contracts/staking/StakingManager.sol +2 -5
  307. package/contracts/staking/StakingReader.sol +6 -9
  308. package/contracts/staking/StakingServiceManager.sol +2 -2
  309. package/contracts/staking/StakingStore.sol +5 -15
  310. package/contracts/type/Amount.sol +12 -5
  311. package/contracts/type/Blocknumber.sol +7 -1
  312. package/contracts/type/Referral.sol +1 -0
  313. package/contracts/type/Seconds.sol +13 -1
  314. package/contracts/type/Timestamp.sol +11 -1
  315. package/contracts/type/UFixed.sol +29 -10
  316. package/contracts/{shared → upgradeability}/ProxyManager.sol +3 -4
  317. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  318. package/package.json +1 -1
  319. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  320. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  321. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  322. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  323. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  324. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
  325. /package/contracts/{shared → upgradeability}/Versionable.sol +0 -0
@@ -1,13 +1,11 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Fee} from "../type/Fee.sol";
4
+ import {Amount} from "../type/Amount.sol";
5
5
  import {IInstanceLinkedComponent} from "../shared/IInstanceLinkedComponent.sol";
6
- import {ReferralId, ReferralStatus} from "../type/Referral.sol";
7
6
  import {NftId} from "../type/NftId.sol";
8
- import {DistributorType} from "../type/DistributorType.sol";
7
+ import {ReferralId, ReferralStatus} from "../type/Referral.sol";
9
8
  import {UFixed} from "../type/UFixed.sol";
10
- import {Timestamp} from "../type/Timestamp.sol";
11
9
 
12
10
  interface IDistributionComponent is IInstanceLinkedComponent {
13
11
 
@@ -45,4 +43,10 @@ interface IDistributionComponent is IInstanceLinkedComponent {
45
43
 
46
44
  /// @dev Returns true to ensure component is called when transferring distributor Nft Ids.
47
45
  function isVerifying() external view returns (bool verifying);
46
+
47
+ /// @dev Withdraw commission for the distributor
48
+ /// @param distributorNftId the distributor Nft Id
49
+ /// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
50
+ /// @return withdrawnAmount the effective withdrawn amount
51
+ function withdrawCommission(NftId distributorNftId, Amount amount) external returns (Amount withdrawnAmount);
48
52
  }
@@ -27,12 +27,18 @@ interface IDistributionService is IService {
27
27
  error ErrorIDistributionServiceCommissionTooHigh(uint256 commissionPercentage, uint256 maxCommissionPercentage);
28
28
  error ErrorIDistributionServiceMinFeeTooHigh(uint256 minFee, uint256 limit);
29
29
 
30
+ error ErrorDistributionServiceCommissionWithdrawAmountExceedsLimit(Amount amount, Amount limit);
31
+ error ErrorDistributionServiceCommissionWithdrawAmountIsZero();
32
+ error ErrorDistributionServiceWalletAllowanceTooSmall(address wallet, address tokenHandler, uint256 allowance, uint256 amount);
33
+
30
34
  error ErrorDistributionServiceVariableFeesTooHight(uint256 maxDiscountPercentage, uint256 limit);
31
35
  error ErrorDistributionServiceMaxDiscountTooHigh(uint256 maxDiscountPercentage, uint256 limit);
32
36
 
33
37
  error ErrorIDistributionServiceReferralInvalid(NftId distributionNftId, ReferralId referralId);
34
38
  error ErrorDistributionServiceInvalidFeeTransferred(Amount transferredDistributionFeeAmount, Amount expectedDistributionFeeAmount);
35
39
 
40
+ event LogDistributionServiceCommissionWithdrawn(NftId distributorNftId, address recipient, address tokenAddress, Amount amount);
41
+
36
42
  function createDistributorType(
37
43
  string memory name,
38
44
  UFixed minDiscountPercentage,
@@ -82,4 +88,10 @@ interface IDistributionService is IService {
82
88
  NftId distributorNftId,
83
89
  ReferralId referralId
84
90
  ) external view returns (bool isValid);
91
+
92
+ /// @dev Withdraw commission for the distributor
93
+ /// @param distributorNftId the distributor Nft Id
94
+ /// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
95
+ /// @return withdrawnAmount the effective withdrawn amount
96
+ function withdrawCommission(NftId distributorNftId, Amount amount) external returns (Amount withdrawnAmount);
85
97
  }
@@ -141,7 +141,9 @@ contract InstanceAuthorizationV3
141
141
  _authorize(functions, InstanceStore.createProduct.selector, "createProduct");
142
142
  _authorize(functions, InstanceStore.updateProduct.selector, "updateProduct");
143
143
  _authorize(functions, InstanceStore.increaseBalance.selector, "increaseBalance");
144
+ _authorize(functions, InstanceStore.decreaseBalance.selector, "decreaseBalance");
144
145
  _authorize(functions, InstanceStore.increaseFees.selector, "increaseFees");
146
+ _authorize(functions, InstanceStore.decreaseFees.selector, "decreaseFees");
145
147
 
146
148
  // authorize distribution service role
147
149
  functions = _authorizeForTarget(INSTANCE_STORE_TARGET_NAME, getServiceRole(DISTRIBUTION()));
@@ -85,6 +85,14 @@ contract InstanceReader {
85
85
  return _store.getState(toPolicyKey(policyNftId));
86
86
  }
87
87
 
88
+ function getBundleState(NftId bundleNftId)
89
+ public
90
+ view
91
+ returns (StateId state)
92
+ {
93
+ return _store.getState(toBundleKey(bundleNftId));
94
+ }
95
+
88
96
  /// @dev returns true iff policy may be closed
89
97
  /// a policy can be closed all conditions below are met
90
98
  /// - policy exists
@@ -1,13 +1,9 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Instance} from "./Instance.sol";
5
- import {IVersionable} from "../shared/IVersionable.sol";
6
- import {ProxyManager} from "../shared/ProxyManager.sol";
4
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
5
+ import {ProxyManager} from "../upgradeability/ProxyManager.sol";
7
6
  import {InstanceService} from "./InstanceService.sol";
8
- import {Registry} from "../registry/Registry.sol";
9
- import {RegistryService} from "../registry/RegistryService.sol";
10
- import {REGISTRY} from "../type/ObjectType.sol";
11
7
 
12
8
  contract InstanceServiceManager is ProxyManager {
13
9
 
@@ -7,7 +7,7 @@ import {Amount} from "../type/Amount.sol";
7
7
  import {Key32} from "../type/Key32.sol";
8
8
  import {NftId} from "../type/NftId.sol";
9
9
  import {ClaimId} from "../type/ClaimId.sol";
10
- import {ObjectType, BUNDLE, POLICY, POOL, PRODUCT, COMPONENT, DISTRIBUTOR, DISTRIBUTOR_TYPE} from "../type/ObjectType.sol";
10
+ import {ObjectType, BUNDLE, POLICY, POOL, PRODUCT, COMPONENT, DISTRIBUTOR} from "../type/ObjectType.sol";
11
11
  import {RequestId} from "../type/RequestId.sol";
12
12
  import {RiskId} from "../type/RiskId.sol";
13
13
  import {StateId} from "../type/StateId.sol";
@@ -116,6 +116,7 @@ contract InstanceStore is
116
116
 
117
117
  //--- Distributor -------------------------------------------------------//
118
118
  function createDistributor(NftId distributorNftId, IDistribution.DistributorInfo memory info) external restricted() {
119
+ _registerBalanceTarget(distributorNftId);
119
120
  _create(_toNftKey32(distributorNftId, DISTRIBUTOR()), abi.encode(info));
120
121
  }
121
122
 
@@ -13,7 +13,7 @@ interface IBundle {
13
13
  NftId poolNftId;
14
14
  Fee fee; // bundle fee on net premium amounts
15
15
  bytes filter; // required conditions for applications to be considered for collateralization by this bundle
16
- Seconds lifetime; // lifetime of bundle after creation
16
+ Timestamp activatedAt;
17
17
  Timestamp expiredAt; // no new policies starting with this timestamp
18
18
  Timestamp closedAt; // no open policies, locked amount = 0
19
19
  }
@@ -21,7 +21,6 @@ interface IComponents {
21
21
  bytes data; // will hold component type specific additional info (eg encoded pool info)
22
22
  }
23
23
 
24
-
25
24
  struct ProductInfo {
26
25
  NftId distributionNftId;
27
26
  NftId poolNftId;
@@ -36,7 +35,6 @@ interface IComponents {
36
35
 
37
36
 
38
37
  struct PoolInfo {
39
- NftId productNftId; // the nft of the product this pool is linked to
40
38
  RoleId bundleOwnerRole; // the required role for bundle owners
41
39
  // TODO maxCapitalAmount -> maxBalanceAmount
42
40
  Amount maxCapitalAmount; // max capital amount allowed for pool
@@ -45,8 +43,5 @@ interface IComponents {
45
43
  bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
46
44
  UFixed collateralizationLevel; // factor to calculate collateral for sum insurance (default 100%)
47
45
  UFixed retentionLevel; // amount of collateral held in pool (default 100%)
48
- Fee poolFee; // pool fee on net premium
49
- Fee stakingFee; // pool fee on staked capital from investor
50
- Fee performanceFee; // pool fee on profits from capital investors
51
46
  }
52
47
  }
@@ -25,7 +25,6 @@ interface IDistribution {
25
25
  DistributorType distributorType;
26
26
  bool active;
27
27
  bytes data;
28
- Amount commissionAmount;
29
28
  uint32 numPoliciesSold;
30
29
  }
31
30
 
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
4
+ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
5
5
 
6
6
  contract Dip is ERC20 {
7
7
 
@@ -11,7 +11,8 @@ import {UFixed} from "../type/UFixed.sol";
11
11
  import {Timestamp} from "../type/Timestamp.sol";
12
12
 
13
13
  interface IOracleComponent is IInstanceLinkedComponent {
14
-
14
+ error ErrorOracleNotImplemented(string methodName);
15
+
15
16
  /// @dev callback method for requesting some data from the oracle
16
17
  function request(
17
18
  RequestId requestId,
@@ -1,19 +1,17 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {Amount} from "../type/Amount.sol";
4
5
  import {COMPONENT, ORACLE} from "../type/ObjectType.sol";
5
6
  import {IAuthorization} from "../authorization/IAuthorization.sol";
6
7
  import {IComponentService} from "../shared/IComponentService.sol";
8
+ import {IInstanceLinkedComponent} from "../shared/IInstanceLinkedComponent.sol";
7
9
  import {IOracleComponent} from "./IOracleComponent.sol";
8
10
  import {IOracleService} from "./IOracleService.sol";
9
- import {IRegistry} from "../registry/IRegistry.sol";
10
- import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
11
- import {NftId, NftIdLib} from "../type/NftId.sol";
11
+ import {NftId} from "../type/NftId.sol";
12
12
  import {InstanceLinkedComponent} from "../shared/InstanceLinkedComponent.sol";
13
- import {InstanceReader} from "../instance/InstanceReader.sol";
14
13
  import {RequestId} from "../type/RequestId.sol";
15
- import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
16
- import {UFixed} from "../type/UFixed.sol";
14
+ import {Timestamp} from "../type/Timestamp.sol";
17
15
 
18
16
 
19
17
  abstract contract Oracle is
@@ -73,6 +71,17 @@ abstract contract Oracle is
73
71
  return false;
74
72
  }
75
73
 
74
+ function withdrawFees(Amount amount)
75
+ external
76
+ virtual
77
+ override(IInstanceLinkedComponent, InstanceLinkedComponent)
78
+ onlyOwner()
79
+ restricted()
80
+ returns (Amount withdrawnAmount)
81
+ {
82
+ revert ErrorOracleNotImplemented("withdrawFees");
83
+ }
84
+
76
85
 
77
86
  function _initializeOracle(
78
87
  address registry,
@@ -1,12 +1,9 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "../shared/IVersionable.sol";
5
- import {ProxyManager} from "../shared/ProxyManager.sol";
4
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
5
+ import {ProxyManager} from "../upgradeability/ProxyManager.sol";
6
6
  import {OracleService} from "./OracleService.sol";
7
- import {Registry} from "../registry/Registry.sol";
8
- import {RegistryService} from "../registry/RegistryService.sol";
9
- import {REGISTRY} from "../type/ObjectType.sol";
10
7
 
11
8
  contract OracleServiceManager is ProxyManager {
12
9
 
@@ -14,6 +14,7 @@ import {NftId, NftIdLib} from "../type/NftId.sol";
14
14
  import {BUNDLE, COMPONENT, POOL} from "../type/ObjectType.sol";
15
15
  import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
16
16
  import {Seconds} from "../type/Seconds.sol";
17
+ import {Timestamp} from "../type/Timestamp.sol";
17
18
  import {TokenHandler} from "../shared/TokenHandler.sol";
18
19
  import {UFixed, UFixedLib} from "../type/UFixed.sol";
19
20
 
@@ -81,8 +82,9 @@ abstract contract BasicPool is
81
82
  virtual
82
83
  restricted()
83
84
  onlyBundleOwner(bundleNftId)
85
+ returns(Timestamp newExpiredAt)
84
86
  {
85
- _extend(bundleNftId, lifetimeExtension);
87
+ return _extend(bundleNftId, lifetimeExtension);
86
88
  }
87
89
 
88
90
 
@@ -4,6 +4,8 @@ pragma solidity ^0.8.20;
4
4
  import {Authorization} from "../authorization/Authorization.sol";
5
5
  import {BasicPool} from "./BasicPool.sol";
6
6
  import {IAccess} from "../authorization/IAccess.sol";
7
+ import {IInstanceLinkedComponent} from "../shared/IInstanceLinkedComponent.sol";
8
+ import {IPoolComponent} from "./IPoolComponent.sol";
7
9
  import {POOL} from "../type/ObjectType.sol";
8
10
  import {PUBLIC_ROLE} from "../../contracts/type/RoleId.sol";
9
11
  import {RoleId} from "../type/RoleId.sol";
@@ -44,6 +46,13 @@ contract BasicPoolAuthorization
44
46
  _authorize(functions, BasicPool.setMaxCapitalAmount.selector, "setMaxCapitalAmount");
45
47
  _authorize(functions, BasicPool.setBundleOwnerRole.selector, "setBundleOwnerRole");
46
48
  _authorize(functions, BasicPool.setFees.selector, "setFees");
49
+ _authorize(functions, BasicPool.stake.selector, "stake");
50
+ _authorize(functions, BasicPool.unstake.selector, "unstake");
51
+ _authorize(functions, BasicPool.extend.selector, "extend");
52
+
53
+ _authorize(functions, IInstanceLinkedComponent.withdrawFees.selector, "withdrawFees");
54
+
55
+ _authorize(functions, IPoolComponent.withdrawBundleFees.selector, "withdrawBundleFees");
47
56
  }
48
57
  }
49
58
 
@@ -1,37 +1,28 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
4
6
  import {IBundle} from "../instance/module/IBundle.sol";
7
+ import {IBundleService} from "./IBundleService.sol";
5
8
  import {IComponents} from "../instance/module/IComponents.sol";
6
9
  import {IComponentService} from "../shared/IComponentService.sol";
7
10
  import {IRegistry} from "../registry/IRegistry.sol";
11
+ import {IRegistryService} from "../registry/IRegistryService.sol";
8
12
  import {IInstance} from "../instance/IInstance.sol";
9
13
  import {InstanceStore} from "../instance/InstanceStore.sol";
10
14
  import {IPolicy} from "../instance/module/IPolicy.sol";
11
15
 
12
- import {IVersionable} from "../shared/IVersionable.sol";
13
- import {INftOwnable} from "../shared/INftOwnable.sol";
14
- import {NftId, NftIdLib} from "../type/NftId.sol";
15
- import {ObjectType, COMPONENT, POOL, BUNDLE, REGISTRY} from "../type/ObjectType.sol";
16
- import {POOL_OWNER_ROLE, RoleId} from "../type/RoleId.sol";
17
- import {Pool} from "./Pool.sol";
18
-
19
16
  import {Amount, AmountLib} from "../type/Amount.sol";
20
- import {Fee, FeeLib} from "../type/Fee.sol";
21
- import {StateId, ACTIVE, PAUSED, CLOSED, KEEP_STATE} from "../type/StateId.sol";
22
- import {Seconds} from "../type/Seconds.sol";
23
- import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
24
- import {Version, VersionLib} from "../type/Version.sol";
25
- import {Versionable} from "../shared/Versionable.sol";
26
-
27
- import {IService} from "../shared/IService.sol";
28
- import {Service} from "../shared/Service.sol";
29
17
  import {BundleSet} from "../instance/BundleSet.sol";
30
18
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
31
- import {IBundleService} from "./IBundleService.sol";
32
- import {IRegistryService} from "../registry/IRegistryService.sol";
33
- import {InstanceService} from "../instance/InstanceService.sol";
19
+ import {Fee, FeeLib} from "../type/Fee.sol";
34
20
  import {InstanceReader} from "../instance/InstanceReader.sol";
21
+ import {NftId, NftIdLib} from "../type/NftId.sol";
22
+ import {ObjectType, COMPONENT, POOL, BUNDLE, REGISTRY} from "../type/ObjectType.sol";
23
+ import {StateId, ACTIVE, PAUSED, CLOSED, KEEP_STATE} from "../type/StateId.sol";
24
+ import {Seconds} from "../type/Seconds.sol";
25
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
35
26
 
36
27
  string constant BUNDLE_SERVICE_NAME = "BundleService";
37
28
 
@@ -39,8 +30,7 @@ contract BundleService is
39
30
  ComponentVerifyingService,
40
31
  IBundleService
41
32
  {
42
- using NftIdLib for NftId;
43
-
33
+
44
34
  string public constant NAME = "BundleService";
45
35
 
46
36
  address private _registryAddress;
@@ -123,13 +113,15 @@ contract BundleService is
123
113
  InstanceStore instanceStore = instance.getInstanceStore();
124
114
  instanceStore.createBundle(
125
115
  bundleNftId,
126
- IBundle.BundleInfo(
127
- poolNftId,
128
- bundleFee,
129
- filter,
130
- lifetime,
131
- TimestampLib.blockTimestamp().addSeconds(lifetime),
132
- zeroTimestamp()));
116
+ IBundle.BundleInfo({
117
+ poolNftId: poolNftId,
118
+ fee: bundleFee,
119
+ filter: filter,
120
+ activatedAt: TimestampLib.blockTimestamp(),
121
+ expiredAt: TimestampLib.blockTimestamp().addSeconds(lifetime),
122
+ closedAt: zeroTimestamp()
123
+ })
124
+ );
133
125
 
134
126
  // bundle book keeping
135
127
  _componentService.increaseBundleBalance(
@@ -141,7 +133,6 @@ contract BundleService is
141
133
  // put bundle under bundle managemet
142
134
  BundleSet bundleManager = instance.getBundleSet();
143
135
  bundleManager.add(bundleNftId);
144
-
145
136
  // TODO add logging
146
137
  }
147
138
 
@@ -158,7 +149,7 @@ contract BundleService is
158
149
  restricted()
159
150
  {
160
151
  InstanceReader instanceReader = instance.getInstanceReader();
161
- StateId bundleState = instanceReader.getMetadata(bundleNftId.toKey32(BUNDLE())).state;
152
+ StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
162
153
  IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
163
154
 
164
155
  // ensure bundle is active and not yet expired
@@ -228,9 +219,10 @@ contract BundleService is
228
219
  external
229
220
  virtual
230
221
  restricted
222
+ returns (Amount balanceAmount, Amount feeAmount)
231
223
  {
232
224
  // udpate bundle state
233
- instance.getInstanceStore().updateBundleState(bundleNftId, CLOSED());
225
+ InstanceReader instanceReader = instance.getInstanceReader();
234
226
 
235
227
  // ensure no open policies attached to bundle
236
228
  BundleSet bundleManager = instance.getBundleSet();
@@ -238,9 +230,116 @@ contract BundleService is
238
230
  if(openPolicies > 0) {
239
231
  revert ErrorBundleServiceBundleWithOpenPolicies(bundleNftId, openPolicies);
240
232
  }
233
+ if(instanceReader.getLockedAmount(bundleNftId) > AmountLib.zero()) {
234
+ revert ErrorBundleServiceBundleWithLockedCollateral(bundleNftId, instanceReader.getLockedAmount(bundleNftId));
235
+ }
241
236
 
242
- // update set of active bundles
237
+ InstanceStore instanceStore = instance.getInstanceStore();
238
+ instanceStore.updateBundleState(bundleNftId, CLOSED());
243
239
  bundleManager.lock(bundleNftId);
240
+
241
+ Amount balanceAmount = instanceReader.getBalanceAmount(bundleNftId);
242
+ Amount feeAmount = instanceReader.getFeeAmount(bundleNftId);
243
+ _componentService.decreaseBundleBalance(instanceStore, bundleNftId, balanceAmount, feeAmount);
244
+ }
245
+
246
+ /// @inheritdoc IBundleService
247
+ function stake(
248
+ IInstance instance,
249
+ NftId bundleNftId,
250
+ Amount amount
251
+ )
252
+ external
253
+ virtual
254
+ // TODO: restricted() (once #462 is done)
255
+ {
256
+ IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
257
+ StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
258
+
259
+ if( (bundleState != ACTIVE() && bundleState != PAUSED()) // locked bundles can be staked
260
+ || bundleInfo.expiredAt < TimestampLib.blockTimestamp()
261
+ || bundleInfo.closedAt.gtz()) {
262
+ revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
263
+ }
264
+
265
+ _componentService.increaseBundleBalance(
266
+ instance.getInstanceStore(),
267
+ bundleNftId,
268
+ amount,
269
+ AmountLib.zero());
270
+ }
271
+
272
+ /// @inheritdoc IBundleService
273
+ function unstake(
274
+ IInstance instance,
275
+ NftId bundleNftId,
276
+ Amount amount
277
+ )
278
+ external
279
+ virtual
280
+ // TODO: restricted() (once #462 is done)
281
+ returns (Amount unstakedAmount)
282
+ {
283
+ InstanceStore instanceStore = instance.getInstanceStore();
284
+ (
285
+ Amount balanceAmount,
286
+ Amount lockedAmount,
287
+ Amount feeAmount
288
+ ) = instanceStore.getAmounts(bundleNftId);
289
+
290
+ Amount unstakedAmount = amount;
291
+ Amount availableAmount = balanceAmount - (lockedAmount + feeAmount);
292
+
293
+ // if amount is max, then unstake all available
294
+ if (amount.gte(AmountLib.max())) {
295
+ unstakedAmount = availableAmount;
296
+ }
297
+
298
+ // ensure unstaked amount does not exceed available amount
299
+ if (unstakedAmount > availableAmount) {
300
+ revert ErrorBundleServiceUnstakeAmountExceedsLimit(amount, availableAmount);
301
+ }
302
+
303
+ _componentService.decreaseBundleBalance(
304
+ instanceStore,
305
+ bundleNftId,
306
+ unstakedAmount,
307
+ AmountLib.zero());
308
+
309
+ return unstakedAmount;
310
+ }
311
+
312
+ /// @inheritdoc IBundleService
313
+ function extend(NftId bundleNftId, Seconds lifetimeExtension)
314
+ external
315
+ virtual
316
+ // TODO: restricted() (once #462 is done)
317
+ returns (Timestamp extendedExpiredAt)
318
+ {
319
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
320
+ IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
321
+ StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
322
+
323
+ // ensure bundle belongs to the pool
324
+ if (bundleInfo.poolNftId != poolNftId) {
325
+ revert ErrorBundleServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
326
+ }
327
+
328
+ // ensure bundle is active and not yet expired
329
+ if(bundleState != ACTIVE() || bundleInfo.expiredAt < TimestampLib.blockTimestamp()) {
330
+ revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
331
+ }
332
+
333
+ if (lifetimeExtension.eqz()) {
334
+ revert ErrorBundleServiceExtensionLifetimeIsZero();
335
+ }
336
+
337
+ bundleInfo.expiredAt = bundleInfo.expiredAt.addSeconds(lifetimeExtension);
338
+ instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
339
+
340
+ emit LogBundleServiceBundleExtended(bundleNftId, lifetimeExtension, bundleInfo.expiredAt);
341
+
342
+ return bundleInfo.expiredAt;
244
343
  }
245
344
 
246
345
 
@@ -274,6 +373,61 @@ contract BundleService is
274
373
  instance.getBundleSet().unlinkPolicy(policyNftId);
275
374
  }
276
375
 
376
+ /// @inheritdoc IBundleService
377
+ function withdrawBundleFees(NftId bundleNftId, Amount amount)
378
+ public
379
+ virtual
380
+ // TODO: restricted() (once #462 is done)
381
+ returns (Amount withdrawnAmount)
382
+ {
383
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
384
+ InstanceReader reader = instance.getInstanceReader();
385
+
386
+ IComponents.ComponentInfo memory poolInfo = reader.getComponentInfo(poolNftId);
387
+ address poolWallet = poolInfo.wallet;
388
+
389
+ IBundle.BundleInfo memory bundleInfo = reader.getBundleInfo(bundleNftId);
390
+
391
+ // determine withdrawn amount
392
+ withdrawnAmount = amount;
393
+ if (withdrawnAmount.gte(AmountLib.max())) {
394
+ withdrawnAmount = reader.getFeeAmount(bundleNftId);
395
+ } else {
396
+ if (withdrawnAmount.gt(reader.getFeeAmount(bundleNftId))) {
397
+ revert ErrorBundleServiceFeesWithdrawAmountExceedsLimit(withdrawnAmount, reader.getFeeAmount(bundleNftId));
398
+ }
399
+ }
400
+
401
+ if (withdrawnAmount.eqz()) {
402
+ revert ErrorBundleServiceFeesWithdrawAmountIsZero();
403
+ }
404
+
405
+ // check allowance
406
+ IERC20Metadata token = IERC20Metadata(poolInfo.token);
407
+ uint256 tokenAllowance = token.allowance(poolWallet, address(poolInfo.tokenHandler));
408
+ if (tokenAllowance < withdrawnAmount.toInt()) {
409
+ revert ErrorBundleServiceWalletAllowanceTooSmall(poolWallet, address(poolInfo.tokenHandler), tokenAllowance, withdrawnAmount.toInt());
410
+ }
411
+
412
+ // decrease fee counters by withdrawnAmount
413
+ {
414
+ InstanceStore store = instance.getInstanceStore();
415
+ // decrease fee amount of the bundle
416
+ _componentService.decreaseBundleBalance(store, bundleNftId, AmountLib.zero(), withdrawnAmount);
417
+ // decrease pool balance
418
+ _componentService.decreasePoolBalance(store, poolNftId, withdrawnAmount, AmountLib.zero());
419
+ }
420
+
421
+ // transfer amount to bundle owner
422
+ {
423
+ address owner = getRegistry().ownerOf(bundleNftId);
424
+ // TODO: centralize token handling (issue #471)
425
+ poolInfo.tokenHandler.transfer(poolWallet, owner, withdrawnAmount);
426
+
427
+ emit LogBundleServiceFeesWithdrawn(bundleNftId, owner, address(token), withdrawnAmount);
428
+ }
429
+ }
430
+
277
431
  /// @dev links policy to bundle
278
432
  function _linkPolicy(IInstance instance, NftId policyNftId)
279
433
  internal
@@ -1,12 +1,9 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "../shared/IVersionable.sol";
5
- import {ProxyManager} from "../shared/ProxyManager.sol";
4
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
5
+ import {ProxyManager} from "../upgradeability/ProxyManager.sol";
6
6
  import {BundleService} from "./BundleService.sol";
7
- import {Registry} from "../registry/Registry.sol";
8
- import {RegistryService} from "../registry/RegistryService.sol";
9
- import {ObjectType, REGISTRY} from "../type/ObjectType.sol";
10
7
 
11
8
  contract BundleServiceManager is ProxyManager {
12
9
 
@@ -26,6 +26,18 @@ interface IBundleService is IService {
26
26
 
27
27
  error ErrorBundleServicePolicyNotCloseable(NftId policyNftId);
28
28
 
29
+ error ErrorBundleServiceFeesWithdrawAmountExceedsLimit(Amount amount, Amount limit);
30
+ error ErrorBundleServiceFeesWithdrawAmountIsZero();
31
+ error ErrorBundleServiceWalletAllowanceTooSmall(address wallet, address tokenHandler, uint256 allowance, uint256 amount);
32
+
33
+ error ErrorBundleServiceUnstakeAmountExceedsLimit(Amount amount, Amount limit);
34
+ error ErrorBundleServiceBundleWithLockedCollateral(NftId bundleNftId, Amount lockedCollateralAmount);
35
+
36
+ error ErrorBundleServiceExtensionLifetimeIsZero();
37
+
38
+ event LogBundleServiceFeesWithdrawn(NftId bundleNftId, address recipient, address tokenAddress, Amount amount);
39
+ event LogBundleServiceBundleExtended(NftId bundleNftId, Seconds lifetimeExtension, Timestamp extendedExpiredAt);
40
+
29
41
  /// @dev create a new bundle for the specified attributes
30
42
  /// may only be called by pool service
31
43
  function create(
@@ -41,11 +53,20 @@ interface IBundleService is IService {
41
53
  returns(NftId bundleNftId); // the nft id of the newly created bundle
42
54
 
43
55
 
44
- /// @dev increase bundle stakes by the specified amount
45
- /// may only be called by the bundle owner
46
- // function stake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
56
+ /// @dev increase bundle stakes by the specified amount. bundle must not be expired or closed
57
+ /// may only be called by the pool service
58
+ function stake(IInstance instance, NftId bundleNftId, Amount amount) external;
47
59
 
48
- // function unstake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
60
+ /// @dev decrease bundle stakes by the specified amount
61
+ /// may only be called by the pool service
62
+ /// @param instance the instance relevant for the bundle
63
+ /// @param bundleNftId the bundle nft id
64
+ /// @param amount the amount to unstake (set to AmountLib.max() to unstake all available stakes)
65
+ /// @return unstakedAmount the effective unstaked amount
66
+ function unstake(IInstance instance, NftId bundleNftId, Amount amount) external returns (Amount unstakedAmount);
67
+
68
+ /// @dev extend the lifetime of the bundle by the specified time in seconds
69
+ function extend(NftId bundleNftId, Seconds lifetimeExtension) external returns (Timestamp extendedExpiredAt);
49
70
 
50
71
  /// @dev locks the specified bundle, locked bundles are not available to collateralize new policies
51
72
  /// only active bundles may be locked
@@ -64,7 +85,7 @@ interface IBundleService is IService {
64
85
  function close(
65
86
  IInstance instance,
66
87
  NftId bundleNftId
67
- ) external;
88
+ ) external returns (Amount balanceAmount, Amount feeAmount);
68
89
 
69
90
  /// @dev set bundle fee to provided value
70
91
  /// may only be called by registered and unlocked pool components
@@ -103,4 +124,11 @@ interface IBundleService is IService {
103
124
  IInstance instance,
104
125
  NftId policyNftId
105
126
  ) external;
127
+
128
+ /// @dev Withdraw bundle feeds for the given bundle
129
+ /// @param bundleNftId the bundle Nft Id
130
+ /// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
131
+ /// @return withdrawnAmount the effective withdrawn amount
132
+ function withdrawBundleFees(NftId bundleNftId, Amount amount) external returns (Amount withdrawnAmount);
133
+
106
134
  }