@etherisc/gif-next 0.0.2-7b65ccc-404 → 0.0.2-7bc90c5-046

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