@etherisc/gif-next 0.0.2-888aabe-141 → 0.0.2-8951ac2-139

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 (377) 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 +21 -21
  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 -248
  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 -222
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +223 -217
  24. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +62 -101
  26. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +24 -37
  28. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +120 -31
  30. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  31. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1411 -0
  32. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  33. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1171 -0
  34. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  35. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1517 -0
  36. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  37. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +1978 -0
  38. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  39. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  40. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  42. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/Instance.sol/Instance.json +10 -99
  44. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +71 -71
  46. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
  48. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +238 -123
  50. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +34 -146
  52. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +30 -81
  54. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +215 -219
  56. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  57. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  58. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  59. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  60. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  61. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  62. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  63. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  64. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  65. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  66. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  71. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  72. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  73. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  74. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +59 -235
  75. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  76. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  77. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  78. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  79. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +30 -37
  80. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  81. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  82. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +27 -219
  83. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  84. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +32 -144
  85. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  86. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +29 -80
  87. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  88. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +36 -284
  89. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  90. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  91. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  92. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +391 -163
  93. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  94. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +106 -89
  95. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  96. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +205 -1
  97. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  98. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +26 -95
  99. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  100. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +220 -100
  101. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  102. package/artifacts/contracts/pool/Pool.sol/Pool.json +26 -280
  103. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  104. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +264 -248
  105. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  106. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +35 -82
  107. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  108. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +31 -162
  109. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +26 -89
  111. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  112. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +3 -225
  113. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  114. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
  115. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  116. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +185 -175
  117. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  118. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +53 -100
  119. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  120. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  121. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  122. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +114 -0
  123. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  124. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +184 -119
  125. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  126. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +43 -43
  127. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  128. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +0 -37
  129. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  130. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
  131. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  132. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +242 -321
  133. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  134. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +50 -101
  135. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  136. package/artifacts/contracts/product/PricingService.sol/PricingService.json +113 -265
  137. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  138. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +52 -123
  139. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  140. package/artifacts/contracts/product/Product.sol/Product.json +3 -225
  141. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  142. package/artifacts/contracts/product/RiskService.sol/RiskService.json +583 -0
  143. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  144. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +651 -0
  145. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  146. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  147. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  148. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +221 -21
  149. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  150. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  151. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  152. package/artifacts/contracts/registry/Registry.sol/Registry.json +419 -82
  153. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  154. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +229 -114
  155. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  156. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +18 -130
  157. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  158. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +22 -73
  159. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  160. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  161. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  162. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +24 -14
  163. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  164. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  165. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  166. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  167. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  168. package/artifacts/contracts/shared/Component.sol/Component.json +0 -211
  169. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  170. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +164 -192
  171. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  172. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +55 -110
  173. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  174. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +0 -112
  175. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  176. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +0 -26
  177. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  178. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +92 -0
  179. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  180. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -37
  181. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  182. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  183. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  184. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  185. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +0 -42
  186. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  187. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  188. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  189. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  190. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  191. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  192. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  193. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -222
  194. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  195. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  196. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  197. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  198. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  199. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -57
  200. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  201. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +4 -136
  202. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  203. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -97
  204. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  205. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  206. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  207. package/artifacts/contracts/shared/Service.sol/Service.json +0 -112
  208. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  209. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  210. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  211. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  212. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  213. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +27 -27
  214. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  215. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  216. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +73 -93
  217. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  218. package/artifacts/contracts/staking/Staking.sol/Staking.json +85 -262
  219. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  220. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  221. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  222. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +42 -89
  223. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  224. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -6
  225. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  226. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +26 -138
  227. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  228. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +26 -77
  229. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  230. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +89 -84
  231. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  232. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +59 -23
  233. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  234. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  235. package/artifacts/contracts/type/Amount.sol/AmountLib.json +37 -8
  236. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  237. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  238. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  239. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  240. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  241. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  242. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  243. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  244. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  245. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  246. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  247. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  248. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  249. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  250. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  251. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  252. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  253. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  254. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  255. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  256. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  258. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  259. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
  260. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  262. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  263. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
  264. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  265. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  266. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  268. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  270. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  271. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  272. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  273. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  274. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
  275. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  276. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  277. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  278. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  279. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +14 -65
  280. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  281. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  282. package/contracts/authorization/AccessAdmin.sol +1 -3
  283. package/contracts/authorization/Authorization.sol +0 -1
  284. package/contracts/distribution/BasicDistribution.sol +4 -15
  285. package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
  286. package/contracts/distribution/Distribution.sol +16 -22
  287. package/contracts/distribution/DistributionService.sol +68 -20
  288. package/contracts/distribution/IDistributionComponent.sol +5 -2
  289. package/contracts/distribution/IDistributionService.sol +18 -2
  290. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  291. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  292. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  293. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  294. package/contracts/instance/IInstance.sol +7 -30
  295. package/contracts/instance/Instance.sol +10 -35
  296. package/contracts/instance/InstanceAdmin.sol +23 -4
  297. package/contracts/instance/InstanceAuthorizationV3.sol +3 -3
  298. package/contracts/instance/InstanceReader.sol +32 -7
  299. package/contracts/instance/InstanceService.sol +60 -36
  300. package/contracts/instance/InstanceStore.sol +12 -1
  301. package/contracts/instance/base/ObjectLifecycle.sol +9 -4
  302. package/contracts/instance/module/IBundle.sol +1 -1
  303. package/contracts/instance/module/IComponents.sol +1 -6
  304. package/contracts/instance/module/IDistribution.sol +0 -1
  305. package/contracts/instance/module/IPolicy.sol +22 -22
  306. package/contracts/mock/Dip.sol +1 -1
  307. package/contracts/oracle/IOracleComponent.sol +2 -1
  308. package/contracts/oracle/Oracle.sol +17 -7
  309. package/contracts/oracle/OracleService.sol +4 -3
  310. package/contracts/pool/BasicPool.sol +7 -5
  311. package/contracts/pool/BasicPoolAuthorization.sol +11 -2
  312. package/contracts/pool/BundleService.sol +179 -25
  313. package/contracts/pool/IBundleService.sol +33 -5
  314. package/contracts/pool/IPoolComponent.sol +6 -2
  315. package/contracts/pool/IPoolService.sol +36 -26
  316. package/contracts/pool/Pool.sol +39 -42
  317. package/contracts/pool/PoolService.sol +155 -82
  318. package/contracts/product/ApplicationService.sol +41 -23
  319. package/contracts/product/BasicProduct.sol +3 -32
  320. package/contracts/product/BasicProductAuthorization.sol +3 -0
  321. package/contracts/product/ClaimService.sol +116 -45
  322. package/contracts/product/IApplicationService.sol +1 -0
  323. package/contracts/product/IClaimService.sol +28 -5
  324. package/contracts/product/IPolicyService.sol +27 -32
  325. package/contracts/product/IPricingService.sol +7 -7
  326. package/contracts/product/IProductComponent.sol +1 -4
  327. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  328. package/contracts/product/PolicyService.sol +280 -182
  329. package/contracts/product/PricingService.sol +44 -43
  330. package/contracts/product/Product.sol +67 -51
  331. package/contracts/product/{ProductService.sol → RiskService.sol} +5 -7
  332. package/contracts/product/{ProductServiceManager.sol → RiskServiceManager.sol} +8 -8
  333. package/contracts/registry/ChainNft.sol +65 -32
  334. package/contracts/registry/IRegistry.sol +49 -15
  335. package/contracts/registry/Registry.sol +321 -195
  336. package/contracts/registry/RegistryAdmin.sol +150 -51
  337. package/contracts/registry/RegistryService.sol +2 -2
  338. package/contracts/registry/ReleaseRegistry.sol +12 -8
  339. package/contracts/registry/ServiceAuthorizationV3.sol +2 -3
  340. package/contracts/shared/Component.sol +23 -29
  341. package/contracts/shared/ComponentService.sol +61 -37
  342. package/contracts/shared/ComponentVerifyingService.sol +1 -1
  343. package/contracts/shared/IComponent.sol +4 -4
  344. package/contracts/shared/IComponentService.sol +9 -9
  345. package/contracts/shared/IInstanceLinkedComponent.sol +9 -10
  346. package/contracts/shared/IPolicyHolder.sol +0 -9
  347. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +3 -3
  348. package/contracts/shared/InstanceLinkedComponent.sol +25 -4
  349. package/contracts/shared/NftOwnable.sol +7 -7
  350. package/contracts/shared/PolicyHolder.sol +7 -53
  351. package/contracts/shared/Registerable.sol +4 -4
  352. package/contracts/shared/RegistryLinked.sol +3 -2
  353. package/contracts/shared/Service.sol +5 -5
  354. package/contracts/shared/TokenHandler.sol +100 -19
  355. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  356. package/contracts/staking/IStaking.sol +2 -1
  357. package/contracts/staking/StakeManagerLib.sol +18 -25
  358. package/contracts/staking/Staking.sol +10 -26
  359. package/contracts/staking/StakingService.sol +10 -14
  360. package/contracts/staking/TargetManagerLib.sol +7 -3
  361. package/contracts/type/Amount.sol +12 -5
  362. package/contracts/type/Blocknumber.sol +7 -1
  363. package/contracts/type/ObjectType.sol +15 -11
  364. package/contracts/type/Referral.sol +1 -0
  365. package/contracts/type/Seconds.sol +21 -1
  366. package/contracts/type/StateId.sol +1 -0
  367. package/contracts/type/Timestamp.sol +11 -1
  368. package/contracts/type/UFixed.sol +29 -10
  369. package/contracts/upgradeability/ProxyManager.sol +1 -1
  370. package/package.json +1 -1
  371. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  372. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  373. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  374. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  375. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  376. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  377. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
