@etherisc/gif-next 0.0.2-e6d2794-419 → 0.0.2-e79d227-681

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 (505) hide show
  1. package/README.md +58 -9
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +105 -65
  4. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
  5. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
  6. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  7. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +2 -2
  8. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +67 -11
  10. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +60 -32
  13. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  14. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
  15. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  16. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
  17. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
  18. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
  19. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
  21. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  22. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +188 -369
  23. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +82 -22
  25. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +141 -314
  27. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +323 -223
  29. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +140 -104
  31. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +132 -115
  33. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +172 -31
  35. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  36. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  37. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  38. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1429 -0
  39. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  40. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +502 -0
  41. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  42. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1979 -0
  43. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  44. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -0
  45. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  46. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1430 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1177 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1606 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  54. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2281 -0
  55. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  56. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +808 -0
  57. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  58. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +104 -36
  59. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  60. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +56 -91
  61. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  62. package/artifacts/contracts/instance/Instance.sol/Instance.json +130 -130
  63. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  64. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +180 -140
  65. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  66. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +59 -86
  67. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  68. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +697 -146
  69. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  70. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +121 -250
  71. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  72. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +99 -87
  73. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  74. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +340 -263
  75. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  76. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +810 -0
  77. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  78. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  79. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  80. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  81. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  82. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  83. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
  84. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  85. package/artifacts/contracts/instance/base/{ObjectManager.sol/ObjectManager.json → ObjectSet.sol/ObjectSet.json} +6 -6
  86. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  87. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  88. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  89. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  90. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  91. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  92. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  93. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  94. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  95. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +138 -332
  96. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  97. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
  98. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  99. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  100. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +107 -103
  101. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  102. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
  103. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  104. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +114 -300
  105. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  106. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +147 -191
  107. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  108. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +119 -83
  109. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  110. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +160 -383
  111. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  112. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +114 -22
  113. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  114. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +430 -204
  115. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  116. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +160 -92
  117. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  118. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +244 -25
  119. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  120. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +118 -168
  121. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  122. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +422 -215
  123. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  124. package/artifacts/contracts/pool/Pool.sol/Pool.json +126 -366
  125. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  126. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +569 -403
  127. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  128. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +139 -87
  129. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  130. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +124 -181
  131. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  132. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +89 -89
  133. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  134. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +168 -319
  135. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  136. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
  137. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  138. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +311 -187
  139. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  140. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +139 -103
  141. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  142. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +68 -7
  143. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  144. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +176 -6
  145. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  146. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +344 -120
  147. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  148. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +114 -85
  149. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  150. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +155 -116
  151. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  152. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +31 -2
  153. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  154. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +447 -317
  155. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  156. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +138 -94
  157. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  158. package/artifacts/contracts/product/PricingService.sol/PricingService.json +218 -307
  159. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  160. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +117 -117
  161. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  162. package/artifacts/contracts/product/Product.sol/Product.json +166 -317
  163. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  164. package/artifacts/contracts/product/RiskService.sol/RiskService.json +638 -0
  165. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  166. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +718 -0
  167. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  168. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  169. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  170. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +346 -22
  171. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  172. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +42 -146
  173. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  174. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  175. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  176. package/artifacts/contracts/registry/Registry.sol/Registry.json +573 -80
  177. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  178. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +298 -145
  179. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  180. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +94 -284
  181. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  182. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +91 -75
  183. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  184. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
  185. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  186. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1067 -0
  187. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  188. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
  189. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  190. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  191. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  192. package/artifacts/contracts/shared/Component.sol/Component.json +73 -274
  193. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  194. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +606 -258
  195. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  196. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +168 -106
  197. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  198. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +47 -112
  199. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  200. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +488 -0
  201. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  202. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  203. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  204. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  205. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  206. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +66 -77
  207. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  208. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +541 -19
  209. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  210. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +96 -103
  211. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  212. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
  213. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  214. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  215. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  216. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  217. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  218. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  219. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  220. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
  221. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  222. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  223. package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
  224. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  225. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  226. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  227. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +106 -303
  228. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  229. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
  230. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  231. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  232. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  233. package/artifacts/contracts/shared/{NftIdSetManager.sol/NftIdSetManager.json → NftIdSet.sol/NftIdSet.json} +4 -4
  234. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  235. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
  236. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  237. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  238. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  239. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +58 -89
  240. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  241. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  242. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  243. package/artifacts/contracts/shared/Service.sol/Service.json +47 -112
  244. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  245. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +697 -25
  246. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  247. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +395 -0
  248. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  249. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
  250. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  251. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +111 -114
  252. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  253. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
  254. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  255. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +73 -93
  256. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  257. package/artifacts/contracts/staking/Staking.sol/Staking.json +190 -379
  258. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  259. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  260. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  261. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +118 -99
  262. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  263. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
  264. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  265. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +87 -165
  266. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  267. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +95 -79
  268. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  269. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +177 -131
  270. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  271. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +59 -23
  272. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  273. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  274. package/artifacts/contracts/type/Amount.sol/AmountLib.json +61 -8
  275. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  276. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  277. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  278. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  279. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  280. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  281. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  282. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  283. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  284. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  285. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  286. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  287. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  289. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  290. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  291. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  293. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  295. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  297. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  299. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  300. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +99 -5
  301. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  302. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  303. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  304. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
  305. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  306. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  307. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  308. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  309. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  310. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  311. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  312. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  313. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  314. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  315. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +52 -2
  316. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  317. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  318. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  319. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
  320. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  321. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  322. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  323. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +618 -0
  324. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  325. package/artifacts/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +3 -3
  326. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  327. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  328. package/contracts/authorization/AccessAdmin.sol +83 -58
  329. package/contracts/authorization/Authorization.sol +111 -40
  330. package/contracts/authorization/IAccess.sol +1 -0
  331. package/contracts/authorization/IAccessAdmin.sol +4 -3
  332. package/contracts/authorization/IAuthorization.sol +13 -7
  333. package/contracts/authorization/IServiceAuthorization.sol +3 -1
  334. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  335. package/contracts/authorization/ServiceAuthorization.sol +26 -10
  336. package/contracts/distribution/BasicDistribution.sol +8 -18
  337. package/contracts/distribution/BasicDistributionAuthorization.sol +6 -2
  338. package/contracts/distribution/Distribution.sol +33 -32
  339. package/contracts/distribution/DistributionService.sol +142 -90
  340. package/contracts/distribution/DistributionServiceManager.sol +8 -11
  341. package/contracts/distribution/IDistributionComponent.sol +9 -5
  342. package/contracts/distribution/IDistributionService.sol +23 -8
  343. package/contracts/examples/fire/DamageLevel.sol +59 -0
  344. package/contracts/examples/fire/FirePool.sol +86 -0
  345. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  346. package/contracts/examples/fire/FireProduct.sol +431 -0
  347. package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
  348. package/contracts/examples/fire/FireUSD.sol +26 -0
  349. package/contracts/examples/unpermissioned/SimpleDistribution.sol +58 -0
  350. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  351. package/contracts/examples/unpermissioned/SimplePool.sol +108 -0
  352. package/contracts/examples/unpermissioned/SimpleProduct.sol +345 -0
  353. package/contracts/instance/BundleSet.sol +130 -0
  354. package/contracts/instance/IInstance.sol +20 -34
  355. package/contracts/instance/IInstanceService.sol +11 -29
  356. package/contracts/instance/Instance.sol +44 -57
  357. package/contracts/instance/InstanceAdmin.sol +48 -36
  358. package/contracts/instance/InstanceAuthorizationV3.sol +50 -35
  359. package/contracts/instance/InstanceReader.sol +199 -25
  360. package/contracts/instance/InstanceService.sol +96 -115
  361. package/contracts/instance/InstanceServiceManager.sol +8 -13
  362. package/contracts/instance/InstanceStore.sol +12 -1
  363. package/contracts/instance/RiskSet.sol +119 -0
  364. package/contracts/instance/base/ObjectLifecycle.sol +9 -4
  365. package/contracts/instance/base/ObjectSet.sol +78 -0
  366. package/contracts/instance/module/IBundle.sol +1 -1
  367. package/contracts/instance/module/IComponents.sol +11 -13
  368. package/contracts/instance/module/IDistribution.sol +0 -1
  369. package/contracts/instance/module/IPolicy.sol +26 -25
  370. package/contracts/instance/module/IRisk.sol +1 -0
  371. package/contracts/mock/Dip.sol +1 -1
  372. package/contracts/oracle/BasicOracle.sol +0 -1
  373. package/contracts/oracle/IOracleComponent.sol +2 -1
  374. package/contracts/oracle/IOracleService.sol +2 -1
  375. package/contracts/oracle/Oracle.sol +21 -22
  376. package/contracts/oracle/OracleService.sol +112 -81
  377. package/contracts/oracle/OracleServiceManager.sol +8 -11
  378. package/contracts/pool/BasicPool.sol +38 -27
  379. package/contracts/pool/BasicPoolAuthorization.sol +22 -3
  380. package/contracts/pool/BundleService.sol +228 -101
  381. package/contracts/pool/BundleServiceManager.sol +8 -11
  382. package/contracts/pool/IBundleService.sol +33 -17
  383. package/contracts/pool/IPoolComponent.sol +20 -10
  384. package/contracts/pool/IPoolService.sol +53 -50
  385. package/contracts/pool/Pool.sol +150 -116
  386. package/contracts/pool/PoolService.sol +335 -175
  387. package/contracts/pool/PoolServiceManager.sol +6 -9
  388. package/contracts/product/ApplicationService.sol +82 -77
  389. package/contracts/product/ApplicationServiceManager.sol +6 -6
  390. package/contracts/product/BasicProduct.sol +11 -44
  391. package/contracts/product/BasicProductAuthorization.sol +2 -0
  392. package/contracts/product/ClaimService.sol +318 -146
  393. package/contracts/product/ClaimServiceManager.sol +6 -6
  394. package/contracts/product/IApplicationService.sol +6 -2
  395. package/contracts/product/IClaimService.sol +31 -7
  396. package/contracts/product/IPolicyService.sol +46 -34
  397. package/contracts/product/IPricingService.sol +10 -10
  398. package/contracts/product/IProductComponent.sol +24 -4
  399. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  400. package/contracts/product/PolicyService.sol +515 -257
  401. package/contracts/product/PolicyServiceManager.sol +6 -9
  402. package/contracts/product/PricingService.sol +54 -54
  403. package/contracts/product/PricingServiceManager.sol +5 -8
  404. package/contracts/product/Product.sol +126 -91
  405. package/contracts/product/{ProductService.sol → RiskService.sol} +27 -44
  406. package/contracts/product/RiskServiceManager.sol +39 -0
  407. package/contracts/registry/ChainNft.sol +68 -38
  408. package/contracts/registry/IRegistry.sol +71 -19
  409. package/contracts/registry/IRegistryService.sol +3 -10
  410. package/contracts/registry/ITransferInterceptor.sol +1 -2
  411. package/contracts/registry/Registry.sol +362 -215
  412. package/contracts/registry/RegistryAdmin.sol +161 -75
  413. package/contracts/registry/RegistryService.sol +39 -64
  414. package/contracts/registry/RegistryServiceManager.sol +4 -4
  415. package/contracts/registry/ReleaseLifecycle.sol +6 -3
  416. package/contracts/registry/ReleaseRegistry.sol +485 -0
  417. package/contracts/registry/ServiceAuthorizationV3.sol +22 -47
  418. package/contracts/registry/TokenRegistry.sol +2 -2
  419. package/contracts/shared/Component.sol +54 -118
  420. package/contracts/shared/ComponentService.sol +399 -174
  421. package/contracts/shared/ComponentServiceManager.sol +10 -7
  422. package/contracts/shared/ComponentVerifyingService.sol +28 -17
  423. package/contracts/shared/ContractLib.sol +224 -0
  424. package/contracts/shared/IComponent.sol +10 -13
  425. package/contracts/shared/IComponentService.sol +50 -22
  426. package/contracts/shared/IInstanceLinkedComponent.sol +8 -17
  427. package/contracts/shared/ILifecycle.sol +3 -1
  428. package/contracts/shared/INftOwnable.sol +2 -0
  429. package/contracts/shared/IPolicyHolder.sol +12 -22
  430. package/contracts/shared/IRegisterable.sol +11 -0
  431. package/contracts/shared/IService.sol +1 -1
  432. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +3 -3
  433. package/contracts/shared/InstanceLinkedComponent.sol +82 -28
  434. package/contracts/shared/KeyValueStore.sol +1 -1
  435. package/contracts/shared/Lifecycle.sol +15 -4
  436. package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
  437. package/contracts/shared/NftOwnable.sol +29 -9
  438. package/contracts/shared/PolicyHolder.sol +17 -57
  439. package/contracts/shared/Registerable.sol +19 -11
  440. package/contracts/shared/RegistryLinked.sol +9 -14
  441. package/contracts/shared/Service.sol +23 -22
  442. package/contracts/shared/TokenHandler.sol +358 -27
  443. package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
  444. package/contracts/staking/IStaking.sol +12 -7
  445. package/contracts/staking/IStakingService.sol +12 -8
  446. package/contracts/staking/StakeManagerLib.sol +18 -25
  447. package/contracts/staking/Staking.sol +54 -62
  448. package/contracts/staking/StakingManager.sol +10 -12
  449. package/contracts/staking/StakingReader.sol +23 -20
  450. package/contracts/staking/StakingService.sol +65 -36
  451. package/contracts/staking/StakingServiceManager.sol +4 -4
  452. package/contracts/staking/StakingStore.sol +12 -22
  453. package/contracts/staking/TargetManagerLib.sol +7 -3
  454. package/contracts/type/Amount.sol +27 -5
  455. package/contracts/type/Blocknumber.sol +7 -1
  456. package/contracts/type/ClaimId.sol +6 -1
  457. package/contracts/type/Key32.sol +2 -2
  458. package/contracts/type/Key32Set.sol +62 -0
  459. package/contracts/type/NftId.sol +7 -0
  460. package/contracts/type/ObjectType.sol +21 -18
  461. package/contracts/type/PayoutId.sol +10 -10
  462. package/contracts/type/Referral.sol +1 -0
  463. package/contracts/type/RiskId.sol +30 -4
  464. package/contracts/type/RoleId.sol +0 -12
  465. package/contracts/type/Seconds.sol +21 -1
  466. package/contracts/type/StateId.sol +15 -1
  467. package/contracts/type/Timestamp.sol +11 -1
  468. package/contracts/type/UFixed.sol +33 -10
  469. package/contracts/type/Version.sol +3 -1
  470. package/contracts/{shared → upgradeability}/ProxyManager.sol +71 -38
  471. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  472. package/contracts/{shared → upgradeability}/Versionable.sol +2 -2
  473. package/package.json +6 -5
  474. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  475. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  476. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  477. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  478. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  479. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -703
  480. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  481. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  482. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  483. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  484. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  485. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  486. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  487. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1159
  488. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  489. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  490. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  491. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  492. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  493. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
  494. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  495. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
  496. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  497. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  498. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  499. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  500. package/contracts/instance/BundleManager.sol +0 -126
  501. package/contracts/instance/base/ObjectManager.sol +0 -79
  502. package/contracts/product/ProductServiceManager.sol +0 -42
  503. package/contracts/registry/ReleaseManager.sol +0 -487
  504. package/contracts/shared/InitializableCustom.sol +0 -177
  505. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
