@etherisc/gif-next 0.0.2-c0457ac-280 → 0.0.2-c0ca5fe-234

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 (438) hide show
  1. package/README.md +30 -2
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1253 -0
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
  5. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1206 -0
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  7. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +358 -0
  8. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  9. package/artifacts/contracts/authorization/IAccess.sol/IAccess.json +10 -0
  10. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  11. package/artifacts/contracts/{shared → authorization}/IAccessAdmin.sol/IAccessAdmin.json +95 -252
  12. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +258 -0
  14. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +290 -0
  16. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  17. package/artifacts/contracts/{registry → authorization}/IServiceAuthorization.sol/IServiceAuthorization.json +29 -10
  18. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +390 -0
  20. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  21. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +190 -0
  22. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  23. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1548 -0
  24. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  25. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +410 -0
  26. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +46 -228
  28. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +269 -90
  30. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +83 -55
  32. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +100 -132
  34. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  35. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +134 -16
  36. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  37. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
  38. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +6 -19
  40. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +32 -44
  42. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/Instance.sol/Instance.json +35 -96
  44. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1208 -290
  46. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  47. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +601 -0
  48. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +112 -83
  50. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +65 -125
  52. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +35 -59
  54. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +88 -105
  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 +4 -0
  62. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +182 -0
  63. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  64. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +181 -0
  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 +4 -0
  74. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +1185 -0
  75. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  76. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +418 -0
  77. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  78. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +43 -1
  79. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  80. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +43 -0
  81. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  82. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  83. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +43 -96
  84. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  85. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +32 -32
  86. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  87. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +34 -34
  88. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  89. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1520 -0
  90. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  91. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +410 -0
  92. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  93. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +404 -55
  94. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +108 -40
  96. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  97. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +213 -0
  98. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  99. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +43 -195
  100. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  101. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +189 -0
  102. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  103. package/artifacts/contracts/pool/Pool.sol/Pool.json +43 -296
  104. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  105. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +289 -36
  106. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  107. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +68 -36
  108. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  109. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +32 -32
  110. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  111. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +34 -34
  112. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  113. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1318 -0
  114. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  115. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +410 -0
  116. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  117. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +72 -72
  118. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  119. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +54 -54
  120. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  121. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  122. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  123. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  124. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  125. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +32 -42
  126. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  127. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  128. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +50 -50
  129. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  130. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +43 -43
  131. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  132. package/artifacts/contracts/product/PricingService.sol/PricingService.json +63 -58
  133. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  134. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +47 -47
  135. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  136. package/artifacts/contracts/product/Product.sol/Product.json +32 -153
  137. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  138. package/artifacts/contracts/product/ProductService.sol/ProductService.json +20 -20
  139. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  140. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +28 -28
  141. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  142. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  143. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  144. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +50 -46
  145. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  146. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -183
  147. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  148. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  149. package/artifacts/contracts/registry/Registry.sol/Registry.json +101 -73
  150. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  151. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +234 -389
  152. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  153. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +18 -18
  154. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  155. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +27 -27
  156. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  157. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +164 -0
  158. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  159. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1159 -0
  160. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  161. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +43 -16
  162. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  163. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +4 -4
  164. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  165. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  166. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +271 -86
  167. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  168. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +77 -61
  169. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  170. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  171. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  172. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +153 -0
  173. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  174. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +32 -0
  175. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  176. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +11 -5
  177. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  178. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +0 -5
  179. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  180. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  181. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  182. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  183. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  184. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  185. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  186. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +73 -0
  187. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  188. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +32 -53
  189. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  190. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +15 -89
  191. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  192. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +4 -65
  193. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  194. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  195. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  196. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -6
  197. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  198. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +6 -6
  199. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  200. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -8
  201. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  202. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  203. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  204. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  205. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +6 -6
  206. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  207. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  208. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  209. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +42 -32
  210. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  211. package/artifacts/contracts/staking/Staking.sol/Staking.json +44 -44
  212. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  213. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +164 -0
  214. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  215. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +40 -40
  216. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  217. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -6
  218. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  219. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +26 -26
  220. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  221. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +31 -31
  222. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  223. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +146 -165
  224. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  225. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +27 -22
  226. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  227. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  228. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  229. package/artifacts/contracts/type/Amount.sol/AmountLib.json +37 -8
  230. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  231. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  232. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  233. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +4 -4
  234. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  235. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
  236. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  237. package/artifacts/contracts/type/Fee.sol/FeeLib.json +17 -12
  238. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  239. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  240. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  241. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +4 -4
  242. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  243. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  244. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  245. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +55 -2
  246. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  247. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +4 -4
  248. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  249. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
  250. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  251. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +4 -4
  252. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  253. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +4 -4
  254. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  255. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +117 -14
  256. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  258. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  259. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +2 -2
  260. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
  262. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  263. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  264. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  265. package/artifacts/contracts/type/String.sol/StrLib.json +2 -2
  266. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +4 -4
  268. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  270. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +58 -2
  272. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  274. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
  276. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  277. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  278. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  279. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +617 -0
  280. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  281. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  282. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  283. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  284. package/contracts/{shared → authorization}/AccessAdmin.sol +135 -303
  285. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  286. package/contracts/authorization/Authorization.sol +218 -0
  287. package/contracts/authorization/IAccess.sol +48 -0
  288. package/contracts/{shared → authorization}/IAccessAdmin.sol +22 -54
  289. package/contracts/authorization/IAuthorization.sol +54 -0
  290. package/contracts/authorization/IModuleAuthorization.sol +21 -0
  291. package/contracts/{registry → authorization}/IServiceAuthorization.sol +8 -5
  292. package/contracts/authorization/ModuleAuthorization.sol +78 -0
  293. package/contracts/{registry → authorization}/ServiceAuthorization.sol +21 -17
  294. package/contracts/distribution/BasicDistribution.sol +138 -0
  295. package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
  296. package/contracts/distribution/Distribution.sol +144 -110
  297. package/contracts/distribution/DistributionService.sol +71 -31
  298. package/contracts/distribution/DistributionServiceManager.sol +2 -5
  299. package/contracts/distribution/IDistributionComponent.sol +25 -39
  300. package/contracts/distribution/IDistributionService.sol +17 -1
  301. package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
  302. package/contracts/instance/IInstance.sol +8 -9
  303. package/contracts/instance/IInstanceService.sol +13 -18
  304. package/contracts/instance/Instance.sol +61 -70
  305. package/contracts/instance/InstanceAdmin.sol +202 -267
  306. package/contracts/instance/InstanceAuthorizationV3.sol +204 -0
  307. package/contracts/instance/InstanceReader.sol +22 -9
  308. package/contracts/instance/InstanceService.sol +74 -70
  309. package/contracts/instance/InstanceServiceManager.sol +2 -6
  310. package/contracts/instance/InstanceStore.sol +13 -5
  311. package/contracts/instance/base/ObjectLifecycle.sol +106 -0
  312. package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +11 -12
  313. package/contracts/instance/module/IBundle.sol +1 -1
  314. package/contracts/instance/module/IComponents.sol +1 -1
  315. package/contracts/instance/module/IDistribution.sol +0 -1
  316. package/contracts/oracle/BasicOracle.sol +48 -0
  317. package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
  318. package/contracts/oracle/IOracle.sol +16 -0
  319. package/contracts/oracle/IOracleComponent.sol +2 -1
  320. package/contracts/oracle/Oracle.sol +72 -51
  321. package/contracts/oracle/OracleServiceManager.sol +2 -5
  322. package/contracts/pool/BasicPool.sol +164 -0
  323. package/contracts/pool/BasicPoolAuthorization.sol +58 -0
  324. package/contracts/pool/BundleService.sol +157 -29
  325. package/contracts/pool/BundleServiceManager.sol +2 -5
  326. package/contracts/pool/IBundleService.sol +25 -3
  327. package/contracts/pool/IPoolComponent.sol +6 -60
  328. package/contracts/pool/IPoolService.sol +12 -4
  329. package/contracts/pool/Pool.sol +167 -134
  330. package/contracts/pool/PoolService.sol +136 -32
  331. package/contracts/pool/PoolServiceManager.sol +2 -5
  332. package/contracts/product/ApplicationService.sol +12 -36
  333. package/contracts/product/ApplicationServiceManager.sol +2 -2
  334. package/contracts/product/BasicProduct.sol +82 -0
  335. package/contracts/product/BasicProductAuthorization.sol +43 -0
  336. package/contracts/product/ClaimService.sol +7 -32
  337. package/contracts/product/ClaimServiceManager.sol +2 -2
  338. package/contracts/product/IProductComponent.sol +7 -9
  339. package/contracts/product/PolicyService.sol +1 -0
  340. package/contracts/product/PolicyServiceManager.sol +2 -5
  341. package/contracts/product/PricingServiceManager.sol +2 -5
  342. package/contracts/product/Product.sol +103 -88
  343. package/contracts/product/ProductService.sol +7 -32
  344. package/contracts/product/ProductServiceManager.sol +2 -5
  345. package/contracts/registry/IRegistry.sol +26 -16
  346. package/contracts/registry/IRegistryService.sol +6 -6
  347. package/contracts/registry/Registry.sol +81 -87
  348. package/contracts/registry/RegistryAdmin.sol +118 -86
  349. package/contracts/registry/RegistryService.sol +4 -18
  350. package/contracts/registry/RegistryServiceManager.sol +2 -2
  351. package/contracts/registry/ReleaseLifecycle.sol +27 -0
  352. package/contracts/registry/ReleaseRegistry.sol +485 -0
  353. package/contracts/registry/ServiceAuthorizationV3.sol +14 -14
  354. package/contracts/registry/TokenRegistry.sol +2 -2
  355. package/contracts/shared/Component.sol +13 -14
  356. package/contracts/shared/ComponentService.sol +102 -68
  357. package/contracts/shared/ComponentServiceManager.sol +2 -2
  358. package/contracts/shared/ComponentVerifyingService.sol +1 -1
  359. package/contracts/shared/IComponentService.sol +15 -9
  360. package/contracts/shared/IInstanceLinkedComponent.sol +10 -0
  361. package/contracts/shared/IKeyValueStore.sol +1 -0
  362. package/contracts/shared/ILifecycle.sol +1 -2
  363. package/contracts/shared/IService.sol +1 -1
  364. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
  365. package/contracts/shared/InstanceLinkedComponent.sol +47 -19
  366. package/contracts/shared/KeyValueStore.sol +6 -2
  367. package/contracts/shared/Lifecycle.sol +16 -69
  368. package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
  369. package/contracts/shared/NftOwnable.sol +2 -2
  370. package/contracts/shared/PolicyHolder.sol +2 -5
  371. package/contracts/shared/Service.sol +3 -4
  372. package/contracts/staking/IStaking.sol +1 -2
  373. package/contracts/staking/IStakingService.sol +12 -5
  374. package/contracts/staking/Staking.sol +20 -17
  375. package/contracts/staking/StakingLifecycle.sol +23 -0
  376. package/contracts/staking/StakingManager.sol +2 -6
  377. package/contracts/staking/StakingReader.sol +12 -16
  378. package/contracts/staking/StakingServiceManager.sol +2 -2
  379. package/contracts/staking/StakingStore.sol +15 -23
  380. package/contracts/type/Amount.sol +12 -5
  381. package/contracts/type/ObjectType.sol +37 -7
  382. package/contracts/type/Referral.sol +1 -0
  383. package/contracts/type/RoleId.sol +55 -82
  384. package/contracts/type/Seconds.sol +13 -1
  385. package/contracts/type/UFixed.sol +34 -9
  386. package/contracts/type/Version.sol +3 -1
  387. package/contracts/{shared → upgradeability}/ProxyManager.sol +3 -4
  388. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  389. package/package.json +6 -3
  390. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  391. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -709
  392. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
  393. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -228
  394. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  395. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -187
  396. package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +0 -4
  397. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  398. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1218
  399. package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +0 -4
  400. package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.json +0 -171
  401. package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.dbg.json +0 -4
  402. package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.json +0 -1559
  403. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +0 -4
  404. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.json +0 -1193
  405. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +0 -4
  406. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +0 -1747
  407. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +0 -4
  408. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +0 -1760
  409. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +0 -4
  410. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +0 -1838
  411. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +0 -4
  412. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +0 -1856
  413. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  414. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  415. package/artifacts/contracts/shared/IAccessAdmin.sol/IAccessAdmin.dbg.json +0 -4
  416. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +0 -4
  417. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.json +0 -1562
  418. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +0 -4
  419. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.json +0 -1600
  420. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  421. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
  422. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.json +0 -306
  423. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  424. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
  425. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  426. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  427. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  428. package/contracts/instance/InstanceAuthorizationsLib.sol +0 -377
  429. package/contracts/registry/ReleaseManager.sol +0 -527
  430. package/contracts/shared/AccessManagerCustom.sol +0 -741
  431. package/contracts/shared/AccessManagerExtended.sol +0 -481
  432. package/contracts/shared/AccessManagerExtendedInitializeable.sol +0 -13
  433. package/contracts/shared/AccessManagerExtendedWithDisable.sol +0 -137
  434. package/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol +0 -14
  435. package/contracts/shared/IAccessManagerExtended.sol +0 -74
  436. package/contracts/shared/IAccessManagerExtendedWithDisable.sol +0 -18
  437. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
  438. /package/contracts/{shared → upgradeability}/Versionable.sol +0 -0