@@ -3,6 +3,7 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IBundle} from "../instance/module/IBundle.sol";
5
5
  import {IBundleService} from "./IBundleService.sol";
6
+ import {IComponents} from "../instance/module/IComponents.sol";
6
7
  import {IComponentService} from "../shared/IComponentService.sol";
7
8
  import {IRegistry} from "../registry/IRegistry.sol";
8
9
  import {IRegistryService} from "../registry/IRegistryService.sol";
@@ -19,7 +20,7 @@ import {NftId, NftIdLib} from "../type/NftId.sol";
19
20
  import {ObjectType, COMPONENT, POOL, BUNDLE, REGISTRY} from "../type/ObjectType.sol";
20
21
  import {StateId, ACTIVE, PAUSED, CLOSED, KEEP_STATE} from "../type/StateId.sol";
21
22
  import {Seconds} from "../type/Seconds.sol";
22
- import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
23
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
23
24
 
24
25
  string constant BUNDLE_SERVICE_NAME = "BundleService";
25
26
 
@@ -27,8 +28,7 @@ contract BundleService is
27
28
  ComponentVerifyingService,
28
29
  IBundleService
29
30
  {
30
- using NftIdLib for NftId;
31
-
31
+
32
32
  string public constant NAME = "BundleService";
33
33
 
34
34
  address private _registryAddress;
@@ -40,20 +40,20 @@ contract BundleService is
40
40
  bytes memory data
41
41
  )