@@ -1,9 +1,9 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "./IVersionable.sol";
5
- import {ProxyManager} from "./ProxyManager.sol";
6
4
  import {ComponentService} from "./ComponentService.sol";
5
+ import {IVersionable} from "../upgradeability/IVersionable.sol";
6
+ import {ProxyManager} from "../upgradeability/ProxyManager.sol";
7
7
 
8
8
  contract ComponentServiceManager is ProxyManager {
9
9
 
@@ -11,15 +11,18 @@ contract ComponentServiceManager is ProxyManager {
11
11
 
12
12
  /// @dev initializes proxy manager with service implementation
13
13
  constructor(
14
- address registryAddress
14
+ address authority,
15
+ address registry,
16
+ bytes32 salt
15
17
  )
16
- ProxyManager(registryAddress)
17
18
  {
18
19
  ComponentService svc = new ComponentService();
19
- bytes memory data = abi.encode(registryAddress, address(this));
20
- IVersionable versionable = deploy(
20
+ bytes memory data = abi.encode(registry, authority);
21
+ IVersionable versionable = initialize(
22
+ registry,
21
23
  address(svc),
22
- data);
24
+ data,
25
+ salt);
23
26
 
24
27
  _componentService = ComponentService(address(versionable));
25
28
  }
@@ -5,14 +5,13 @@ import {IInstance} from "../instance/IInstance.sol";
5
5
  import {InstanceReader} from "../instance/InstanceReader.sol";
6
6
  import {IRegistry} from "../registry/IRegistry.sol";
7
7
  import {NftId} from "../type/NftId.sol";
8
- import {ObjectType, COMPONENT, DISTRIBUTION, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
8
+ import {ObjectType, COMPONENT, DISTRIBUTION, ORACLE, POOL, PRODUCT, STAKING} from "../type/ObjectType.sol";
9
9
  import {Service} from "../shared/Service.sol";
10
10
 
11
11
 
12
12
  abstract contract ComponentVerifyingService is
13
13
  Service
14
14
  {
15
-
16
15
  error ErrorComponentVerifyingServiceComponentTypeInvalid(NftId componentNftId, ObjectType expectedType, ObjectType actualType);
17
16
  error ErrorComponentVerifyingServiceComponentIsLocked(NftId componentNftId);
18
17
 
@@ -28,12 +27,12 @@ abstract contract ComponentVerifyingService is
28
27
  view
29
28
  returns(
30
29
  NftId componentNftId,
31
- IRegistry.ObjectInfo memory componentInfo,
30
+ IRegistry.ObjectInfo memory objectInfo,
32
31
  IInstance instance
33
32
  )
34
33
  {
35
- componentNftId = getRegistry().getNftId(msg.sender);
36
- (componentInfo, instance) = _getAndVerifyComponentInfo(
34
+ componentNftId = getRegistry().getNftIdForAddress(msg.sender);
35
+ (objectInfo, instance) = _getAndVerifyComponentInfo(
37
36
  componentNftId,
38
37
  expectedType,
39
38
  true); // only active
@@ -83,7 +82,15 @@ abstract contract ComponentVerifyingService is
83
82
  }
84
83
  }
85
84
 
86
- instance = _getInstance(info.parentNftId);
85
+ if (info.objectType == STAKING()) {
86
+ return (info, instance);
87
+ }
88
+
89
+ if (info.objectType == PRODUCT()) {
90
+ instance = _getInstance(registry, info.parentNftId);
91
+ } else {
92
+ instance = _getInstanceForComponent(registry, info.parentNftId);
93
+ }
87
94
 
88
95
  // ensure component is not locked
89
96
  if (onlyActive) {
@@ -94,24 +101,28 @@ abstract contract ComponentVerifyingService is
94
101
  }
95
102
 
96
103
 
97
- /// @dev returns the linked product nft id for the specified component
98
- function _getProductNftId(
99
- InstanceReader instanceReader,
100
- NftId componentNftId
101
- )
104
+ function _getInstanceForComponent(IRegistry registry, NftId productNftId)
102
105
  internal
103
- virtual
104
106
  view
105
- returns (NftId productNftId)
107
+ returns (IInstance instance)
106
108
  {
107
- return instanceReader.getComponentInfo(componentNftId).productNftId;
109
+ return _getInstance(
110
+ registry,
111
+ registry.getObjectInfo(
112
+ productNftId).parentNftId);
113
+ }
114
+
115
+
116
+ /// @dev returns the product nft id from the registry.
117
+ /// assumes the component nft id is valid and represents a product linked component.
118
+ function _getProductNftId(NftId componentNftId) internal view returns (NftId productNftId) {
119
+ productNftId = getRegistry().getObjectInfo(componentNftId).parentNftId;
108
120
  }
109
121
 
110
122
 
111
123
  /// @dev returns an IInstance contract reference for the specified instance nft id
112
- function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
124
+ function _getInstance(IRegistry registry, NftId instanceNftId) internal view returns (IInstance) {
113
125
  return IInstance(
114
- getRegistry().getObjectInfo(
115
- instanceNftId).objectAddress);
126
+ registry.getObjectAddress(instanceNftId));
116
127
  }
117
128
  }
@@ -0,0 +1,224 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
5
+
6
+ // import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
7
+ import {IRegistry} from "../registry/IRegistry.sol";
8
+ import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
9
+ import {NftId} from "../type/NftId.sol";
10
+ import {ObjectType, PRODUCT, DISTRIBUTION, ORACLE, POOL, STAKING} from "../type/ObjectType.sol";
11
+
12
+ interface ITargetHelper {
13
+ function isTargetLocked(address target) external view returns (bool);
14
+ }
15
+
16
+ interface IInstanceAdminHelper {
17
+ function getInstanceAdmin() external view returns (ITargetHelper);
18
+ }
19
+
20
+ library ContractLib {
21
+
22
+ error ErrorContractLibNotRegistered(address target);
23
+ error ErrorContractLibNotComponent(NftId componentNftId, ObjectType objectType);
24
+ error ErrorContractLibNotStaking(NftId componentNftId, ObjectType objectType);
25
+ error ErrorContractLibComponentTypeMismatch(NftId componentNftId, ObjectType expectedType, ObjectType actualType);
26
+ error ErrorContractLibComponentInactive(NftId componentNftId);
27
+
28
+
29
+ function getAndVerifyComponent(
30
+ IRegistry registry,
31
+ address target,
32
+ ObjectType expectedType,
33
+ bool onlyActive
34
+ )
35
+ external
36
+ view
37
+ returns (
38
+ IRegistry.ObjectInfo memory info,
39
+ address instance
40
+ )
41
+ {
42
+ // check target is component
43
+ info = _getObjectInfo(registry, target);
44
+ if(info.objectType != expectedType) {
45
+ revert ErrorContractLibComponentTypeMismatch(
46
+ info.nftId,
47
+ expectedType,
48
+ info.objectType);
49
+ }
50
+
51
+ // get instance and check component is active
52
+ instance = _getInstance(registry, info);
53
+ _checkComponentActive(instance, target, info.nftId, onlyActive);
54
+ }
55
+
56
+
57
+ function getInfoAndInstance(
58
+ IRegistry registry,
59
+ NftId componentNftId,
60
+ bool onlyActive
61
+ )
62
+ external
63
+ view
64
+ returns (
65
+ IRegistry.ObjectInfo memory info,
66
+ address instance
67
+ )
68
+ {
69
+ info = registry.getObjectInfo(componentNftId);
70
+ instance = _getInstance(registry, info);
71
+ _checkComponentActive(instance, info.objectAddress, info.nftId, onlyActive);
72
+ }
73
+
74
+
75
+ function getAndVerifyStaking(
76
+ IRegistry registry,
77
+ address target
78
+ )
79
+ external
80
+ view
81
+ returns (
82
+ IRegistry.ObjectInfo memory info
83
+ )
84
+ {
85
+ // check target is component
86
+ info = _getObjectInfo(registry, target);
87
+ if(info.objectType != STAKING()) {
88
+ revert ErrorContractLibNotStaking(
89
+ info.nftId,
90
+ info.objectType);
91
+ }
92
+ }
93
+
94
+
95
+ function getAndVerifyAnyComponent(
96
+ IRegistry registry,
97
+ address target,
98
+ bool onlyActive
99
+ )
100
+ external
101
+ view
102
+ returns (
103
+ IRegistry.ObjectInfo memory info,
104
+ address instance
105
+ )
106
+ {
107
+ // check target is component
108
+ info = _getObjectInfo(registry, target);
109
+ if(!(info.objectType == PRODUCT()
110
+ || info.objectType == POOL()
111
+ || info.objectType == DISTRIBUTION()
112
+ || info.objectType == ORACLE())
113
+ ) {
114
+ revert ErrorContractLibNotComponent(
115
+ info.nftId,
116
+ info.objectType);
117
+ }
118
+
119
+ // get instance and check component is active
120
+ instance = _getInstance(registry, info);
121
+ _checkComponentActive(instance, target, info.nftId, onlyActive);
122
+ }
123
+
124
+
125
+ function getInstanceForComponent(
126
+ IRegistry registry,
127
+ NftId componentNftId
128
+ )
129
+ public
130
+ view
131
+ returns (address instance)
132
+ {
133
+ NftId productNftId = registry.getObjectInfo(componentNftId).parentNftId;
134
+ NftId instanceNftId = registry.getObjectInfo(productNftId).parentNftId;
135
+ return registry.getObjectInfo(instanceNftId).objectAddress;
136
+ }
137
+
138
+
139
+ function isPolicyHolder(address target) external view returns (bool) {
140
+ return ERC165Checker.supportsInterface(target, type(IPolicyHolder).interfaceId);
141
+ }
142
+
143
+
144
+ function isRegistry(address registry) public view returns (bool) {
145
+ if (!isContract(registry)) {
146
+ return false;
147
+ }
148
+
149
+ return supportsInterface(registry, type(IRegistry).interfaceId);
150
+ }
151
+
152
+
153
+ function isContract(address target) public view returns (bool) {
154
+ if (target == address(0)) {
155
+ return false;
156
+ }
157
+
158
+ uint256 size;
159
+ assembly {
160
+ size := extcodesize(target)
161
+ }
162
+ return size > 0;
163
+ }
164
+
165
+ function supportsInterface(address target, bytes4 interfaceId) public view returns (bool) {
166
+ return ERC165Checker.supportsInterface(target, interfaceId);
167
+ }
168
+
169
+
170
+ function _checkComponentActive(
171
+ address instance,
172
+ address target,
173
+ NftId componentNftId,
174
+ bool onlyActive
175
+ )
176
+ internal
177
+ view
178
+ {
179
+ if (onlyActive) {
180
+ if (IInstanceAdminHelper(
181
+ instance).getInstanceAdmin().isTargetLocked(
182
+ target)
183
+ ) {
184
+ revert ErrorContractLibComponentInactive(componentNftId);
185
+ }
186
+ }
187
+ }
188
+
189
+
190
+ function _getInstance(
191
+ IRegistry registry,
192
+ IRegistry.ObjectInfo memory info
193
+ )
194
+ internal
195
+ view
196
+ returns (address instance)
197
+ {
198
+ if (info.objectType == PRODUCT()) {
199
+ return registry.getObjectAddress(
200
+ info.parentNftId);
201
+ }
202
+
203
+ return registry.getObjectAddress(
204
+ registry.getObjectInfo(
205
+ info.parentNftId).parentNftId);
206
+ }
207
+
208
+
209
+ function _getObjectInfo(
210
+ IRegistry registry,
211
+ address target
212
+ )
213
+ internal
214
+ view
215
+ returns (IRegistry.ObjectInfo memory info)
216
+ {
217
+ NftId componentNftId = registry.getNftIdForAddress(target);
218
+ if (componentNftId.eqz()) {
219
+ revert ErrorContractLibNotRegistered(target);
220
+ }
221
+
222
+ info = registry.getObjectInfo(componentNftId);
223
+ }
224
+ }
@@ -17,29 +17,26 @@ interface IComponent is
17
17
  IRegisterable,
18
18
  ITransferInterceptor
19
19
  {
20
+ error ErrorComponentProductNftIdZero();
21
+ error ErrorComponentProductNftIdNonzero();
22
+ error ErrorComponentNameLengthZero();
23
+
20
24
  error ErrorComponentNotChainNft(address caller);
21
25
 
26
+ error ErrorComponentTokenAddressNonzero();
22
27
  error ErrorComponentTokenAddressZero();
23
- error ErrorComponentNameLengthZero();
24
28
  error ErrorComponentWalletAddressZero();
25
29
  error ErrorComponentWalletAddressIsSameAsCurrent();
26
- error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
27
30
  error ErrorComponentWalletNotComponent();
28
31
 
29
32
  event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
30
33
  event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
31
- event LogComponentTokenHandlerApproved(address token, Amount limit);
32
-
33
- /// @dev approves token hanlder to spend up to the specified amount of tokens
34
- /// reverts if component wallet is not component itself
35
- /// only component owner (nft holder) is authorizes to call this function
36
- function approveTokenHandler(Amount spendingLimitAmount) external;
34
+ event LogComponentTokenHandlerApproved(address tokenHandler, address token, Amount limit, bool isMaxAmount);
37
35
 
38
- /// @dev sets the wallet address for the component
39
- /// if the current wallet has tokens, these will be transferred
40
- /// if the new wallet address is externally owned, an approval from the
41
- /// owner of the external wallet for the component to move all tokens must exist
42
- function setWallet(address walletAddress) external;
36
+ /// @dev Approves token hanlder to spend up to the specified amount of tokens.
37
+ /// Reverts if component wallet is not token handler itself.
38
+ /// Only component owner (nft holder) is authorizes to call this function.
39
+ function approveTokenHandler(IERC20Metadata token, Amount spendingLimitAmount) external;
43
40
 
44
41
  /// @dev returns the name of this component
45
42
  /// to successfully register the component with an instance the name MUST be unique in the linked instance
@@ -1,33 +1,51 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
5
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
6
5
 
7
6
  import {Amount} from "../type/Amount.sol";
8
7
  import {Fee} from "../type/Fee.sol";
9
- import {IComponents} from "../instance/module/IComponents.sol";
10
- import {IInstance} from "../instance/IInstance.sol";
11
- import {IInstanceService} from "../instance/IInstanceService.sol";
12
8
  import {InstanceStore} from "../instance/InstanceStore.sol";
13
- import {IProductService} from "../product/IProductService.sol";
14
- import {IRegisterable} from "../shared/IRegisterable.sol";
15
9
  import {IService} from "../shared/IService.sol";
16
10
  import {NftId} from "../type/NftId.sol";
17
11
  import {ObjectType} from "../type/ObjectType.sol";
18
- import {TokenHandler} from "../shared/TokenHandler.sol";
19
12
  import {UFixed} from "../type/UFixed.sol";
13
+ import {VersionPart} from "../type/Version.sol";
20
14
 
21
15
  /// @dev component base class
22
16
  /// component examples are staking, product, distribution, pool and oracle
23
17
  interface IComponentService is
24
18
  IService
25
19
  {
20
+ error ErrorComponentServiceNotInstanceLinkedComponent(address component);
21
+ error ErrorComponentServiceSenderNotRegistered(address sender);
22
+ error ErrorComponentServiceNotComponent(address component);
23
+ error ErrorComponentServiceTypeNotSupported(address component, ObjectType invalidType);
24
+ error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
25
+ error ErrorComponentServiceAlreadyRegistered(address component);
26
+ error ErrorComponentServiceReleaseMismatch(address component, VersionPart componentRelease, VersionPart parentRelease);
27
+ error ErrorComponentServiceSenderNotComponentParent(NftId senderNftId, NftId compnentParentNftId);
28
+ error ErrorComponentServiceParentNotInstance(NftId nftId, ObjectType objectType);
29
+ error ErrorComponentServiceParentNotProduct(NftId nftId, ObjectType objectType);
30
+
31
+ error ErrorProductServiceNoDistributionExpected(NftId productNftId);
32
+ error ErrorProductServiceDistributionAlreadyRegistered(NftId productNftId, NftId distributionNftId);
33
+ error ErrorProductServiceNoOraclesExpected(NftId productNftId);
34
+ error ErrorProductServiceOraclesAlreadyRegistered(NftId productNftId, uint8 expectedOracles);
35
+ error ErrorProductServicePoolAlreadyRegistered(NftId productNftId, NftId poolNftId);
36
+
26
37
  error ErrorComponentServiceNewWalletAddressZero();
27
38
  error ErrorComponentServiceWalletAddressZero();
28
39
  error ErrorComponentServiceWalletAddressIsSameAsCurrent();
29
40
 
41
+ error ErrorComponentServiceWithdrawAmountIsZero();
42
+ error ErrorComponentServiceWithdrawAmountExceedsLimit(Amount withdrawnAmount, Amount withdrawLimit);
43
+ error ErrorComponentServiceWalletAllowanceTooSmall(address wallet, address spender, uint256 allowance, uint256 amount);
44
+
45
+ event LogComponentServiceRegistered(NftId instanceNftId, NftId componentNftId, ObjectType componentType, address component, address token, address initialOwner);
30
46
  event LogComponentServiceWalletAddressChanged(NftId componentNftId, address currentWallet, address newWallet);
47
+ event LogComponentServiceWalletTokensTransferred(NftId componentNftId, address currentWallet, address newWallet, uint256 currentBalance);
48
+ event LogComponentServiceComponentFeesWithdrawn(NftId componentNftId, address recipient, address token, Amount withdrawnAmount);
31
49
  event LogComponentServiceProductFeesUpdated(NftId productNftId);
32
50
  event LogComponentServiceDistributionFeesUpdated(NftId distributionNftId);
33
51
  event LogComponentServicePoolFeesUpdated(NftId poolNftId);
@@ -42,19 +60,35 @@ interface IComponentService is
42
60
 
43
61
  //-------- component ----------------------------------------------------//
44
62
 
45
- /// @dev sets the components associated wallet address
63
+ /// @dev Approves the callers token handler to spend up to the specified amount of tokens.
64
+ /// Reverts if the component's token handler wallet is not the token handler itself.
65
+ function approveTokenHandler(IERC20Metadata token, Amount amount) external;
66
+
67
+ /// @dev Approves the staking token handler.
68
+ /// Reverts if the staking token handler wallet is not the token handler itself.
69
+ function approveStakingTokenHandler(IERC20Metadata token, Amount amount) external;
70
+
71
+ /// @dev Sets the components associated wallet address
46
72
  function setWallet(address newWallet) external;
47
73
 
48
- /// @dev locks the component associated with the caller
74
+ /// @dev Locks the component associated with the caller
49
75
  function lock() external;
50
76
 
51
- /// @dev unlocks the component associated with the caller
77
+ /// @dev Unlocks the component associated with the caller
52
78
  function unlock() external;
53
79
 
80
+ /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
81
+ /// @param withdrawAmount the amount to withdraw
82
+ /// @return withdrawnAmount the amount that was actually withdrawn
83
+ function withdrawFees(Amount withdrawAmount) external returns (Amount withdrawnAmount);
84
+
85
+ /// @dev Registers the provided component with the product (sender)
86
+ function registerComponent(address component) external returns (NftId componentNftId);
87
+
54
88
  //-------- product ------------------------------------------------------//
55
89
 
56
- /// @dev registers the sending component as a product component
57
- function registerProduct() external;
90
+ /// @dev Registers the specified product component for the instance (sender)
91
+ function registerProduct(address product) external returns (NftId productNftId);
58
92
 
59
93
  function setProductFees(
60
94
  Fee memory productFee, // product fee on net premium
@@ -66,9 +100,6 @@ interface IComponentService is
66
100
 
67
101
  //-------- distribution -------------------------------------------------//
68
102
 
69
- /// @dev registers the sending component as a distribution component
70
- function registerDistribution() external;
71
-
72
103
  function setDistributionFees(
73
104
  Fee memory distributionFee, // distribution fee for sales that do not include commissions
74
105
  Fee memory minDistributionOwnerFee // min fee required by distribution owner (not including commissions for distributors)
@@ -77,16 +108,12 @@ interface IComponentService is
77
108
  function increaseDistributionBalance(InstanceStore instanceStore, NftId distributionNftId, Amount amount, Amount feeAmount) external;
78
109
  function decreaseDistributionBalance(InstanceStore instanceStore, NftId distributionNftId, Amount amount, Amount feeAmount) external;
79
110
 
80
- //-------- oracle -------------------------------------------------------//
81
-
82
- /// @dev registers the sending component as an oracle component
83
- function registerOracle() external;
111
+ //-------- distributor --------------------------------------------------//
112
+ function increaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
113
+ function decreaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
84
114
 
85
115
  //-------- pool ---------------------------------------------------------//
86
116
 
87
- /// @dev registers the sending component as a pool component
88
- function registerPool() external;
89
-
90
117
  function setPoolFees(
91
118
  Fee memory poolFee, // pool fee on net premium
92
119
  Fee memory stakingFee, // pool fee on staked capital from investor
@@ -99,4 +126,5 @@ interface IComponentService is
99
126
  //-------- bundle -------------------------------------------------------//
100
127
  function increaseBundleBalance(InstanceStore instanceStore, NftId bundleNftId, Amount amount, Amount feeAmount) external;
101
128
  function decreaseBundleBalance(InstanceStore instanceStore, NftId bundleNftId, Amount amount, Amount feeAmount) external;
129
+
102
130
  }
@@ -4,30 +4,20 @@ pragma solidity ^0.8.20;
4
4
  import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
5
5
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
6
6
 
7
+ import {Amount} from "../type/Amount.sol";
7
8
  import {IComponent} from "../shared/IComponent.sol";
8
9
  import {IAuthorization} from "../authorization/IAuthorization.sol";
9
- import {IComponents} from "../instance/module/IComponents.sol";
10
10
  import {IInstance} from "../instance/IInstance.sol";
11
- import {IInstanceService} from "../instance/IInstanceService.sol";
12
- import {IProductService} from "../product/IProductService.sol";
13
- import {IRegisterable} from "../shared/IRegisterable.sol";
14
11
  import {NftId} from "../type/NftId.sol";
15
12
  import {ObjectType} from "../type/ObjectType.sol";
16
- import {TokenHandler} from "../shared/TokenHandler.sol";
17
13
 
18
14
  /// @dev component base class
19
15
  /// component examples are product, distribution, pool and oracle
20
16
  interface IInstanceLinkedComponent is
21
17
  IComponent
22
18
  {
23
- error ErrorComponentNotProductService(address caller);
24
- error ErrorComponentNotInstance(NftId instanceNftId);
25
- error ErrorComponentProductNftAlreadySet();
26
-
27
- /// @dev registers this component with the registry and instance.
28
- /// a component may only be linked once
29
- /// only initial component owner (nft holder) is authorizes to call this function
30
- function register() external;
19
+ error ErrorInstanceLinkedComponentTypeMismatch(ObjectType requiredType, ObjectType objectType);
20
+ error ErrorInstanceLinkedComponentNotProduct(NftId nftId, ObjectType objectType);
31
21
 
32
22
  /// @dev locks component to disable functions that may change state related to this component, the only exception is function "unlock"
33
23
  /// only component owner (nft holder) is authorizes to call this function
@@ -37,13 +27,14 @@ interface IInstanceLinkedComponent is
37
27
  /// only component owner (nft holder) is authorizes to call this function
38
28
  function unlock() external;
39
29
 
30
+ /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
31
+ /// @param amount the amount to withdraw
32
+ /// @return withdrawnAmount the amount that was actually withdrawn
33
+ function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
34
+
40
35
  /// @dev defines the instance to which this component is linked to
41
36
  function getInstance() external view returns (IInstance instance);
42
37
 
43
- /// @dev defines the product to which this component is linked to
44
- /// this is only relevant for pool and distribution components
45
- function getProductNftId() external view returns (NftId productNftId);
46
-
47
38
  /// @dev returns the initial component authorization specification.
48
39
  function getAuthorization() external view returns (IAuthorization authorization);
49
40
 
@@ -6,8 +6,10 @@ import {StateId} from "../type/StateId.sol";
6
6
 
7
7
  interface ILifecycle {
8
8
 
9
- error ErrorNoLifecycle(ObjectType objectType);
9
+ error ErrorNoLifecycle(address contractAddress, ObjectType objectType);
10
+ error ErrorFromStateMissmatch(address contractAddress, ObjectType objectType, StateId actual, StateId required);
10
11
  error ErrorInvalidStateTransition(
12
+ address contractAddress,
11
13
  ObjectType objectType,
12
14
  StateId fromStateId,
13
15
  StateId toStateId
@@ -5,6 +5,7 @@ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
5
 
6
6
  import {IRegistryLinked} from "./IRegistryLinked.sol";
7
7
  import {NftId} from "../type/NftId.sol";
8
+ import {ObjectType} from "../type/ObjectType.sol";
8
9
 
9
10
  interface INftOwnable is
10
11
  IERC165,
@@ -12,6 +13,7 @@ interface INftOwnable is
12
13
  {
13
14
  error ErrorNftOwnableInitialOwnerZero();
14
15
  error ErrorNftOwnableNotOwner(address account);
16
+ error ErrorNftOwnableInvalidType(NftId nftId, ObjectType expectedObjectType);
15
17
 
16
18
  error ErrorNftOwnableAlreadyLinked(NftId nftId);
17
19
  error ErrorNftOwnableContractNotRegistered(address contractAddress);
@@ -9,37 +9,27 @@ import {ClaimId} from "../type/ClaimId.sol";
9
9
  import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
10
10
  import {NftId} from "../type/NftId.sol";
11
11
  import {PayoutId} from "../type/PayoutId.sol";
12
+ import {Timestamp} from "../type/Timestamp.sol";
12
13
 
13
- /// @dev generic interface for contracts that need to hold policies and receive payouts
14
- /// GIF will notify policy holder contracts for policy creation and payout execution
14
+ /// @dev Generic interface for contracts that need to hold policies and receive payouts.
15
+ /// The framework notifies policy holder contracts for policy creation/expiry, claim confirmation and payout execution
15
16
  interface IPolicyHolder is
16
17
  IERC165,
17
18
  IERC721Receiver,
18
19
  IRegistryLinked
19
20
  {
20
21
 
21
- /// @dev callback function that will be called after successful policy activation
22
- /// active policies may open claims under the activated policy
23
- function policyActivated(NftId policyNftId) external;
22
+ /// @dev Callback function that will be called after successful policy activation.
23
+ /// Active policies may open claims under the activated policy.
24
+ function policyActivated(NftId policyNftId, Timestamp activatedAt) external;
24
25
 
25
- /// @dev callback function to indicate the specified policy has expired
26
- /// expired policies may no longer open claims
27
- /// it is optional for products to notifiy policy holder of expired claims
28
- function policyExpired(NftId policyNftId) external;
26
+ /// @dev Callback function to indicate the specified policy has expired.
27
+ /// expired policies no longer accept new claims.
28
+ function policyExpired(NftId policyNftId, Timestamp expiredAt) external;
29
29
 
30
- /// @dev request for a payout by the requesting policy
31
- /// the contract implements its use case specific handling for such requests.
32
- /// eg. creation of a pending payout, a corresponding claim against one of the policies held by the IPolicyHolder
33
- function requestPayout(NftId requestingPolicyNftId, Amount requestedPayoutAmount) external;
34
-
35
- /// @dev callback function to notify the confirmation of the specified claim
36
- /// active policies may open claims under the activated policy
30
+ /// @dev Callback function to notify the confirmation of the specified claim.
37
31
  function claimConfirmed(NftId policyNftId, ClaimId claimId, Amount amount) external;
38
32
 
39
- /// @dev callback function that will be called after a successful payout
40
- function payoutExecuted(NftId policyNftId, PayoutId payoutId, address beneficiary, Amount amount) external;
41
-
42
- /// @dev determines policy and claim specific beneficiary address
43
- /// returned address will override GIF default where the policy nft holder is treated as beneficiary
44
- function getBeneficiary(NftId policyNftId, PayoutId payoutId) external view returns (address beneficiary);
33
+ /// @dev Callback function to notify the successful payout.
34
+ function payoutExecuted(NftId policyNftId, PayoutId payoutId, Amount amount, address beneficiary) external;
45
35
  }