@etherisc/gif-next 0.0.2-750c7cb-311 → 0.0.2-758fb77-627

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 (367) hide show
  1. package/README.md +5 -2
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +21 -21
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  5. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
  7. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  10. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
  14. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  16. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +36 -212
  18. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +2 -2
  20. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +0 -184
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +129 -286
  24. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +53 -120
  26. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +0 -37
  28. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +49 -62
  30. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  31. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1463 -0
  32. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  33. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
  34. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  35. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1660 -0
  36. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  37. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +410 -0
  38. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  39. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  40. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  41. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1411 -0
  42. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  43. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1171 -0
  44. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  45. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1517 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +1978 -0
  48. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  49. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  50. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  52. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/Instance.sol/Instance.json +10 -99
  54. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +71 -71
  56. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  57. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
  58. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  59. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +225 -68
  60. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +34 -146
  62. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +30 -81
  64. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  65. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +220 -102
  66. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  68. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  70. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  71. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  73. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  75. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  76. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  77. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  78. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  79. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  80. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  81. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  82. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  83. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +26 -202
  84. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  85. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  86. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  87. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  88. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +0 -37
  89. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  90. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  91. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +0 -184
  92. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  93. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +32 -144
  94. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +29 -80
  96. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  97. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +5 -189
  98. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  99. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +2 -2
  100. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  101. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +76 -235
  102. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  103. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +51 -110
  104. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  105. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +0 -31
  106. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  107. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +5 -42
  108. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  109. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +63 -78
  110. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  111. package/artifacts/contracts/pool/Pool.sol/Pool.json +5 -189
  112. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  113. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +101 -332
  114. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +31 -134
  116. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  117. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +31 -162
  118. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  119. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +26 -89
  120. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  121. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +3 -187
  122. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  123. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +2 -2
  124. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  125. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +169 -183
  126. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  127. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +53 -104
  128. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  129. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  130. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  131. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +98 -0
  132. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  133. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +4 -35
  134. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  135. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +43 -43
  136. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  137. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +0 -37
  138. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  139. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
  140. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  141. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +68 -299
  142. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  143. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +44 -123
  144. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  145. package/artifacts/contracts/product/PricingService.sol/PricingService.json +113 -270
  146. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  147. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +52 -123
  148. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  149. package/artifacts/contracts/product/Product.sol/Product.json +3 -187
  150. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  151. package/artifacts/contracts/product/RiskService.sol/RiskService.json +583 -0
  152. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  153. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +651 -0
  154. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  155. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  156. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  157. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +221 -21
  158. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  159. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  160. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  161. package/artifacts/contracts/registry/Registry.sol/Registry.json +419 -82
  162. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  163. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +229 -114
  164. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  165. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +18 -130
  166. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  167. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +22 -73
  168. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  169. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  170. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  171. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +24 -14
  172. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  173. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  174. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  175. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  176. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  177. package/artifacts/contracts/shared/Component.sol/Component.json +0 -173
  178. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  179. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +84 -228
  180. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  181. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +55 -122
  182. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  183. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +0 -112
  184. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  185. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +0 -26
  186. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  187. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  188. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +0 -37
  189. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  190. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  191. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  192. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  193. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +0 -42
  194. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  195. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  196. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  197. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  198. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  199. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
  200. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  201. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +0 -184
  202. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  203. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  204. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  205. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  206. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  207. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -57
  208. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  209. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +4 -136
  210. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  211. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -97
  212. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  213. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  214. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  215. package/artifacts/contracts/shared/Service.sol/Service.json +0 -112
  216. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  217. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +288 -16
  218. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  219. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  220. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  221. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +27 -27
  222. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  223. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  224. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +63 -93
  225. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  226. package/artifacts/contracts/staking/Staking.sol/Staking.json +85 -248
  227. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  228. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  229. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  230. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +42 -101
  231. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  232. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -6
  233. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  234. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +26 -138
  235. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  236. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +26 -77
  237. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  238. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +84 -84
  239. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  240. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +54 -23
  241. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  242. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  243. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  244. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  245. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  246. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  247. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  248. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  249. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  250. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  251. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  252. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  253. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  254. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  255. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  256. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  257. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  258. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  259. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  260. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  261. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  262. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  263. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  264. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  265. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  266. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  267. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  268. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  269. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  270. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  272. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  273. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  274. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
  276. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  278. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  280. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  281. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  282. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +14 -65
  283. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  284. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  285. package/contracts/authorization/AccessAdmin.sol +1 -3
  286. package/contracts/authorization/Authorization.sol +0 -1
  287. package/contracts/distribution/Distribution.sol +1 -1
  288. package/contracts/distribution/DistributionService.sol +26 -26
  289. package/contracts/distribution/IDistributionService.sol +9 -5
  290. package/contracts/examples/fire/FirePool.sol +76 -0
  291. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  292. package/contracts/examples/fire/FireProduct.sol +316 -0
  293. package/contracts/examples/fire/FireProductAuthorization.sol +16 -0
  294. package/contracts/examples/fire/FireUSD.sol +26 -0
  295. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  296. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  297. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  298. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  299. package/contracts/instance/IInstance.sol +7 -30
  300. package/contracts/instance/Instance.sol +10 -35
  301. package/contracts/instance/InstanceAdmin.sol +23 -4
  302. package/contracts/instance/InstanceAuthorizationV3.sol +3 -3
  303. package/contracts/instance/InstanceReader.sol +23 -1
  304. package/contracts/instance/InstanceService.sol +60 -36
  305. package/contracts/instance/InstanceStore.sol +11 -1
  306. package/contracts/instance/base/ObjectLifecycle.sol +8 -1
  307. package/contracts/instance/module/IComponents.sol +1 -1
  308. package/contracts/instance/module/IPolicy.sol +21 -21
  309. package/contracts/oracle/Oracle.sol +2 -1
  310. package/contracts/oracle/OracleService.sol +4 -3
  311. package/contracts/pool/BundleService.sol +13 -25
  312. package/contracts/pool/IBundleService.sol +2 -3
  313. package/contracts/pool/IPoolService.sol +29 -18
  314. package/contracts/pool/Pool.sol +15 -17
  315. package/contracts/pool/PoolService.sol +44 -94
  316. package/contracts/product/ApplicationService.sol +41 -23
  317. package/contracts/product/BasicProduct.sol +1 -0
  318. package/contracts/product/ClaimService.sol +110 -47
  319. package/contracts/product/IApplicationService.sol +1 -0
  320. package/contracts/product/IClaimService.sol +27 -5
  321. package/contracts/product/IPolicyService.sol +11 -23
  322. package/contracts/product/IPricingService.sol +7 -7
  323. package/contracts/product/IProductComponent.sol +0 -1
  324. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  325. package/contracts/product/PolicyService.sol +163 -146
  326. package/contracts/product/PricingService.sol +44 -43
  327. package/contracts/product/Product.sol +50 -36
  328. package/contracts/product/{ProductService.sol → RiskService.sol} +5 -7
  329. package/contracts/product/{ProductServiceManager.sol → RiskServiceManager.sol} +8 -8
  330. package/contracts/registry/ChainNft.sol +65 -32
  331. package/contracts/registry/IRegistry.sol +49 -15
  332. package/contracts/registry/Registry.sol +321 -195
  333. package/contracts/registry/RegistryAdmin.sol +150 -51
  334. package/contracts/registry/RegistryService.sol +2 -2
  335. package/contracts/registry/ReleaseRegistry.sol +12 -6
  336. package/contracts/registry/ServiceAuthorizationV3.sol +2 -3
  337. package/contracts/shared/Component.sol +12 -25
  338. package/contracts/shared/ComponentService.sol +16 -25
  339. package/contracts/shared/ComponentVerifyingService.sol +1 -1
  340. package/contracts/shared/IComponent.sol +0 -1
  341. package/contracts/shared/IInstanceLinkedComponent.sol +0 -7
  342. package/contracts/shared/IPolicyHolder.sol +0 -9
  343. package/contracts/shared/InitializableERC165.sol +2 -2
  344. package/contracts/shared/InstanceLinkedComponent.sol +4 -4
  345. package/contracts/shared/NftOwnable.sol +5 -5
  346. package/contracts/shared/PolicyHolder.sol +5 -48
  347. package/contracts/shared/Registerable.sol +4 -4
  348. package/contracts/shared/RegistryLinked.sol +3 -2
  349. package/contracts/shared/Service.sol +5 -5
  350. package/contracts/shared/TokenHandler.sol +99 -22
  351. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  352. package/contracts/staking/IStaking.sol +2 -1
  353. package/contracts/staking/StakeManagerLib.sol +18 -25
  354. package/contracts/staking/Staking.sol +10 -28
  355. package/contracts/staking/StakingService.sol +2 -2
  356. package/contracts/staking/TargetManagerLib.sol +7 -3
  357. package/contracts/type/ObjectType.sol +15 -11
  358. package/contracts/type/RiskId.sol +15 -1
  359. package/contracts/type/Seconds.sol +8 -0
  360. package/contracts/type/StateId.sol +1 -0
  361. package/contracts/upgradeability/ProxyManager.sol +1 -1
  362. package/package.json +1 -1
  363. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  364. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  365. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  366. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  367. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