42
42
  internal
43
- initializer
44
43
  virtual override
44
+ initializer()
45
45
  {
46
46
  address registryAddress;
47
47
  address initialOwner;
48
48
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
49
49
  // TODO while PoolService is not deployed in PoolServiceManager constructor
50
50
  // owner is PoolServiceManager deployer
51
- initializeService(registryAddress, address(0), owner);
51
+ _initializeService(registryAddress, address(0), owner);
52
52
 
53
53
  _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
54
54
  _componentService = IComponentService(_getServiceAddress(COMPONENT()));
55
55
 
56
- registerInterface(type(IBundleService).interfaceId);
56
+ _registerInterface(type(IBundleService).interfaceId);
57
57
  }
58
58
 
59
59
 
@@ -111,25 +111,28 @@ contract BundleService is
111
111
  InstanceStore instanceStore = instance.getInstanceStore();
112
112
  instanceStore.createBundle(
113
113
  bundleNftId,
114
- IBundle.BundleInfo(
115
- poolNftId,
116
- bundleFee,
117
- filter,
118
- lifetime,
119
- TimestampLib.blockTimestamp().addSeconds(lifetime),
120
- zeroTimestamp()));
114
+ IBundle.BundleInfo({
115
+ poolNftId: poolNftId,
116
+ fee: bundleFee,
117
+ filter: filter,
118
+ activatedAt: TimestampLib.blockTimestamp(),
119
+ expiredAt: TimestampLib.blockTimestamp().addSeconds(lifetime),
120
+ closedAt: zeroTimestamp()
121
+ })
122
+ );
121
123
 
122
- // bundle book keeping
123
- _componentService.increaseBundleBalance(
124
- instanceStore,
125
- bundleNftId,
126
- stakingAmount,
127
- AmountLib.zero()); // fee amount
124
+ if (stakingAmount.gtz()) {
125
+ // bundle book keeping
126
+ _componentService.increaseBundleBalance(
127
+ instanceStore,
128
+ bundleNftId,
129
+ stakingAmount,
130
+ AmountLib.zero()); // fee amount
131
+ }
128
132
 
129
133
  // put bundle under bundle managemet
130
134
  BundleSet bundleManager = instance.getBundleSet();
131
135
  bundleManager.add(bundleNftId);
132
-
133
136
  // TODO add logging
134
137
  }
135
138
 
@@ -146,7 +149,7 @@ contract BundleService is
146
149
  restricted()