@@ -2,17 +2,19 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {Amount, AmountLib} from "../type/Amount.sol";
5
- import {InstanceLinkedComponent} from "../shared/InstanceLinkedComponent.sol";
6
- import {Fee, FeeLib} from "../type/Fee.sol";
5
+ import {BUNDLE, COMPONENT, POOL} from "../type/ObjectType.sol";
7
6
  import {IBundleService} from "./IBundleService.sol";
7
+ import {IAuthorization} from "../authorization/IAuthorization.sol";
8
8
  import {IPoolComponent} from "./IPoolComponent.sol";
9
9
  import {IPoolService} from "./IPoolService.sol";
10
10
  import {IComponents} from "../instance/module/IComponents.sol";
11
11
  import {IComponentService} from "../shared/IComponentService.sol";
12
+ import {InstanceLinkedComponent} from "../shared/InstanceLinkedComponent.sol";
13
+ import {Fee, FeeLib} from "../type/Fee.sol";
12
14
  import {NftId, NftIdLib} from "../type/NftId.sol";
13
- import {BUNDLE, COMPONENT, POOL} from "../type/ObjectType.sol";
14
15
  import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
15
16
  import {Seconds} from "../type/Seconds.sol";
17
+ import {Timestamp} from "../type/Timestamp.sol";
16
18
  import {TokenHandler} from "../shared/TokenHandler.sol";