@@ -60,7 +60,7 @@ contract InstanceService is
60
60
 
61
61
  modifier onlyInstance() {
62
62
  address instanceAddress = msg.sender;
63
- NftId instanceNftId = getRegistry().getNftId(msg.sender);
63
+ NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
64
64
  if (instanceNftId.eqz()) {
65
65
  revert ErrorInstanceServiceNotRegistered(instanceAddress);
66
66
  }
@@ -104,32 +104,9 @@ contract InstanceService is
104
104
  // tx sender will become instance owner
105
105
  address instanceOwner = msg.sender;
106
106
 
107
- // start with setting up a new OZ access manager
108
- AccessManagerCloneable clonedAccessManager = AccessManagerCloneable(
109
- Clones.clone(_masterAccessManager));
110
-
111
- // set up the instance admin
112
- InstanceAdmin clonedInstanceAdmin = InstanceAdmin(Clones.clone(_masterInstanceAdmin));
113
- clonedAccessManager.initialize(
114
- address(clonedInstanceAdmin)); // grant ADMIN_ROLE to instance admin
115
-
116
- clonedInstanceAdmin.initialize(
117
- clonedAccessManager,
118
- InstanceAdmin(_masterInstanceAdmin).getInstanceAuthorization());
119
-
120
- InstanceStore clonedInstanceStore = InstanceStore(Clones.clone(address(_masterInstanceStore)));
121
- BundleSet clonedBundleSet = BundleSet(Clones.clone(_masterInstanceBundleSet));
122
- InstanceReader clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
123
-
124
- // clone instance
125
- clonedInstance = Instance(Clones.clone(_masterInstance));
126
- clonedInstance.initialize(
127
- clonedInstanceAdmin,
128
- clonedInstanceStore,
129
- clonedBundleSet,
130
- clonedInstanceReader,
131
- getRegistry(),
132
- instanceOwner);
107
+ // create instance admin and instance
108
+ InstanceAdmin instanceAdmin = _createInstanceAdmin();
109
+ clonedInstance = _createInstance(instanceAdmin, instanceOwner);
133
110
 
134
111
  // register cloned instance with registry
135
112
  clonedInstanceNftId = _registryService.registerInstance(
@@ -142,7 +119,7 @@ contract InstanceService is
142
119
  TargetManagerLib.getDefaultRewardRate());
143
120
 
144
121
  // MUST be set after instance is set up and registered
145
- clonedInstanceAdmin.initializeInstanceAuthorization(address(clonedInstance));
122
+ instanceAdmin.initializeInstanceAuthorization(address(clonedInstance));
146
123
 
147
124
  emit LogInstanceCloned(
148
125
  clonedInstanceNftId,
@@ -155,7 +132,7 @@ contract InstanceService is
155
132
  virtual
156
133
  onlyInstance()
157
134
  {
158
- NftId instanceNftId = getRegistry().getNftId(msg.sender);
135
+ NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
159
136
  _stakingService.setInstanceLockingPeriod(
160
137
  instanceNftId,
161
138
  stakeLockingPeriod);
@@ -167,7 +144,7 @@ contract InstanceService is
167
144
  virtual
168
145
  onlyInstance()
169
146
  {
170
- NftId instanceNftId = getRegistry().getNftId(msg.sender);
147
+ NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
171
148
  _stakingService.setInstanceRewardRate(
172
149
  instanceNftId,
173
150
  rewardRate);
@@ -179,7 +156,7 @@ contract InstanceService is
179
156
  virtual
180
157
  onlyInstance()
181
158
  {
182
- NftId instanceNftId = getRegistry().getNftId(msg.sender);
159
+ NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
183
160
  _stakingService.refillInstanceRewardReserves(
184
161
  instanceNftId,
185
162
  rewardProvider,
@@ -193,7 +170,7 @@ contract InstanceService is
193
170
  onlyInstance()
194
171
  returns (Amount newBalance)
195
172
  {
196
- NftId instanceNftId = getRegistry().getNftId(msg.sender);
173
+ NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
197
174
  _stakingService.withdrawInstanceRewardReserves(
198
175
  instanceNftId,
199
176
  dipAmount);
@@ -337,7 +314,7 @@ contract InstanceService is
337
314
 
338
315
  InstanceAdmin instanceAdmin = instance.getInstanceAdmin();
339
316
  instanceAdmin.initializeComponentAuthorization(
340
- address(component),
317
+ component,
341
318
  component.getAuthorization());
342
319
  }
343
320
 
@@ -362,6 +339,53 @@ contract InstanceService is
362
339
  );
363
340
  }
364
341
 
342
+ /// @dev create new cloned instance admin
343
+ /// function used to setup a new instance
344
+ function _createInstanceAdmin()
345
+ internal
346
+ virtual
347
+ returns (InstanceAdmin clonedInstanceAdmin)
348
+ {
349
+ // start with setting up a new OZ access manager
350
+ AccessManagerCloneable clonedAccessManager = AccessManagerCloneable(
351
+ Clones.clone(_masterAccessManager));
352
+
353
+ // set up the instance admin
354
+ clonedInstanceAdmin = InstanceAdmin(Clones.clone(_masterInstanceAdmin));
355
+ clonedAccessManager.initialize(
356
+ address(clonedInstanceAdmin)); // grant ADMIN_ROLE to instance admin
357
+
358
+ clonedInstanceAdmin.initialize(
359
+ clonedAccessManager,
360
+ InstanceAdmin(_masterInstanceAdmin).getInstanceAuthorization());
361
+ }
362
+
363
+
364
+ /// @dev create new cloned instance
365
+ /// function used to setup a new instance
366
+ function _createInstance(
367
+ InstanceAdmin instanceAdmin,
368
+ address instanceOwner
369
+ )
370
+ internal
371
+ virtual
372
+ returns (Instance clonedInstance)
373
+ {
374
+ InstanceStore clonedInstanceStore = InstanceStore(Clones.clone(address(_masterInstanceStore)));
375
+ BundleSet clonedBundleSet = BundleSet(Clones.clone(_masterInstanceBundleSet));
376
+ InstanceReader clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
377
+
378
+ // clone instance
379
+ clonedInstance = Instance(Clones.clone(_masterInstance));
380
+ clonedInstance.initialize(
381
+ instanceAdmin,
382
+ clonedInstanceStore,
383
+ clonedBundleSet,
384
+ clonedInstanceReader,
385
+ getRegistry(),
386
+ instanceOwner);
387
+ }
388
+
365
389
 
366
390
  /// all gif targets MUST be children of instanceNftId
367
391
  function _createGifTarget(
@@ -398,8 +422,8 @@ contract InstanceService is
398
422
  bytes memory data
399
423
  )
400
424
  internal
401
- initializer
402
425
  virtual override
426
+ initializer()
403
427
  {
404
428
  (
405
429
  address registryAddress,,
@@ -407,12 +431,12 @@ contract InstanceService is
407
431
  address authority
408
432
  ) = abi.decode(data, (address, address, address));
409
433
 
410
- initializeService(registryAddress, authority, owner);
434
+ _initializeService(registryAddress, authority, owner);
411
435
 
412
436
  _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
413
437
  _stakingService = IStakingService(_getServiceAddress(STAKING()));
414
438
 
415
- registerInterface(type(IInstanceService).interfaceId);
439
+ _registerInterface(type(IInstanceService).interfaceId);
416
440
  }
417
441
 
418
442
 
@@ -7,7 +7,7 @@ import {Amount} from "../type/Amount.sol";
7
7
  import {Key32} from "../type/Key32.sol";
8
8
  import {NftId} from "../type/NftId.sol";
9
9
  import {ClaimId} from "../type/ClaimId.sol";
10
- import {ObjectType, BUNDLE, POLICY, POOL, PRODUCT, COMPONENT, DISTRIBUTOR} from "../type/ObjectType.sol";
10
+ import {ObjectType, BUNDLE, POLICY, POOL, PREMIUM, PRODUCT, COMPONENT, DISTRIBUTOR} from "../type/ObjectType.sol";
11
11
  import {RequestId} from "../type/RequestId.sol";
12
12
  import {RiskId} from "../type/RiskId.sol";
13
13
  import {StateId} from "../type/StateId.sol";
@@ -195,6 +195,16 @@ contract InstanceStore is
195
195
  _updateState(_toNftKey32(policyNftId, POLICY()), newState);
196
196
  }
197
197
 
198
+
199
+ //--- Premium (Policy) ----------------------------------------------//
200
+ function createPremium(NftId policyNftId, IPolicy.PremiumInfo memory premium) external restricted() {
201
+ _create(_toNftKey32(policyNftId, PREMIUM()), abi.encode(premium));
202
+ }
203
+
204
+ function updatePremiumState(NftId policyNftId, StateId newState) external restricted() {
205
+ _updateState(_toNftKey32(policyNftId, PREMIUM()), newState);
206
+ }
207
+
198
208
  //--- Claim -------------------------------------------------------------//
199
209
  function createClaim(NftId policyNftId, ClaimId claimId, IPolicy.ClaimInfo memory claim) external restricted() {
200
210
  _create(_toClaimKey32(policyNftId, claimId), abi.encode(claim));
@@ -3,7 +3,7 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5
5
 
6
- import {COMPONENT, BUNDLE, POLICY, REQUEST, RISK, CLAIM, PAYOUT, POOL, PRODUCT, DISTRIBUTION, DISTRIBUTOR, DISTRIBUTOR_TYPE, REFERRAL} from "../../type/ObjectType.sol";
6
+ import {COMPONENT, BUNDLE, POLICY, REQUEST, RISK, CLAIM, PAYOUT, POOL, PREMIUM, PRODUCT, DISTRIBUTION, DISTRIBUTOR, DISTRIBUTOR_TYPE, REFERRAL} from "../../type/ObjectType.sol";
7
7
  import {ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, COLLATERALIZED, REVOKED, SUBMITTED, CONFIRMED, DECLINED, EXPECTED, PAID, FULFILLED, FAILED, CANCELLED} from "../../type/StateId.sol";
8
8
  import {Lifecycle} from "../../shared/Lifecycle.sol";
9
9
 
@@ -23,6 +23,7 @@ contract ObjectLifecycle is
23
23
  _setupBundleLifecycle();
24
24
  _setupComponentLifecycle();
25
25
  _setupPolicyLifecycle();
26
+ _setupPremiumLifecycle();
26
27
  _setupClaimLifecycle();
27
28
  _setupPayoutLifecycle();
28
29
  _setupRiskLifecycle();
@@ -57,6 +58,11 @@ contract ObjectLifecycle is
57
58
  setStateTransition(POLICY(), COLLATERALIZED(), CLOSED());
58
59
  }
59
60
 
61
+ function _setupPremiumLifecycle() private {
62
+ setInitialState(PREMIUM(), EXPECTED());
63
+ setStateTransition(PREMIUM(), EXPECTED(), PAID());
64
+ }
65
+
60
66
  function _setupClaimLifecycle() private {
61
67
  setInitialState(CLAIM(), SUBMITTED());
62
68
  setStateTransition(CLAIM(), SUBMITTED(), CONFIRMED());
@@ -66,6 +72,7 @@ contract ObjectLifecycle is
66
72
 
67
73
  function _setupPayoutLifecycle() private {
68
74
  setInitialState(PAYOUT(), EXPECTED());
75
+ // TODO: add state cancelled
69
76
  setStateTransition(PAYOUT(), EXPECTED(), PAID());
70
77
  }
71
78
 
@@ -35,8 +35,8 @@ interface IComponents {
35
35
 
36
36
 
37
37
  struct PoolInfo {
38
- RoleId bundleOwnerRole; // the required role for bundle owners
39
38
  Amount maxBalanceAmount; // max balance amount allowed for pool
39
+ RoleId bundleOwnerRole; // the required role for bundle owners
40
40
  bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
41
41
  bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
42
42
  bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
@@ -11,7 +11,7 @@ import {Timestamp} from "../../type/Timestamp.sol";
11
11
 
12
12
  interface IPolicy {
13
13
 
14
- struct Premium {
14
+ struct PremiumInfo {
15
15
  // premium splitting per target wallet
16
16
  Amount productFeeAmount;
17
17
  Amount distributionFeeAndCommissionAmount;
@@ -19,26 +19,26 @@ interface IPolicy {
19
19
 
20
20
  // detailed positions
21
21
  // this is the net premium calculated by the product
22
- uint256 netPremiumAmount;
22
+ Amount netPremiumAmount;
23
23
  // fullPremium = netPremium + all fixed amounts + all variable amounts (excl commission and minDistribtuionOwnerFee variable part)
24
- uint256 fullPremiumAmount;
24
+ Amount fullPremiumAmount;
25
25
  // effective premium = fullPremium - discount
26
- uint256 premiumAmount;
27
- uint256 productFeeFixAmount;
28
- uint256 poolFeeFixAmount;
29
- uint256 bundleFeeFixAmount;
30
- uint256 distributionFeeFixAmount;
31
- uint256 productFeeVarAmount;
32
- uint256 poolFeeVarAmount;
33
- uint256 bundleFeeVarAmount;
34
- uint256 distributionFeeVarAmount;
35
- uint256 distributionOwnerFeeFixAmount;
26
+ Amount premiumAmount;
27
+ Amount productFeeFixAmount;
28
+ Amount poolFeeFixAmount;
29
+ Amount bundleFeeFixAmount;
30
+ Amount distributionFeeFixAmount;
31
+ Amount productFeeVarAmount;
32
+ Amount poolFeeVarAmount;
33
+ Amount bundleFeeVarAmount;
34
+ Amount distributionFeeVarAmount;
35
+ Amount distributionOwnerFeeFixAmount;
36
36
  // this is the remaining amount when the commission and discount are subtracted from the distribution fee variable part (must be at least the minDistributionOwnerFee)
37
- uint256 distributionOwnerFeeVarAmount;
37
+ Amount distributionOwnerFeeVarAmount;
38
38
  // this value is based on distributor type referenced in the referral
39
- uint256 commissionAmount;
39
+ Amount commissionAmount;
40
40
  // this is based on referral used
41
- uint256 discountAmount;
41
+ Amount discountAmount;
42
42
  }
43
43
 
44
44
  /// @dev policy data for the full policy lifecycle
@@ -49,7 +49,6 @@ interface IPolicy {
49
49
  RiskId riskId;
50
50
  Amount sumInsuredAmount;
51
51
  Amount premiumAmount; // expected premium at application time
52
- Amount premiumPaidAmount; // actual paid premium
53
52
  Seconds lifetime;
54
53
  // policy application data, no changes after applying for a policy
55
54
  bytes applicationData;
@@ -69,8 +68,8 @@ interface IPolicy {
69
68
  Amount paidAmount;
70
69
  uint8 payoutsCount;
71
70
  uint8 openPayoutsCount;
72
- bytes submissionData; // claim submission data, no changes after submitting the claim
73
- bytes processData; // data that may include information supporting confirm or decline
71
+ bytes submissionData; // use case specific claim submission data, no changes after submitting the claim
72
+ bytes processData; // use case specific data that may include information supporting confirm or decline
74
73
  Timestamp closedAt; // payment of confirmed claim amount (or declinedAt)
75
74
  }
76
75
 
@@ -78,7 +77,8 @@ interface IPolicy {
78
77
  struct PayoutInfo {
79
78
  ClaimId claimId;
80
79
  Amount amount;
81
- bytes data;
82
- Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
80
+ address beneficiary; // for address(0) beneficiary is policy nft owner
81
+ bytes data; // use case specific supporting data
82
+ Timestamp paidAt; // timestamp for actual payout
83
83
  }
84
84
  }
@@ -71,6 +71,7 @@ abstract contract Oracle is
71
71
  return false;
72
72
  }
73
73
 
74
+ /// @dev Not relevant for oracle components
74
75
  function withdrawFees(Amount amount)
75
76
  external
76
77
  virtual
@@ -113,7 +114,7 @@ abstract contract Oracle is
113
114
  $._oracleService = IOracleService(_getServiceAddress(ORACLE()));
114
115
  $._componentService = IComponentService(_getServiceAddress(COMPONENT()));
115
116
 
116
- registerInterface(type(IOracleComponent).interfaceId);
117
+ _registerInterface(type(IOracleComponent).interfaceId);
117
118
  }
118
119
 
119
120
 
@@ -27,14 +27,14 @@ contract OracleService is
27
27
  bytes memory data
28
28
  )
29
29
  internal
30
- initializer
31
30
  virtual override
31
+ initializer()
32
32
  {
33
33
  address initialOwner;
34
34
  address registryAddress;
35
35
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
36
- initializeService(registryAddress, address(0), owner);
37
- registerInterface(type(IOracleService).interfaceId);
36
+ _initializeService(registryAddress, address(0), owner);
37
+ _registerInterface(type(IOracleService).interfaceId);
38
38
  }
39
39
 
40
40
  function request(
@@ -64,6 +64,7 @@ contract OracleService is
64
64
  ORACLE(),
65
65
  true); // only active
66
66
 
67
+ // TODO move to stronger validation, requester and oracle need to belong to same product cluster
67
68
  // check that requester and oracle share same instance
68
69
  if (componentInfo.parentNftId != oracleInfo.parentNftId) {
69
70
  revert ErrorOracleServiceInstanceMismatch(componentInfo.parentNftId, oracleInfo.parentNftId);
@@ -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";
@@ -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
46
  address registryAddress;
49
47
  address initialOwner;
50
48
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
51
49
  // TODO while PoolService is not deployed in PoolServiceManager constructor
52
50
  // owner is PoolServiceManager deployer
53
- initializeService(registryAddress, address(0), owner);
51
+ _initializeService(registryAddress, address(0), 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
 
@@ -123,12 +121,14 @@ contract BundleService is
123
121
  })
124
122
  );
125
123
 
126
- // bundle book keeping
127
- _componentService.increaseBundleBalance(
128
- instanceStore,
129
- bundleNftId,
130
- stakingAmount,
131
- 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
+ }
132
132
 
133
133
  // put bundle under bundle managemet
134
134
  BundleSet bundleManager = instance.getBundleSet();
@@ -399,17 +399,6 @@ contract BundleService is
399
399
  }
400
400
  }
401
401
 
402
- if (withdrawnAmount.eqz()) {
403
- revert ErrorBundleServiceFeesWithdrawAmountIsZero();
404
- }
405
-
406
- // check allowance
407
- IERC20Metadata token = IERC20Metadata(poolInfo.token);
408
- uint256 tokenAllowance = token.allowance(poolWallet, address(poolInfo.tokenHandler));
409
- if (tokenAllowance < withdrawnAmount.toInt()) {
410
- revert ErrorBundleServiceWalletAllowanceTooSmall(poolWallet, address(poolInfo.tokenHandler), tokenAllowance, withdrawnAmount.toInt());
411
- }
412
-
413
402
  // decrease fee counters by withdrawnAmount
414
403
  {
415
404
  InstanceStore store = instance.getInstanceStore();
@@ -422,9 +411,8 @@ contract BundleService is
422
411
  // transfer amount to bundle owner
423
412
  {
424
413
  address owner = getRegistry().ownerOf(bundleNftId);
425
- emit LogBundleServiceFeesWithdrawn(bundleNftId, owner, address(token), withdrawnAmount);
426
- // TODO: centralize token handling (issue #471)
427
- poolInfo.tokenHandler.transfer(poolWallet, owner, withdrawnAmount);
414
+ emit LogBundleServiceFeesWithdrawn(bundleNftId, owner, address(poolInfo.token), withdrawnAmount);
415
+ poolInfo.tokenHandler.distributeTokens(poolWallet, owner, withdrawnAmount);
428
416
  }
429
417
  }
430
418
 
@@ -27,9 +27,7 @@ interface IBundleService is IService {
27
27
  error ErrorBundleServicePolicyNotCloseable(NftId policyNftId);
28
28
 
29
29
  error ErrorBundleServiceFeesWithdrawAmountExceedsLimit(Amount amount, Amount limit);
30
- error ErrorBundleServiceFeesWithdrawAmountIsZero();
31
- error ErrorBundleServiceWalletAllowanceTooSmall(address wallet, address tokenHandler, uint256 allowance, uint256 amount);
32
-
30
+
33
31
  error ErrorBundleServiceUnstakeAmountExceedsLimit(Amount amount, Amount limit);
34
32
 
35
33
  error ErrorBundleServiceExtensionLifetimeIsZero();
@@ -126,6 +124,7 @@ interface IBundleService is IService {
126
124
  NftId policyNftId
127
125
  ) external;
128
126
 
127
+ // FIXME: move to pool service
129
128
  /// @dev Withdraw bundle feeds for the given bundle
130
129
  /// @param bundleNftId the bundle Nft Id
131
130
  /// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
@@ -30,9 +30,7 @@ interface IPoolService is IService {
30
30
  error ErrorPoolServiceInvalidTransferAmount(Amount expectedAmount, Amount actualAmount);
31
31
  error ErrorPoolServiceBundlePoolMismatch(NftId bundleNftId, NftId poolNftId);
32
32
  error ErrorPoolServiceMaxBalanceAmountExceeded(NftId poolNftId, Amount maxBalanceAmount, Amount currentBalanceAmount, Amount transferAmount);
33
- error ErrorPoolServiceWalletAllowanceTooSmall(address wallet, address spender, uint256 allowance, uint256 amount);
34
- error ErrorPoolServiceAmountIsZero();
35
-
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;
@@ -82,19 +80,28 @@ interface IPoolService is IService {
82
80
  ) external;
83
81
 
84
82
 
85
- /// @dev create a new bundle for the provided parameters
86
- /// staking fees will be deducted by the pool service from the staking amount
83
+ /// @dev create a new empty bundle with the provided parameters
87
84
  /// may only be called by registered and unlocked pool components.
88
- /// The pool balance is equal to the pool fees plus the capital of all bundles.
89
85
  function createBundle(
90
86
  address owner, // initial bundle owner
91
87
  Fee memory fee, // fees deducted from premium that go to bundle owner
92
- Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
93
88
  Seconds lifetime, // initial duration for which new policies are covered
94
89
  bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
95
90
  )
96
91
  external
97
- returns(NftId bundleNftId, Amount netStakedAmount); // the nft id of the newly created bundle
92
+ returns(NftId bundleNftId); // the nft id of the newly created bundle
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);
98
105
 
99
106
 
100
107
  /// @dev closes the specified bundle
@@ -105,18 +112,22 @@ interface IPoolService is IService {
105
112
  function closeBundle(NftId bundleNftId) external;
106
113
 
107
114
 
108
- /// @dev processes the sale of a bundle and track the pool fee and bundle fee amounts
109
- function processSale(NftId bundleNftId, IPolicy.Premium memory premium) external;
115
+ /// @dev Fund the specified pool wallet with the provided amount.
116
+ /// This function will collect the amount from the sender address and transfers it to the pool wallet.
117
+ /// The function will not update balance amounts managed by the framework.
118
+ /// Only available for externally managed pools.
119
+ function fundPoolWallet(NftId poolNftId, Amount amount) external;
110
120
 
111
- /// @dev increase stakes for bundle
112
- /// staking fees will be deducted by the pool service from the staking amount
113
- /// may only be called by registered and unlocked pool components
114
- function stake(NftId bundleNftId, Amount amount) external returns(Amount netAmount);
115
121
 
116
- /// @dev decrease stakes for bundle
117
- /// performance fees will be deducted by the pool service from the staking amount
118
- /// may only be called by registered and unlocked pool components
119
- 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;
120
131
 
121
132
 
122
133
  /// @dev calulate required collateral for the provided parameters
@@ -113,15 +113,15 @@ abstract contract Pool is
113
113
  view
114
114
  returns (IComponents.PoolInfo memory poolInfo)
115
115
  {
116
- return IComponents.PoolInfo(
117
- PUBLIC_ROLE(), // bundleOwnerRole
118
- AmountLib.max(), // maxCapitalAmount,
119
- isNftInterceptor(), // isInterceptingBundleTransfers
120
- false, // isExternallyManaged,
121
- false, // isVerifyingApplications,
122
- UFixedLib.toUFixed(1), // collateralizationLevel,
123
- UFixedLib.toUFixed(1) // retentionLevel,
124
- );
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
+ });
125
125
  }
126
126
 
127
127
  // Internals
@@ -158,7 +158,7 @@ abstract contract Pool is
158
158
  $._bundleService = IBundleService(_getServiceAddress(BUNDLE()));
159
159
  $._componentService = IComponentService(_getServiceAddress(COMPONENT()));
160
160
 
161
- registerInterface(type(IPoolComponent).interfaceId);
161
+ _registerInterface(type(IPoolComponent).interfaceId);
162
162
  }
163
163
 
164
164
  /// @dev increases the staked tokens by the specified amount
@@ -169,9 +169,9 @@ abstract contract Pool is
169
169
  )
170
170
  internal
171
171
  virtual
172
- returns(Amount netAmount)
172
+ returns(Amount)
173
173
  {
174
- _getPoolStorage()._poolService.stake(bundleNftId, amount);
174
+ return _getPoolStorage()._poolService.stake(bundleNftId, amount);
175
175
  }
176
176
 
177
177
 
@@ -287,21 +287,19 @@ abstract contract Pool is
287
287
  _getPoolStorage()._componentService.setPoolFees(poolFee, stakingFee, performanceFee);
288
288
  }
289
289
 
290
- /// @dev Creates a new bundle using the provided parameter values.
290
+ /// @dev Creates a new empty bundle using the provided parameter values.
291
291
  function _createBundle(
292
292
  address bundleOwner,
293
293
  Fee memory fee,
294
- Amount amount,
295
294
  Seconds lifetime,
296
295
  bytes memory filter
297
296
  )
298
297
  internal
299
- returns(NftId bundleNftId, Amount netStakedAmount)
298
+ returns(NftId bundleNftId)
300
299
  {
301
- (bundleNftId, netStakedAmount) = _getPoolStorage()._poolService.createBundle(
300
+ bundleNftId = _getPoolStorage()._poolService.createBundle(
302
301
  bundleOwner,
303
302
  fee,
304
- amount,
305
303
  lifetime,
306
304
  filter);
307
305