147
150
  {
148
151
  InstanceReader instanceReader = instance.getInstanceReader();
149
- StateId bundleState = instanceReader.getMetadata(bundleNftId.toKey32(BUNDLE())).state;
152
+ StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
150
153
  IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
151
154
 
152
155
  // ensure bundle is active and not yet expired
@@ -216,9 +219,9 @@ contract BundleService is
216
219
  external
217
220
  virtual
218
221
  restricted
222
+ returns (Amount unstakedAmount, Amount feeAmount)
219
223
  {
220
- // udpate bundle state
221
- instance.getInstanceStore().updateBundleState(bundleNftId, CLOSED());
224
+ InstanceReader instanceReader = instance.getInstanceReader();
222
225
 
223
226
  // ensure no open policies attached to bundle
224
227
  BundleSet bundleManager = instance.getBundleSet();
@@ -227,8 +230,117 @@ contract BundleService is
227
230
  revert ErrorBundleServiceBundleWithOpenPolicies(bundleNftId, openPolicies);
228
231
  }
229
232
 
230
- // update set of active bundles
231
- bundleManager.lock(bundleNftId);
233
+ {
234
+ // update bundle state
235
+ InstanceStore instanceStore = instance.getInstanceStore();
236
+ instanceStore.updateBundleState(bundleNftId, CLOSED());
237
+ bundleManager.lock(bundleNftId);
238
+
239
+ // decrease bundle counters
240
+ Amount balanceAmountWithFees = instanceReader.getBalanceAmount(bundleNftId);
241
+ feeAmount = instanceReader.getFeeAmount(bundleNftId);
242
+ unstakedAmount = balanceAmountWithFees - feeAmount;
243
+ _componentService.decreaseBundleBalance(instanceStore, bundleNftId, unstakedAmount, feeAmount);
244
+ }
245
+ }
246
+
247
+ /// @inheritdoc IBundleService
248
+ function stake(
249
+ IInstance instance,
250
+ NftId bundleNftId,
251
+ Amount amount
252
+ )
253
+ external
254
+ virtual
255
+ // TODO: restricted() (once #462 is done)
256
+ {
257
+ IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
258
+ StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
259
+
260
+ if( (bundleState != ACTIVE() && bundleState != PAUSED()) // locked bundles can be staked
261
+ || bundleInfo.expiredAt < TimestampLib.blockTimestamp()
262
+ || bundleInfo.closedAt.gtz()) {
263
+ revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
264
+ }
265
+
266
+ _componentService.increaseBundleBalance(
267
+ instance.getInstanceStore(),
268
+ bundleNftId,
269
+ amount,
270
+ AmountLib.zero());
271
+ }
272
+
273
+ /// @inheritdoc IBundleService
274
+ function unstake(
275
+ IInstance instance,
276
+ NftId bundleNftId,
277
+ Amount amount
278
+ )
279
+ external
280
+ virtual
281
+ // TODO: restricted() (once #462 is done)
282
+ returns (Amount unstakedAmount)
283
+ {
284
+ InstanceStore instanceStore = instance.getInstanceStore();
285
+ (
286
+ Amount balanceAmount,
287
+ Amount lockedAmount,
288
+ Amount feeAmount
289
+ ) = instanceStore.getAmounts(bundleNftId);
290
+
291
+ Amount unstakedAmount = amount;
292
+ Amount availableAmount = balanceAmount - (lockedAmount + feeAmount);
293
+
294
+ // if amount is max, then unstake all available
295
+ if (amount.gte(AmountLib.max())) {
296
+ unstakedAmount = availableAmount;
297
+ }
298
+
299
+ // ensure unstaked amount does not exceed available amount
300
+ if (unstakedAmount > availableAmount) {
301
+ revert ErrorBundleServiceUnstakeAmountExceedsLimit(amount, availableAmount);
302
+ }
303
+
304
+ _componentService.decreaseBundleBalance(
305
+ instanceStore,
306
+ bundleNftId,
307
+ unstakedAmount,
308
+ AmountLib.zero());
309
+
310
+ return unstakedAmount;
311
+ }
312
+
313
+ /// @inheritdoc IBundleService
314
+ function extend(NftId bundleNftId, Seconds lifetimeExtension)
315
+ external
316
+ virtual
317
+ // TODO: restricted() (once #462 is done)
318
+ returns (Timestamp extendedExpiredAt)
319
+ {
320
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
321
+ IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
322
+ StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
323
+
324
+ // ensure bundle belongs to the pool
325
+ if (bundleInfo.poolNftId != poolNftId) {
326
+ revert ErrorBundleServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
327
+ }
328
+
329
+ // ensure bundle is active and not yet expired
330
+ if(bundleState != ACTIVE() || bundleInfo.expiredAt < TimestampLib.blockTimestamp()) {
331
+ revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
332
+ }
333
+
334
+ if (lifetimeExtension.eqz()) {
335
+ revert ErrorBundleServiceExtensionLifetimeIsZero();
336
+ }
337
+
338
+ bundleInfo.expiredAt = bundleInfo.expiredAt.addSeconds(lifetimeExtension);
339
+ instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
340
+
341
+ emit LogBundleServiceBundleExtended(bundleNftId, lifetimeExtension, bundleInfo.expiredAt);
342
+
343
+ return bundleInfo.expiredAt;
232
344
  }
233
345
 
234
346
 
@@ -262,6 +374,48 @@ contract BundleService is
262
374
  instance.getBundleSet().unlinkPolicy(policyNftId);
263
375
  }
264
376
 