17
19
  import {UFixed, UFixedLib} from "../type/UFixed.sol";
18
20
 
@@ -38,29 +40,122 @@ abstract contract Pool is
38
40
  }
39
41
 
40
42
 
41
- modifier onlyPoolService() {
42
- if(msg.sender != address(_getPoolStorage()._poolService)) {
43
- revert ErrorPoolNotPoolService(msg.sender);
43
+ /// @dev see {IPoolComponent.verifyApplication}
44
+ function verifyApplication(
45
+ NftId applicationNftId,
46
+ bytes memory applicationData,
47
+ NftId bundleNftId,
48
+ bytes memory bundleFilter,
49
+ Amount collateralizationAmount
50
+ )
51
+ public
52
+ virtual
53
+ restricted()
54
+ {
55
+ if(!applicationMatchesBundle(
56
+ applicationNftId,
57
+ applicationData,
58
+ bundleNftId,
59
+ bundleFilter,
60
+ collateralizationAmount)
61
+ )
62
+ {
63
+ revert ErrorPoolApplicationBundleMismatch(applicationNftId);
44
64
  }
45
- _;
65
+
66
+ emit LogPoolVerifiedByPool(address(this), applicationNftId, collateralizationAmount);
67
+ }
68
+
69
+
70
+ /// @dev see {IPoolComponent.applicationMatchesBundle}
71
+ /// Override this function to implement any custom application verification
72
+ /// Default implementation always returns true
73
+ function applicationMatchesBundle(
74
+ NftId applicationNftId,
75
+ bytes memory applicationData,
76
+ NftId bundleNftId,
77
+ bytes memory bundleFilter,
78
+ Amount collateralizationAmount
79
+ )
80
+ public
81
+ virtual
82
+ view
83
+ returns (bool isMatching)
84
+ {
85
+ return true;
46
86
  }
47
87
 
48
88
 
49
- function initializePool(
89
+ function register()
90
+ external
91
+ virtual
92
+ onlyOwner()
93
+ {
94
+ _getPoolStorage()._componentService.registerPool();
95
+ _approveTokenHandler(type(uint256).max);
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
+
109
+
110
+ function getInitialPoolInfo()
111
+ public
112
+ virtual
113
+ view
114
+ returns (IComponents.PoolInfo memory poolInfo)
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
+ );
129
+ }
130
+
131
+ // Internals
132
+
133
+ function _initializePool(
50
134
  address registry,
51
135
  NftId instanceNftId,
52
136
  string memory name,
53
137
  address token,
138
+ IAuthorization authorization,
54
139
  bool isInterceptingNftTransfers,
55
140
  address initialOwner,
56
141
  bytes memory registryData, // writeonly data that will saved in the object info record of the registry
57
142
  bytes memory componentData // component specifidc data
58
143
  )
59
- public
144
+ internal
60
145
  virtual
61
146
  onlyInitializing()
62
147
  {
63
- initializeInstanceLinkedComponent(registry, instanceNftId, name, token, POOL(), isInterceptingNftTransfers, initialOwner, registryData, componentData);
148
+ _initializeInstanceLinkedComponent(
149
+ registry,
150
+ instanceNftId,
151
+ name,
152
+ token,
153
+ POOL(),
154
+ authorization,
155
+ isInterceptingNftTransfers,
156
+ initialOwner,
157
+ registryData,
158
+ componentData);
64
159
 
65
160
  PoolStorage storage $ = _getPoolStorage();
66
161
  $._poolService = IPoolService(_getServiceAddress(POOL()));
@@ -70,201 +165,133 @@ abstract contract Pool is
70
165
  registerInterface(type(IPoolComponent).interfaceId);
71
166
  }
72
167
 
73
-
74
- function register()
75
- external
76
- virtual
77
- onlyOwner()
78
- {
79
- _getPoolStorage()._componentService.registerPool();
80
- }
81
-
82
-
83
- function stake(
168
+ /// @dev increases the staked tokens by the specified amount
169
+ /// bundle MUST be in active or locked state
170
+ function _stake(
84
171
  NftId bundleNftId,
85
172
  Amount amount
86
173
  )
87
- public
174
+ internal
88
175
  virtual
89
- restricted()
90
- onlyBundleOwner(bundleNftId)
176
+ returns(Amount netAmount)
91
177
  {
92
- // TODO add implementation
178
+ _getPoolStorage()._poolService.stake(bundleNftId, amount);
93
179
  }
94
180
 
95
181
 
96
- function unstake(
182
+ /// @dev decreases the staked tokens by the specified amount
183
+ /// bundle MUST be in active, locked or closed state
184
+ function _unstake(
97
185
  NftId bundleNftId,
98
186
  Amount amount
99
187
  )
100
- public
188
+ internal
101
189
  virtual
102
- restricted()
103
- onlyBundleOwner(bundleNftId)
190
+ returns(Amount netAmount)
104
191
  {
105
- // TODO add implementation
192
+ return _getPoolStorage()._poolService.unstake(bundleNftId, amount);
106
193
  }
107
194
 
108
195
 
109
- function extend(
196
+ /// @dev extends the bundle lifetime of the bundle by the specified time
197
+ /// bundle MUST be in active or locked state
198
+ function _extend(
110
199
  NftId bundleNftId,
111
200
  Seconds lifetimeExtension
112
201
  )
113
- public
202
+ internal
114
203
  virtual
115
- restricted()
116
- onlyBundleOwner(bundleNftId)
204
+ returns (Timestamp extendedExpiredAt)
117
205
  {
118
- // TODO add implementation
206
+ return _getPoolStorage()._bundleService.extend(bundleNftId, lifetimeExtension);
119
207
  }
120
208
 
121
209
 
122
- function lockBundle(NftId bundleNftId)
123
- public
210
+ /// @dev Locks the specified bundle.
211
+ /// A bundle to be locked MUST be in active state.
212
+ /// Locked bundles may not be used to collateralize any new policy.
213
+ function _lockBundle(NftId bundleNftId)
214
+ internal
124
215
  virtual
125
- //restricted() // TODO consider adding this back
126
- onlyBundleOwner(bundleNftId)
127
216
  {
128
217
  _getPoolStorage()._bundleService.lock(bundleNftId);
129
218
  }
130
219
 
131
220
 
132
- function unlockBundle(NftId bundleNftId)
133
- public
221
+ /// @dev Unlocks the specified bundle.
222
+ /// A bundle to be unlocked MUST be in locked state.
223
+ function _unlockBundle(NftId bundleNftId)
224
+ internal
134
225
  virtual
135
- //restricted()
136
- onlyBundleOwner(bundleNftId)
137
226
  {
138
227
  _getPoolStorage()._bundleService.unlock(bundleNftId);
139
228
  }
140
229
 
141
230
 
142
- function close(NftId bundleNftId)
143
- public
231
+ /// @dev Close the specified bundle.
232
+ /// A bundle to be closed MUST be in active or locked state.
233
+ /// To close a bundle all all linked policies MUST be in closed state as well.
234
+ /// Closing a bundle finalizes the bundle bookkeeping including overall profit calculation.
235
+ /// Once a bundle is closed this action cannot be reversed.
236
+ function _close(NftId bundleNftId)
237
+ internal
144
238
  virtual
145
- //restricted()
146
- onlyBundleOwner(bundleNftId)
147
239
  {
148
240
  _getPoolStorage()._poolService.closeBundle(bundleNftId);
149
241
  }
150
242
 
151
243
 
152
- function setBundleFee(
244
+ /// @dev Sets the fee for the specified bundle.
245
+ /// The fee is added on top of the poolFee and deducted from the premium amounts
246
+ /// Via these fees individual bundler owner may earn income per policy in the context of peer to peer pools.
247
+ function _setBundleFee(
153
248
  NftId bundleNftId,
154
249
  Fee memory fee
155
250
  )
156
- public
251
+ internal
157
252
  virtual
158
- //restricted()
159
- onlyBundleOwner(bundleNftId)
160
253
  {
161
254
  _getPoolStorage()._bundleService.setFee(bundleNftId, fee);
162
255
  }
163
256
 
164
257
 
165
- function setMaxCapitalAmount(Amount maxCapitalAmount)
166
- public
258
+ /// @dev Sets the maximum overall capital amound held by this pool.
259
+ /// Function may only be called by pool owner.
260
+ function _setMaxCapitalAmount(Amount maxCapitalAmount)
261
+ internal
167
262
  virtual
168
- restricted()
169
- onlyOwner()
170
263
  {
171
264
  _getPoolStorage()._poolService.setMaxCapitalAmount(maxCapitalAmount);
172
265
  }
173
266
 
174
-
175
- function setBundleOwnerRole(RoleId bundleOwnerRole)
176
- public
267
+ /// @dev Sets the required role to create/own bundles.
268
+ /// May only be called once after setting up a pool.
269
+ /// May only be called by pool owner.
270
+ function _setBundleOwnerRole(RoleId bundleOwnerRole)
271
+ internal
177
272
  virtual
178
- restricted()
179
- onlyOwner()
180
273
  {
181
274
  _getPoolStorage()._poolService.setBundleOwnerRole(bundleOwnerRole);
182
275
  }
183
276
 
184
277
 
185
- function setFees(
278
+ /// @dev Update pool fees to the specified values.
279
+ /// Pool fee: are deducted from the premium amount and goes to the pool owner.
280
+ /// Staking fee: are deducted from the staked tokens by a bundle owner and goes to the pool owner.
281
+ /// Performance fee: when a bundle is closed a bundle specific profit is calculated.
282
+ /// The performance fee is deducted from this profit and goes to the pool owner.
283
+ function _setPoolFees(
186
284
  Fee memory poolFee,
187
285
  Fee memory stakingFee,
188
286
  Fee memory performanceFee
189
287
  )
190
- public
288
+ internal
191
289
  virtual
192
- restricted()
193
- onlyOwner()
194
290
  {
195
291
  _getPoolStorage()._componentService.setPoolFees(poolFee, stakingFee, performanceFee);
196
292
  }
197
293
 
198
-
199
- /// @dev see {IPool.verifyApplication}
200
- function verifyApplication(
201
- NftId applicationNftId,
202
- bytes memory applicationData,
203
- NftId bundleNftId,
204
- bytes memory bundleFilter,
205
- Amount collateralizationAmount
206
- )
207
- public
208
- virtual
209
- restricted()
210
- {
211
- if(!applicationMatchesBundle(
212
- applicationNftId,
213
- applicationData,
214
- bundleNftId,
215
- bundleFilter,
216
- collateralizationAmount)
217
- )
218
- {
219
- revert ErrorPoolApplicationBundleMismatch(applicationNftId);
220
- }
221
-
222
- emit LogPoolVerifiedByPool(address(this), applicationNftId, collateralizationAmount);
223
- }
224
-
225
-
226
- /// @dev see {IPoolComponent.applicationMatchesBundle}
227
- /// Override this function to implement any custom application verification
228
- /// Default implementation always returns true
229
- function applicationMatchesBundle(
230
- NftId applicationNftId,
231
- bytes memory applicationData,
232
- NftId bundleNftId,
233
- bytes memory bundleFilter,
234
- Amount collateralizationAmount
235
- )
236
- public
237
- view
238
- virtual override
239
- returns (bool isMatching)
240
- {
241
- return true;
242
- }
243
-
244
-
245
- function getInitialPoolInfo()
246
- public
247
- virtual
248
- view
249
- returns (IComponents.PoolInfo memory poolInfo)
250
- {
251
- return IComponents.PoolInfo(
252
- NftIdLib.zero(), // will be set when GIF registers the related product
253
- PUBLIC_ROLE(), // bundleOwnerRole
254
- AmountLib.max(), // maxCapitalAmount,
255
- isNftInterceptor(), // isInterceptingBundleTransfers
256
- false, // isExternallyManaged,
257
- false, // isVerifyingApplications,
258
- UFixedLib.toUFixed(1), // collateralizationLevel,
259
- UFixedLib.toUFixed(1), // retentionLevel,
260
- FeeLib.zero(), // initialPoolFee,
261
- FeeLib.zero(), // initialStakingFee,
262
- FeeLib.zero() // initialPerformanceFee,
263
- );
264
- }
265
-
266
- // Internals
267
-
294
+ /// @dev Creates a new bundle using the provided parameter values.
268
295
  function _createBundle(
269
296
  address bundleOwner,
270
297
  Fee memory fee,
@@ -290,6 +317,12 @@ abstract contract Pool is
290
317
  return keccak256(abi.encode(uint256(keccak256(name)) - 1)) & ~bytes32(uint256(0xff));
291
318
  }
292
319
 
320
+ function _withdrawBundleFees(NftId bundleNftId, Amount amount)
321
+ internal
322
+ returns (Amount withdrawnAmount)
323
+ {
324
+ return _getPoolStorage()._bundleService.withdrawBundleFees(bundleNftId, amount);
325
+ }
293
326
 
294
327
  function _getPoolStorage() private pure returns (PoolStorage storage $) {
295
328
  assembly {
@@ -1,46 +1,33 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Pool} from "./Pool.sol";
5
- import {IRegistry} from "../registry/IRegistry.sol";
6
- import {IInstance} from "../instance/IInstance.sol";
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
7
6
  import {IBundle} from "../instance/module/IBundle.sol";
7
+ import {IBundleService} from "./IBundleService.sol";
8
8
  import {IComponents} from "../instance/module/IComponents.sol";
9
+ import {IComponentService} from "../shared/IComponentService.sol";
10
+ import {IInstance} from "../instance/IInstance.sol";
11
+ import {IInstanceService} from "../instance/IInstanceService.sol";
9
12
  import {IPolicy} from "../instance/module/IPolicy.sol";
10
-
11
- import {IVersionable} from "../shared/IVersionable.sol";
12
- import {Versionable} from "../shared/Versionable.sol";
13
- import {INftOwnable} from "../shared/INftOwnable.sol";
13
+ import {IPoolService} from "./IPoolService.sol";
14
+ import {IRegistry} from "../registry/IRegistry.sol";
15
+ import {IRegistryService} from "../registry/IRegistryService.sol";
16
+ import {IStaking} from "../staking/IStaking.sol";
14
17
 
15
18
  import {Amount, AmountLib} from "../type/Amount.sol";
16
19
  import {Fee, FeeLib} from "../type/Fee.sol";
17
20
  import {NftId, NftIdLib} from "../type/NftId.sol";
18
- import {ObjectType, POOL, BUNDLE, COMPONENT, INSTANCE, REGISTRY, STAKING} from "../type/ObjectType.sol";
19
- import {PUBLIC_ROLE, POOL_OWNER_ROLE, POLICY_SERVICE_ROLE, RoleId} from "../type/RoleId.sol";
21
+ import {ObjectType, POOL, BUNDLE, COMPONENT, INSTANCE, REGISTRY} from "../type/ObjectType.sol";
22
+ import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
20
23
  import {Fee, FeeLib} from "../type/Fee.sol";
21
- import {Version, VersionLib} from "../type/Version.sol";
22
- import {KEEP_STATE, StateId} from "../type/StateId.sol";
24
+ import {KEEP_STATE} from "../type/StateId.sol";
23
25
  import {Seconds} from "../type/Seconds.sol";
24
- import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
25
26
  import {TokenHandler} from "../shared/TokenHandler.sol";
26
27
  import {UFixed} from "../type/UFixed.sol";
27
- import {Version, VersionLib} from "../type/Version.sol";
28
-
29
- import {IService} from "../shared/IService.sol";
30
- import {Service} from "../shared/Service.sol";
31
- import {BundleManager} from "../instance/BundleManager.sol";
32
28
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
33
- import {IBundleService} from "./IBundleService.sol";
34
- import {IComponentService} from "../shared/IComponentService.sol";
35
- import {IInstanceService} from "../instance/IInstanceService.sol";
36
- import {IPoolService} from "./IPoolService.sol";
37
- import {IRegistryService} from "../registry/IRegistryService.sol";
38
- import {IStaking} from "../staking/IStaking.sol";
39
- import {InstanceService} from "../instance/InstanceService.sol";
40
29
  import {InstanceReader} from "../instance/InstanceReader.sol";
41
30
  import {InstanceStore} from "../instance/InstanceStore.sol";
42
- import {IComponent} from "../shared/IComponent.sol";
43
- import {IPoolComponent} from "./IPoolComponent.sol";
44
31
 
45
32
  string constant POOL_SERVICE_NAME = "PoolService";
46
33
 
@@ -48,9 +35,6 @@ contract PoolService is
48
35
  ComponentVerifyingService,
49
36
  IPoolService
50
37
  {
51
- using NftIdLib for NftId;
52
- using AmountLib for Amount;
53
-
54
38
  IBundleService internal _bundleService;
55
39
  IComponentService internal _componentService;
56
40
  IInstanceService private _instanceService;
@@ -146,6 +130,7 @@ contract PoolService is
146
130
  // TODO add logging
147
131
  }
148
132
 
133
+ /// @inheritdoc IPoolService
149
134
  function createBundle(
150
135
  address bundleOwner, // initial bundle owner
151
136
  Fee memory fee, // fees deducted from premium that go to bundle owner
@@ -167,6 +152,8 @@ contract PoolService is
167
152
  _getStakingFee(instanceReader, poolNftId),
168
153
  stakingAmount);
169
154
 
155
+ // TODO: staking amount must be be > maxCapitalAmount
156
+
170
157
  bundleNftId = _bundleService.create(
171
158
  instance,
172
159
  poolNftId,
@@ -180,7 +167,7 @@ contract PoolService is
180
167
  _componentService.increasePoolBalance(
181
168
  instance.getInstanceStore(),
182
169
  poolNftId,
183
- stakingAmount,
170
+ stakingNetAmount,
184
171
  stakingFeeAmount);
185
172
 
186
173
  // pool bookkeeping and collect tokens from bundle owner
@@ -199,8 +186,8 @@ contract PoolService is
199
186
  view
200
187
  returns (Fee memory stakingFee)
201
188
  {
202
- NftId productNftId = instanceReader.getPoolInfo(poolNftId).productNftId;
203
- return instanceReader.getPoolInfo(productNftId).stakingFee;
189
+ NftId productNftId = instanceReader.getComponentInfo(poolNftId).productNftId;
190
+ return instanceReader.getProductInfo(productNftId).stakingFee;
204
191
  }
205
192
 
206
193
  function closeBundle(NftId bundleNftId)
@@ -219,6 +206,115 @@ contract PoolService is
219
206
  emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
220
207
  }
221
208
 
209
+ /// @inheritdoc IPoolService
210
+ function stake(NftId bundleNftId, Amount amount)
211
+ external
212
+ virtual
213
+ // TODO: restricted() (once #462 is done)
214
+ returns(Amount netAmount)
215
+ {
216
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
217
+ InstanceReader instanceReader = instance.getInstanceReader();
218
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
219
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
220
+
221
+ if (bundleInfo.poolNftId != poolNftId) {
222
+ revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
223
+ }
224
+
225
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
226
+ if (amount + currentPoolBalance > poolInfo.maxCapitalAmount) {
227
+ revert ErrorPoolServiceMaxCapitalAmountExceeded(poolNftId, poolInfo.maxCapitalAmount, currentPoolBalance, amount);
228
+ }
229
+
230
+ // calculate fees
231
+ (
232
+ Amount feeAmount,
233
+ Amount netAmount
234
+ ) = FeeLib.calculateFee(
235
+ _getStakingFee(instanceReader, poolNftId),
236
+ amount);
237
+
238
+ // do all the bookkeeping
239
+ _componentService.increasePoolBalance(
240
+ instance.getInstanceStore(),
241
+ poolNftId,
242
+ netAmount,
243
+ feeAmount);
244
+
245
+ _bundleService.stake(instance, bundleNftId, netAmount);
246
+
247
+ // collect tokens from bundle owner
248
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
249
+ _collectStakingAmount(
250
+ instanceReader,
251
+ poolNftId,
252
+ bundleOwner,
253
+ amount);
254
+
255
+ emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
256
+ }
257
+
258
+ /// @inheritdoc IPoolService
259
+ function unstake(NftId bundleNftId, Amount amount)
260
+ external
261
+ virtual
262
+ // TODO: restricted() (once #462 is done)
263
+ returns(Amount netAmount)
264
+ {
265
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
266
+ InstanceReader instanceReader = instance.getInstanceReader();
267
+ InstanceStore instanceStore = instance.getInstanceStore();
268
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
269
+
270
+ if (bundleInfo.poolNftId != poolNftId) {
271
+ revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
272
+ }
273
+
274
+ if (amount.eqz()) {
275
+ revert ErrorPoolServiceAmountIsZero();
276
+ }
277
+
278
+ // call bundle service for bookkeeping and additional checks
279
+ _bundleService.unstake(instance, bundleNftId, amount);
280
+
281
+ // TODO: handle performance fees (issue #477)
282
+
283
+ // update pool bookkeeping - performance fees stay in the pool, but as fees
284
+ _componentService.decreasePoolBalance(
285
+ instanceStore,
286
+ poolNftId,
287
+ amount,
288
+ AmountLib.zero());
289
+
290
+ // check allowance
291
+ IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
292
+ address poolWallet = poolComponentInfo.wallet;
293
+ IERC20Metadata token = IERC20Metadata(poolComponentInfo.token);
294
+ uint256 tokenAllowance = token.allowance(poolWallet, address(poolComponentInfo.tokenHandler));
295
+ if (tokenAllowance < amount.toInt()) {
296
+ revert ErrorPoolServiceWalletAllowanceTooSmall(poolWallet, address(poolComponentInfo.tokenHandler), tokenAllowance, amount.toInt());
297
+ }
298
+
299
+ // transfer amount to bundle owner
300
+ address owner = getRegistry().ownerOf(bundleNftId);
301
+ // TODO: centralize token handling (issue #471)
302
+ poolComponentInfo.tokenHandler.transfer(poolWallet, owner, amount);
303
+
304
+ emit LogPoolServiceBundleUnstaked(instance.getNftId(), poolNftId, bundleNftId, amount);
305
+
306
+ return amount;
307
+ }
308
+
309
+ function _getPerformanceFee(InstanceReader instanceReader, NftId poolNftId)
310
+ internal
311
+ virtual
312
+ view
313
+ returns (Fee memory performanceFee)
314
+ {
315
+ NftId productNftId = instanceReader.getPoolInfo(poolNftId).productNftId;
316
+ return instanceReader.getPoolInfo(productNftId).performanceFee;
317
+ }
222
318
 
223
319
  function processSale(
224
320
  NftId bundleNftId,
@@ -439,10 +535,18 @@ contract PoolService is
439
535
  address poolWallet = componentInfo.wallet;
440
536
 
441
537
  if(amount.gtz()) {
538
+ uint256 allowance = IERC20Metadata(componentInfo.token).allowance(bundleOwner, address(tokenHandler));
539
+ if (allowance < amount.toInt()) {
540
+ revert ErrorPoolServiceWalletAllowanceTooSmall(bundleOwner, address(tokenHandler), allowance, amount.toInt());
541
+ }
542
+
543
+ // TODO: centralize token handling (issue #471)
442
544
  tokenHandler.transfer(
443
545
  bundleOwner,
444
546
  poolWallet,
445
547
  amount);
548
+ } else {
549
+ revert ErrorPoolServiceAmountIsZero();
446
550
  }
447
551
  }
448
552
 
@@ -1,12 +1,9 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "../shared/IVersionable.sol";
5
- import {ProxyManager} from "../shared/ProxyManager.sol";
4
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
5
+ import {ProxyManager} from "../upgradeability/ProxyManager.sol";
6
6
  import {PoolService} from "./PoolService.sol";
7
- import {Registry} from "../registry/Registry.sol";
8
- import {RegistryService} from "../registry/RegistryService.sol";
9
- import {REGISTRY} from "../type/ObjectType.sol";
10
7
 
11
8
  contract PoolServiceManager is ProxyManager {
12
9