377
+ /// @inheritdoc IBundleService
378
+ function withdrawBundleFees(NftId bundleNftId, Amount amount)
379
+ public
380
+ virtual
381
+ // TODO: restricted() (once #462 is done)
382
+ returns (Amount withdrawnAmount)
383
+ {
384
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
385
+ InstanceReader reader = instance.getInstanceReader();
386
+
387
+ IComponents.ComponentInfo memory poolInfo = reader.getComponentInfo(poolNftId);
388
+ address poolWallet = poolInfo.wallet;
389
+
390
+ IBundle.BundleInfo memory bundleInfo = reader.getBundleInfo(bundleNftId);
391
+
392
+ // determine withdrawn amount
393
+ withdrawnAmount = amount;
394
+ if (withdrawnAmount.gte(AmountLib.max())) {
395
+ withdrawnAmount = reader.getFeeAmount(bundleNftId);
396
+ } else {
397
+ if (withdrawnAmount.gt(reader.getFeeAmount(bundleNftId))) {
398
+ revert ErrorBundleServiceFeesWithdrawAmountExceedsLimit(withdrawnAmount, reader.getFeeAmount(bundleNftId));
399
+ }
400
+ }
401
+
402
+ // decrease fee counters by withdrawnAmount
403
+ {
404
+ InstanceStore store = instance.getInstanceStore();
405
+ // decrease fee amount of the bundle
406
+ _componentService.decreaseBundleBalance(store, bundleNftId, AmountLib.zero(), withdrawnAmount);
407
+ // decrease pool balance
408
+ _componentService.decreasePoolBalance(store, poolNftId, withdrawnAmount, AmountLib.zero());
409
+ }
410
+
411
+ // transfer amount to bundle owner
412
+ {
413
+ address owner = getRegistry().ownerOf(bundleNftId);
414
+ emit LogBundleServiceFeesWithdrawn(bundleNftId, owner, address(poolInfo.token), withdrawnAmount);
415
+ poolInfo.tokenHandler.distributeTokens(poolWallet, owner, withdrawnAmount);
416
+ }
417
+ }
418
+
265
419
  /// @dev links policy to bundle
266
420
  function _linkPolicy(IInstance instance, NftId policyNftId)
267
421
  internal
@@ -26,6 +26,15 @@ interface IBundleService is IService {
26
26
 
27
27
  error ErrorBundleServicePolicyNotCloseable(NftId policyNftId);
28
28
 
29
+ error ErrorBundleServiceFeesWithdrawAmountExceedsLimit(Amount amount, Amount limit);
30
+
31
+ error ErrorBundleServiceUnstakeAmountExceedsLimit(Amount amount, Amount limit);
32
+
33
+ error ErrorBundleServiceExtensionLifetimeIsZero();
34
+
35
+ event LogBundleServiceFeesWithdrawn(NftId bundleNftId, address recipient, address tokenAddress, Amount amount);
36
+ event LogBundleServiceBundleExtended(NftId bundleNftId, Seconds lifetimeExtension, Timestamp extendedExpiredAt);
37
+
29
38
  /// @dev create a new bundle for the specified attributes
30
39
  /// may only be called by pool service
31
40
  function create(
@@ -41,11 +50,20 @@ interface IBundleService is IService {
41
50
  returns(NftId bundleNftId); // the nft id of the newly created bundle
42
51
 
43
52
 
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);
53
+ /// @dev increase bundle stakes by the specified amount. bundle must not be expired or closed
54
+ /// may only be called by the pool service
55
+ function stake(IInstance instance, NftId bundleNftId, Amount amount) external;
56
+
57
+ /// @dev decrease bundle stakes by the specified amount
58
+ /// may only be called by the pool service
59
+ /// @param instance the instance relevant for the bundle
60
+ /// @param bundleNftId the bundle nft id
61
+ /// @param amount the amount to unstake (set to AmountLib.max() to unstake all available stakes)
62
+ /// @return unstakedAmount the effective unstaked amount
63
+ function unstake(IInstance instance, NftId bundleNftId, Amount amount) external returns (Amount unstakedAmount);
47
64
 
48
- // function unstake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
65
+ /// @dev extend the lifetime of the bundle by the specified time in seconds
66
+ function extend(NftId bundleNftId, Seconds lifetimeExtension) external returns (Timestamp extendedExpiredAt);
49
67
 
50
68
  /// @dev locks the specified bundle, locked bundles are not available to collateralize new policies
51
69
  /// only active bundles may be locked
@@ -61,10 +79,12 @@ interface IBundleService is IService {
61
79
  /// only open bundles (active or locked) may be closed
62
80
  /// to close a bundle it may not have any non-closed polices attached to it
63
81
  /// may only be called by registered and unlocked pool components
82
+ /// @return balanceAmount the unstaked amount that was remaining in the bundle
83
+ /// @return feeAmount the fee amount that was remaining for the bundle
64
84
  function close(
65
85
  IInstance instance,
66
86
  NftId bundleNftId
67
- ) external;
87
+ ) external returns (Amount balanceAmount, Amount feeAmount);
68
88
 
69
89
  /// @dev set bundle fee to provided value
70
90
  /// may only be called by registered and unlocked pool components
@@ -103,4 +123,12 @@ interface IBundleService is IService {
103
123
  IInstance instance,
104
124
  NftId policyNftId
105
125
  ) external;
126
+
127
+ // FIXME: move to pool service
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
  }
@@ -46,9 +46,13 @@ interface IPoolComponent is IInstanceLinkedComponent {
46
46
  view
47
47
  returns (bool isMatching);
48
48
 
49
+ /// @dev Withdraw bundle feeds for the given bundle
50
+ /// @param bundleNftId the bundle Nft Id
51
+ /// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
52
+ /// @return withdrawnAmount the effective withdrawn amount
53
+ function withdrawBundleFees(NftId bundleNftId, Amount amount) external returns (Amount withdrawnAmount);
54
+
49
55
  /// @dev returns initial pool specific infos for this pool
50
56
  function getInitialPoolInfo() external view returns (IComponents.PoolInfo memory info);
51
57
 
52
- /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
53
- function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
54
58
  }
@@ -17,29 +17,26 @@ import {UFixed} from "../type/UFixed.sol";
17
17
 
18
18
  interface IPoolService is IService {
19
19
 
20
- event LogPoolServiceMaxCapitalAmountUpdated(NftId poolNftId, Amount previousMaxCapitalAmount, Amount currentMaxCapitalAmount);
20
+ event LogPoolServiceMaxBalanceAmountUpdated(NftId poolNftId, Amount previousMaxCapitalAmount, Amount currentMaxCapitalAmount);
21
21
  event LogPoolServiceBundleOwnerRoleSet(NftId poolNftId, RoleId bundleOwnerRole);
22
22
 
23
23
  event LogPoolServiceBundleCreated(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
24
24
  event LogPoolServiceBundleClosed(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
25
25
 
26
+ event LogPoolServiceBundleStaked(NftId instanceNftId, NftId poolNftId, NftId bundleNftId, Amount amount, Amount netAmount);
27
+ event LogPoolServiceBundleUnstaked(NftId instanceNftId, NftId poolNftId, NftId bundleNftId, Amount amount);
28
+
26
29
  error ErrorPoolServiceBundleOwnerRoleAlreadySet(NftId poolNftId);
27
30
  error ErrorPoolServiceInvalidTransferAmount(Amount expectedAmount, Amount actualAmount);
28
-
31
+ error ErrorPoolServiceBundlePoolMismatch(NftId bundleNftId, NftId poolNftId);
32
+ error ErrorPoolServiceMaxBalanceAmountExceeded(NftId poolNftId, Amount maxBalanceAmount, Amount currentBalanceAmount, Amount transferAmount);
33
+
29
34
  /// @dev defines the required role for bundle owners for the calling pool
30
35
  /// default implementation returns PUBLIC ROLE
31
36
  function setBundleOwnerRole(RoleId bundleOwnerRole) external;
32
37
 
33
- /// @dev sets the max capital amount for the calling pool
34
- function setMaxCapitalAmount(Amount maxCapitalAmount) external;
35
-
36
- /// @dev set pool sepecific fees
37
- function setFees(
38
- Fee memory poolFee,
39
- Fee memory stakingFee,
40
- Fee memory performanceFee
41
- ) external;
42
-
38
+ /// @dev sets the max balance amount for the calling pool
39
+ function setMaxBalanceAmount(Amount maxBalanceAmount) external;
43
40
 
44
41
  /// @dev locks required collateral to cover the specified application (and turn it into a policy)
45
42
  /// - retention level == 1: the full collateral amount will be locked by the specified bundle
@@ -83,13 +80,11 @@ interface IPoolService is IService {
83
80
  ) external;
84
81
 
85
82
 
86
- /// @dev create a new bundle for the provided parameters
87
- /// staking fees will be deducted by the pool service from the staking amount
88
- /// may only be called by registered and unlocked pool components
83
+ /// @dev create a new empty bundle with the provided parameters
84
+ /// may only be called by registered and unlocked pool components.
89
85
  function createBundle(
90
86
  address owner, // initial bundle owner
91
87
  Fee memory fee, // fees deducted from premium that go to bundle owner
92
- Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
93
88
  Seconds lifetime, // initial duration for which new policies are covered
94
89
  bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
95
90
  )
@@ -97,6 +92,18 @@ interface IPoolService is IService {
97
92
  returns(NftId bundleNftId); // the nft id of the newly created bundle
98
93
 
99
94
 
95
+ /// @dev increase stakes for bundle
96
+ /// staking fees will be deducted by the pool service from the staking amount
97
+ /// may only be called by registered and unlocked pool components
98
+ function stake(NftId bundleNftId, Amount amount) external returns(Amount netAmount);
99
+
100
+
101
+ /// @dev decrease stakes for bundle
102
+ /// performance fees will be deducted by the pool service from the staking amount
103
+ /// may only be called by registered and unlocked pool components
104
+ function unstake(NftId bundleNftId, Amount amount) external returns(Amount netAmount);
105
+
106
+
100
107
  /// @dev closes the specified bundle
101
108
  /// only open bundles (active or locked) may be closed
102
109
  /// to close a bundle it may not have any non-closed polices attached to it
@@ -105,19 +112,22 @@ interface IPoolService is IService {
105
112
  function closeBundle(NftId bundleNftId) external;
106
113
 
107
114
 
108
- /// @dev processes the sale of a bundle and track the pool fee and bundle fee amounts
109
- function processSale(NftId bundleNftId, IPolicy.Premium memory premium) external;
115
+ /// @dev Fund the specified pool wallet with the provided amount.
116
+ /// This function will collect the amount from the sender address and transfers it to the pool wallet.
117
+ /// The function will not update balance amounts managed by the framework.
118
+ /// Only available for externally managed pools.
119
+ function fundPoolWallet(NftId poolNftId, Amount amount) external;
110
120
 
111
- /// @dev increase stakes for bundle
112
- /// staking fees will be deducted by the pool service from the staking amount
113
- /// may only be called by registered and unlocked pool components
114
- // function stake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
115
121
 
122
+ /// @dev Defund the specified pool wallet with the provided amount.
123
+ /// This function will transfer the amount from the pool wallet to the sender address.
124
+ /// The function will not update balance amounts managed by the framework.
125
+ /// Only available for externally managed pools.
126
+ function defundPoolWallet(NftId poolNftId, Amount amount) external;
116
127
 
117
- /// @dev decrease stakes for bundle
118
- /// performance fees will be deducted by the pool service from the staking amount
119
- /// may only be called by registered and unlocked pool components
120
- // function unstake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
128
+
129
+ /// @dev processes the sale of a bundle and track the pool fee and bundle fee amounts
130
+ function processSale(NftId bundleNftId, IPolicy.PremiumInfo memory premium) external;
121
131
 
122
132
 
123
133
  /// @dev calulate required collateral for the provided parameters
@@ -14,6 +14,7 @@ import {Fee, FeeLib} from "../type/Fee.sol";
14
14
  import {NftId, NftIdLib} from "../type/NftId.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
 
@@ -94,6 +95,17 @@ abstract contract Pool is
94
95
  _approveTokenHandler(type(uint256).max);
95
96
  }
96
97
 
98
+ /// @inheritdoc IPoolComponent
99
+ function withdrawBundleFees(NftId bundleNftId, Amount amount)
100
+ external
101
+ virtual
102
+ restricted()
103
+ onlyBundleOwner(bundleNftId)
104
+ returns (Amount withdrawnAmount)
105
+ {
106
+ return _withdrawBundleFees(bundleNftId, amount);
107
+ }
108
+
97
109
 
98
110
  function getInitialPoolInfo()
99
111
  public
@@ -101,28 +113,15 @@ abstract contract Pool is
101
113
  view
102
114
  returns (IComponents.PoolInfo memory poolInfo)
103
115
  {
104
- return IComponents.PoolInfo(
105
- NftIdLib.zero(), // will be set when GIF registers the related product
106
- PUBLIC_ROLE(), // bundleOwnerRole
107
- AmountLib.max(), // maxCapitalAmount,
108
- isNftInterceptor(), // isInterceptingBundleTransfers
109
- false, // isExternallyManaged,
110
- false, // isVerifyingApplications,
111
- UFixedLib.toUFixed(1), // collateralizationLevel,
112
- UFixedLib.toUFixed(1), // retentionLevel,
113
- FeeLib.zero(), // initialPoolFee,
114
- FeeLib.zero(), // initialStakingFee,
115
- FeeLib.zero() // initialPerformanceFee,
116
- );
117
- }
118
-
119
- function withdrawFees(Amount amount)
120
- external
121
- virtual
122
- onlyOwner()
123
- returns (Amount withdrawnAmount)
124
- {
125
- return _withdrawFees(amount);
116
+ return IComponents.PoolInfo({
117
+ maxBalanceAmount: AmountLib.max(),
118
+ bundleOwnerRole: PUBLIC_ROLE(),
119
+ isInterceptingBundleTransfers: isNftInterceptor(),
120
+ isExternallyManaged: false,
121
+ isVerifyingApplications: false,
122
+ collateralizationLevel: UFixedLib.toUFixed(1),
123
+ retentionLevel: UFixedLib.toUFixed(1)
124
+ });
126
125
  }
127
126
 
128
127
  // Internals
@@ -159,7 +158,7 @@ abstract contract Pool is
159
158
  $._bundleService = IBundleService(_getServiceAddress(BUNDLE()));
160
159
  $._componentService = IComponentService(_getServiceAddress(COMPONENT()));
161
160
 
162
- registerInterface(type(IPoolComponent).interfaceId);
161
+ _registerInterface(type(IPoolComponent).interfaceId);
163
162
  }
164
163
 
165
164
  /// @dev increases the staked tokens by the specified amount
@@ -170,8 +169,9 @@ abstract contract Pool is
170
169
  )
171
170
  internal
172
171
  virtual
172
+ returns(Amount)
173
173
  {
174
- // TODO add implementation
174
+ return _getPoolStorage()._poolService.stake(bundleNftId, amount);
175
175
  }
176
176
 
177
177
 
@@ -183,8 +183,9 @@ abstract contract Pool is
183
183
  )
184
184
  internal
185
185
  virtual
186
+ returns(Amount netAmount)
186
187
  {
187
- // TODO add implementation
188
+ return _getPoolStorage()._poolService.unstake(bundleNftId, amount);
188
189
  }
189
190
 
190
191
 
@@ -196,8 +197,9 @@ abstract contract Pool is
196
197
  )
197
198
  internal
198
199
  virtual
200
+ returns (Timestamp extendedExpiredAt)
199
201
  {
200
- // TODO add implementation
202
+ return _getPoolStorage()._bundleService.extend(bundleNftId, lifetimeExtension);
201
203
  }
202
204
 
203
205
 
@@ -227,7 +229,7 @@ abstract contract Pool is
227
229
  /// To close a bundle all all linked policies MUST be in closed state as well.
228
230
  /// Closing a bundle finalizes the bundle bookkeeping including overall profit calculation.
229
231
  /// Once a bundle is closed this action cannot be reversed.
230
- function _close(NftId bundleNftId)
232
+ function _closeBundle(NftId bundleNftId)
231
233
  internal
232
234
  virtual
233
235
  {
@@ -249,13 +251,13 @@ abstract contract Pool is
249
251
  }
250
252
 
251
253
 
252
- /// @dev Sets the maximum overall capital amound held by this pool.
254
+ /// @dev Sets the maximum balance amound held by this pool.
253
255
  /// Function may only be called by pool owner.
254
- function _setMaxCapitalAmount(Amount maxCapitalAmount)
256
+ function _setMaxBalanceAmount(Amount maxBalanceAmount)
255
257
  internal
256
258
  virtual
257
259
  {
258
- _getPoolStorage()._poolService.setMaxCapitalAmount(maxCapitalAmount);
260
+ _getPoolStorage()._poolService.setMaxBalanceAmount(maxBalanceAmount);
259
261
  }
260
262
 
261
263
  /// @dev Sets the required role to create/own bundles.
@@ -285,11 +287,10 @@ abstract contract Pool is
285
287
  _getPoolStorage()._componentService.setPoolFees(poolFee, stakingFee, performanceFee);
286
288
  }
287
289
 
288
- /// @dev Creates a new bundle using the provided parameter values.
290
+ /// @dev Creates a new empty bundle using the provided parameter values.
289
291
  function _createBundle(
290
292
  address bundleOwner,
291
293
  Fee memory fee,
292
- Amount amount,
293
294
  Seconds lifetime,
294
295
  bytes memory filter
295
296
  )
@@ -299,27 +300,23 @@ abstract contract Pool is
299
300
  bundleNftId = _getPoolStorage()._poolService.createBundle(
300
301
  bundleOwner,
301
302
  fee,
302
- amount,
303
303
  lifetime,
304
304
  filter);
305
305
 
306
306
  // TODO add logging
307
307
  }
308
308
 
309
- function _withdrawFees(Amount amount)
310
- internal
311
- virtual
312
- returns (Amount withdrawnAmount)
313
- {
314
- return _getPoolStorage()._componentService.withdrawFees(amount);
315
- }
316
-
317
-
318
309
  // TODO remove function once this is no longer used to produce contract locations on the fly ...
319
310
  function getContractLocation(bytes memory name) external pure returns (bytes32 hash) {
320
311
  return keccak256(abi.encode(uint256(keccak256(name)) - 1)) & ~bytes32(uint256(0xff));
321
312
  }
322
313
 
314
+ function _withdrawBundleFees(NftId bundleNftId, Amount amount)
315
+ internal
316
+ returns (Amount withdrawnAmount)
317
+ {
318
+ return _getPoolStorage()._bundleService.withdrawBundleFees(bundleNftId, amount);
319
+ }
323
320
 
324
321
  function _getPoolStorage() private pure returns (PoolStorage storage $) {
325
322
  assembly {