@etherisc/gif-next 0.0.2-f36fd21-685 → 0.0.2-f47f21f-178

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 (454) hide show
  1. package/README.md +19 -2
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +105 -65
  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 +67 -11
  7. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +60 -32
  10. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
  12. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
  14. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
  16. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
  18. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  19. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +163 -309
  20. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +82 -22
  22. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +91 -277
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +174 -292
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +99 -123
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +78 -92
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +78 -62
  32. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  33. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  34. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  35. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1538 -0
  36. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  37. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +470 -0
  38. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  39. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2077 -0
  40. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -0
  42. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  44. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  45. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1471 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1231 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1592 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2095 -0
  52. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  53. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  54. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  55. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +53 -31
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  57. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +29 -84
  58. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/Instance.sol/Instance.json +56 -123
  60. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +166 -139
  62. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +57 -97
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  65. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +459 -131
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +77 -242
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  69. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +75 -87
  70. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  71. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +330 -233
  72. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  73. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  74. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  76. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  77. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  78. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
  79. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  80. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  81. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  86. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  87. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  88. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  89. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  90. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +137 -283
  91. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  92. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
  93. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  94. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  95. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +66 -80
  96. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  97. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
  98. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  99. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +79 -265
  100. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  101. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +91 -159
  102. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  103. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +75 -83
  104. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  105. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +109 -330
  106. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  107. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +82 -22
  108. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  109. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +359 -194
  110. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  111. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +145 -97
  112. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  113. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +178 -23
  114. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  115. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +88 -130
  116. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  117. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +384 -179
  118. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  119. package/artifacts/contracts/pool/Pool.sol/Pool.json +99 -313
  120. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  121. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +506 -334
  122. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  123. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +111 -87
  124. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  125. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +76 -168
  126. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  127. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +72 -92
  128. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  129. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +136 -281
  130. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  131. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
  132. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  133. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +303 -187
  134. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  135. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +119 -103
  136. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  137. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +34 -0
  138. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  139. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +176 -6
  140. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  141. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +310 -118
  142. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  143. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +114 -85
  144. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  145. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +124 -97
  146. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  147. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +31 -2
  148. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  149. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +433 -327
  150. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  151. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +119 -103
  152. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  153. package/artifacts/contracts/product/PricingService.sol/PricingService.json +199 -309
  154. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  155. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +96 -120
  156. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  157. package/artifacts/contracts/product/Product.sol/Product.json +136 -281
  158. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  159. package/artifacts/contracts/product/RiskService.sol/RiskService.json +622 -0
  160. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  161. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +694 -0
  162. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  163. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  164. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  165. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +286 -34
  166. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  167. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +114 -35
  168. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  169. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  170. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  171. package/artifacts/contracts/registry/Registry.sol/Registry.json +492 -95
  172. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  173. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +283 -143
  174. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  175. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +78 -284
  176. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  177. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +67 -75
  178. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  179. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
  180. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  181. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +129 -221
  182. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  183. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
  184. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  185. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  186. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  187. package/artifacts/contracts/shared/Component.sol/Component.json +65 -236
  188. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  189. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +355 -283
  190. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  191. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +122 -120
  192. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  193. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +47 -112
  194. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  195. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
  196. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  197. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +55 -54
  198. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  199. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +321 -19
  200. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  201. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +66 -80
  202. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  203. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
  204. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  205. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  206. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  207. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  208. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  209. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  210. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  211. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
  212. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  213. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  214. package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
  215. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  216. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
  217. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  218. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +79 -265
  219. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  220. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
  221. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  222. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  223. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  224. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  225. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  226. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
  227. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  228. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  229. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  230. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +58 -89
  231. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  232. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  233. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  234. package/artifacts/contracts/shared/Service.sol/Service.json +47 -112
  235. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  236. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  237. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  238. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  239. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  240. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +82 -55
  241. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  242. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
  243. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  244. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +63 -93
  245. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  246. package/artifacts/contracts/staking/Staking.sol/Staking.json +176 -293
  247. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  248. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  249. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  250. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +106 -91
  251. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  252. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
  253. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  254. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +71 -165
  255. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  256. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +71 -79
  257. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  258. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +169 -128
  259. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  260. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +54 -23
  261. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  262. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  263. package/artifacts/contracts/type/Amount.sol/AmountLib.json +32 -8
  264. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  265. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  266. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  268. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  270. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
  272. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  273. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  274. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  276. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  277. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  278. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  280. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  282. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  284. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  286. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  288. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  290. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  291. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
  292. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  293. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  295. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  296. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  297. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  299. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  300. package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
  301. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  302. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +15 -2
  303. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  304. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  305. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  306. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  307. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +55 -70
  308. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  309. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  310. package/contracts/authorization/AccessAdmin.sol +64 -59
  311. package/contracts/authorization/Authorization.sol +111 -40
  312. package/contracts/authorization/IAccess.sol +1 -0
  313. package/contracts/authorization/IAccessAdmin.sol +4 -3
  314. package/contracts/authorization/IAuthorization.sol +13 -7
  315. package/contracts/authorization/IServiceAuthorization.sol +3 -1
  316. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  317. package/contracts/authorization/ServiceAuthorization.sol +26 -10
  318. package/contracts/distribution/BasicDistribution.sol +2 -1
  319. package/contracts/distribution/Distribution.sol +7 -17
  320. package/contracts/distribution/DistributionService.sol +83 -65
  321. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  322. package/contracts/distribution/IDistributionComponent.sol +1 -1
  323. package/contracts/distribution/IDistributionService.sol +9 -5
  324. package/contracts/examples/fire/DamageLevel.sol +59 -0
  325. package/contracts/examples/fire/FirePool.sol +75 -0
  326. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  327. package/contracts/examples/fire/FireProduct.sol +418 -0
  328. package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
  329. package/contracts/examples/fire/FireUSD.sol +26 -0
  330. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  331. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  332. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  333. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  334. package/contracts/instance/IInstance.sol +10 -30
  335. package/contracts/instance/IInstanceService.sol +0 -20
  336. package/contracts/instance/Instance.sol +29 -51
  337. package/contracts/instance/InstanceAdmin.sol +42 -31
  338. package/contracts/instance/InstanceAuthorizationV3.sol +11 -21
  339. package/contracts/instance/InstanceReader.sol +115 -25
  340. package/contracts/instance/InstanceService.sol +65 -97
  341. package/contracts/instance/InstanceServiceManager.sol +6 -7
  342. package/contracts/instance/InstanceStore.sol +11 -1
  343. package/contracts/instance/base/ObjectLifecycle.sol +9 -4
  344. package/contracts/instance/module/IBundle.sol +1 -1
  345. package/contracts/instance/module/IComponents.sol +10 -10
  346. package/contracts/instance/module/IPolicy.sol +24 -24
  347. package/contracts/mock/Dip.sol +1 -1
  348. package/contracts/oracle/BasicOracle.sol +0 -1
  349. package/contracts/oracle/IOracleService.sol +2 -1
  350. package/contracts/oracle/Oracle.sol +6 -16
  351. package/contracts/oracle/OracleService.sol +47 -34
  352. package/contracts/oracle/OracleServiceManager.sol +6 -6
  353. package/contracts/pool/BasicPool.sol +21 -31
  354. package/contracts/pool/BasicPoolAuthorization.sol +5 -3
  355. package/contracts/pool/BundleService.sol +213 -61
  356. package/contracts/pool/BundleServiceManager.sol +6 -6
  357. package/contracts/pool/IBundleService.sol +31 -8
  358. package/contracts/pool/IPoolComponent.sol +18 -8
  359. package/contracts/pool/IPoolService.sol +56 -39
  360. package/contracts/pool/Pool.sol +60 -53
  361. package/contracts/pool/PoolService.sol +250 -140
  362. package/contracts/pool/PoolServiceManager.sol +4 -4
  363. package/contracts/product/ApplicationService.sol +59 -30
  364. package/contracts/product/ApplicationServiceManager.sol +4 -4
  365. package/contracts/product/BasicProduct.sol +7 -6
  366. package/contracts/product/BasicProductAuthorization.sol +0 -1
  367. package/contracts/product/ClaimService.sol +313 -118
  368. package/contracts/product/ClaimServiceManager.sol +4 -4
  369. package/contracts/product/IApplicationService.sol +1 -0
  370. package/contracts/product/IClaimService.sol +31 -7
  371. package/contracts/product/IPolicyService.sol +34 -34
  372. package/contracts/product/IPricingService.sol +10 -10
  373. package/contracts/product/IProductComponent.sol +23 -4
  374. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  375. package/contracts/product/PolicyService.sol +394 -196
  376. package/contracts/product/PolicyServiceManager.sol +4 -4
  377. package/contracts/product/PricingService.sol +54 -54
  378. package/contracts/product/PricingServiceManager.sol +3 -3
  379. package/contracts/product/Product.sol +125 -71
  380. package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
  381. package/contracts/product/RiskServiceManager.sol +39 -0
  382. package/contracts/registry/ChainNft.sol +68 -38
  383. package/contracts/registry/IRegistry.sol +55 -18
  384. package/contracts/registry/IRegistryService.sol +5 -12
  385. package/contracts/registry/ITransferInterceptor.sol +1 -2
  386. package/contracts/registry/Registry.sol +342 -201
  387. package/contracts/registry/RegistryAdmin.sol +134 -51
  388. package/contracts/registry/RegistryService.sol +35 -46
  389. package/contracts/registry/RegistryServiceManager.sol +2 -2
  390. package/contracts/registry/ReleaseLifecycle.sol +6 -3
  391. package/contracts/registry/ReleaseRegistry.sol +204 -188
  392. package/contracts/registry/ServiceAuthorizationV3.sol +16 -22
  393. package/contracts/shared/Component.sol +40 -55
  394. package/contracts/shared/ComponentService.sol +235 -151
  395. package/contracts/shared/ComponentServiceManager.sol +8 -5
  396. package/contracts/shared/ComponentVerifyingService.sol +23 -14
  397. package/contracts/shared/ContractLib.sol +38 -0
  398. package/contracts/shared/IComponent.sol +10 -6
  399. package/contracts/shared/IComponentService.sol +25 -13
  400. package/contracts/shared/IInstanceLinkedComponent.sol +7 -22
  401. package/contracts/shared/ILifecycle.sol +3 -1
  402. package/contracts/shared/INftOwnable.sol +2 -0
  403. package/contracts/shared/IPolicyHolder.sol +12 -22
  404. package/contracts/shared/IRegisterable.sol +11 -0
  405. package/contracts/shared/InitializableERC165.sol +2 -2
  406. package/contracts/shared/InstanceLinkedComponent.sol +72 -31
  407. package/contracts/shared/KeyValueStore.sol +1 -1
  408. package/contracts/shared/Lifecycle.sol +15 -4
  409. package/contracts/shared/NftOwnable.sol +27 -7
  410. package/contracts/shared/PolicyHolder.sol +15 -52
  411. package/contracts/shared/Registerable.sol +19 -9
  412. package/contracts/shared/RegistryLinked.sol +3 -2
  413. package/contracts/shared/Service.sol +20 -18
  414. package/contracts/shared/TokenHandler.sol +100 -19
  415. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  416. package/contracts/staking/IStaking.sol +2 -1
  417. package/contracts/staking/IStakingService.sol +0 -3
  418. package/contracts/staking/StakeManagerLib.sol +18 -25
  419. package/contracts/staking/Staking.sol +13 -32
  420. package/contracts/staking/StakingManager.sol +8 -6
  421. package/contracts/staking/StakingReader.sol +12 -5
  422. package/contracts/staking/StakingService.sol +11 -29
  423. package/contracts/staking/StakingServiceManager.sol +2 -2
  424. package/contracts/staking/TargetManagerLib.sol +7 -3
  425. package/contracts/type/Amount.sol +15 -0
  426. package/contracts/type/Blocknumber.sol +7 -1
  427. package/contracts/type/ClaimId.sol +6 -1
  428. package/contracts/type/NftId.sol +1 -0
  429. package/contracts/type/ObjectType.sol +16 -11
  430. package/contracts/type/PayoutId.sol +10 -10
  431. package/contracts/type/RiskId.sol +15 -1
  432. package/contracts/type/RoleId.sol +0 -12
  433. package/contracts/type/Seconds.sol +21 -1
  434. package/contracts/type/StateId.sol +15 -1
  435. package/contracts/type/Timestamp.sol +11 -1
  436. package/contracts/type/UFixed.sol +4 -0
  437. package/contracts/upgradeability/ProxyManager.sol +68 -34
  438. package/contracts/upgradeability/Versionable.sol +2 -2
  439. package/package.json +2 -1
  440. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  441. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  442. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  443. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  444. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  445. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  446. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  447. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  448. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  449. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  450. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  451. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  452. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  453. package/contracts/product/ProductServiceManager.sol +0 -39
  454. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -0,0 +1,38 @@
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
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
6
+
7
+ import {IPolicyHolder} from "./IPolicyHolder.sol";
8
+
9
+ library ContractLib {
10
+
11
+ function isPolicyHolder(address target) external view returns (bool) {
12
+ return ERC165Checker.supportsInterface(target, type(IPolicyHolder).interfaceId);
13
+ }
14
+
15
+ function isAccessManaged(address target) external view returns (bool) {
16
+ if (!isContract(target)) {
17
+ return false;
18
+ }
19
+
20
+ (bool success, ) = target.staticcall(
21
+ abi.encodeWithSelector(
22
+ IAccessManaged.authority.selector));
23
+
24
+ return success;
25
+ }
26
+
27
+ function isContract(address target) public view returns (bool) {
28
+ uint256 size;
29
+ assembly {
30
+ size := extcodesize(target)
31
+ }
32
+ return size > 0;
33
+ }
34
+
35
+ function supportsInterface(address target, bytes4 interfaceId) external view returns (bool) {
36
+ return ERC165Checker.supportsInterface(target, interfaceId);
37
+ }
38
+ }
@@ -17,28 +17,32 @@ 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);
34
+ event LogComponentTokenHandlerApproved(address token, Amount limit, bool isMaxAmount);
32
35
 
33
36
  /// @dev approves token hanlder to spend up to the specified amount of tokens
34
37
  /// reverts if component wallet is not component itself
35
38
  /// only component owner (nft holder) is authorizes to call this function
36
39
  function approveTokenHandler(Amount spendingLimitAmount) external;
37
40
 
38
- /// @dev sets the wallet address for the component
39
- /// if the current wallet has tokens, these will be transferred
41
+ /// @dev sets the wallet address for the component.
42
+ /// if the current wallet has tokens, these will be transferred.
40
43
  /// 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
44
+ /// owner of the external wallet to the tokenhandler of the component that
45
+ /// covers the current component balance must exist
42
46
  function setWallet(address walletAddress) external;
43
47
 
44
48
  /// @dev returns the name of this component
@@ -7,13 +7,32 @@ import {Fee} from "../type/Fee.sol";
7
7
  import {InstanceStore} from "../instance/InstanceStore.sol";
8
8
  import {IService} from "../shared/IService.sol";
9
9
  import {NftId} from "../type/NftId.sol";
10
+ import {ObjectType} from "../type/ObjectType.sol";
10
11
  import {UFixed} from "../type/UFixed.sol";
12
+ import {VersionPart} from "../type/Version.sol";
11
13
 
12
14
  /// @dev component base class
13
15
  /// component examples are staking, product, distribution, pool and oracle
14
16
  interface IComponentService is
15
17
  IService
16
18
  {
19
+ error ErrorComponentServiceNotInstanceLinkedComponent(address component);
20
+ error ErrorComponentServiceSenderNotRegistered(address sender);
21
+ error ErrorComponentServiceNotComponent(address component);
22
+ error ErrorComponentServiceTypeNotSupported(address component, ObjectType invalidType);
23
+ error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
24
+ error ErrorComponentServiceAlreadyRegistered(address component);
25
+ error ErrorComponentServiceReleaseMismatch(address component, VersionPart componentRelease, VersionPart parentRelease);
26
+ error ErrorComponentServiceSenderNotComponentParent(NftId senderNftId, NftId compnentParentNftId);
27
+ error ErrorComponentServiceParentNotInstance(NftId nftId, ObjectType objectType);
28
+ error ErrorComponentServiceParentNotProduct(NftId nftId, ObjectType objectType);
29
+
30
+ error ErrorProductServiceNoDistributionExpected(NftId productNftId);
31
+ error ErrorProductServiceDistributionAlreadyRegistered(NftId productNftId, NftId distributionNftId);
32
+ error ErrorProductServiceNoOraclesExpected(NftId productNftId);
33
+ error ErrorProductServiceOraclesAlreadyRegistered(NftId productNftId, uint8 expectedOracles);
34
+ error ErrorProductServicePoolAlreadyRegistered(NftId productNftId, NftId poolNftId);
35
+
17
36
  error ErrorComponentServiceNewWalletAddressZero();
18
37
  error ErrorComponentServiceWalletAddressZero();
19
38
  error ErrorComponentServiceWalletAddressIsSameAsCurrent();
@@ -22,6 +41,7 @@ interface IComponentService is
22
41
  error ErrorComponentServiceWithdrawAmountExceedsLimit(Amount withdrawnAmount, Amount withdrawLimit);
23
42
  error ErrorComponentServiceWalletAllowanceTooSmall(address wallet, address spender, uint256 allowance, uint256 amount);
24
43
 
44
+ event LogComponentServiceRegistered(NftId instanceNftId, NftId componentNftId, ObjectType componentType, address component, address token, address initialOwner);
25
45
  event LogComponentServiceWalletAddressChanged(NftId componentNftId, address currentWallet, address newWallet);
26
46
  event LogComponentServiceComponentFeesWithdrawn(NftId componentNftId, address recipient, address token, Amount withdrawnAmount);
27
47
  event LogComponentServiceProductFeesUpdated(NftId productNftId);
@@ -52,10 +72,13 @@ interface IComponentService is
52
72
  /// @return withdrawnAmount the amount that was actually withdrawn
53
73
  function withdrawFees(Amount withdrawAmount) external returns (Amount withdrawnAmount);
54
74
 
75
+ /// @dev Registers the provided component with the product (sender)
76
+ function registerComponent(address component) external returns (NftId componentNftId);
77
+
55
78
  //-------- product ------------------------------------------------------//
56
79
 
57
- /// @dev registers the sending component as a product component
58
- function registerProduct() external;
80
+ /// @dev Registers the specified product component for the instance (sender)
81
+ function registerProduct(address product) external returns (NftId productNftId);
59
82
 
60
83
  function setProductFees(
61
84
  Fee memory productFee, // product fee on net premium
@@ -67,9 +90,6 @@ interface IComponentService is
67
90
 
68
91
  //-------- distribution -------------------------------------------------//
69
92
 
70
- /// @dev registers the sending component as a distribution component
71
- function registerDistribution() external;
72
-
73
93
  function setDistributionFees(
74
94
  Fee memory distributionFee, // distribution fee for sales that do not include commissions
75
95
  Fee memory minDistributionOwnerFee // min fee required by distribution owner (not including commissions for distributors)
@@ -82,16 +102,8 @@ interface IComponentService is
82
102
  function increaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
83
103
  function decreaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
84
104
 
85
- //-------- oracle -------------------------------------------------------//
86
-
87
- /// @dev registers the sending component as an oracle component
88
- function registerOracle() external;
89
-
90
105
  //-------- pool ---------------------------------------------------------//
91
106
 
92
- /// @dev registers the sending component as a pool component
93
- function registerPool() external;
94
-
95
107
  function setPoolFees(
96
108
  Fee memory poolFee, // pool fee on net premium
97
109
  Fee memory stakingFee, // pool fee on staked capital from investor
@@ -7,28 +7,17 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER
7
7
  import {Amount} from "../type/Amount.sol";
8
8
  import {IComponent} from "../shared/IComponent.sol";
9
9
  import {IAuthorization} from "../authorization/IAuthorization.sol";
10
- import {IComponents} from "../instance/module/IComponents.sol";
11
10
  import {IInstance} from "../instance/IInstance.sol";
12
- import {IInstanceService} from "../instance/IInstanceService.sol";
13
- import {IProductService} from "../product/IProductService.sol";
14
- import {IRegisterable} from "../shared/IRegisterable.sol";
15
11
  import {NftId} from "../type/NftId.sol";
16
12
  import {ObjectType} from "../type/ObjectType.sol";
17
- import {TokenHandler} from "../shared/TokenHandler.sol";
18
13
 
19
14
  /// @dev component base class
20
15
  /// component examples are product, distribution, pool and oracle
21
16
  interface IInstanceLinkedComponent is
22
17
  IComponent
23
18
  {
24
- error ErrorComponentNotProductService(address caller);
25
- error ErrorComponentNotInstance(NftId instanceNftId);
26
- error ErrorComponentProductNftAlreadySet();
27
-
28
- /// @dev registers this component with the registry and instance.
29
- /// a component may only be linked once
30
- /// only initial component owner (nft holder) is authorizes to call this function
31
- function register() external;
19
+ error ErrorInstanceLinkedComponentTypeMismatch(ObjectType requiredType, ObjectType objectType);
20
+ error ErrorInstanceLinkedComponentNotProduct(NftId nftId, ObjectType objectType);
32
21
 
33
22
  /// @dev locks component to disable functions that may change state related to this component, the only exception is function "unlock"
34
23
  /// only component owner (nft holder) is authorizes to call this function
@@ -38,19 +27,15 @@ interface IInstanceLinkedComponent is
38
27
  /// only component owner (nft holder) is authorizes to call this function
39
28
  function unlock() external;
40
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
+
41
35
  /// @dev defines the instance to which this component is linked to
42
36
  function getInstance() external view returns (IInstance instance);
43
37
 
44
- /// @dev defines the product to which this component is linked to
45
- /// this is only relevant for pool and distribution components
46
- function getProductNftId() external view returns (NftId productNftId);
47
-
48
38
  /// @dev returns the initial component authorization specification.
49
39
  function getAuthorization() external view returns (IAuthorization authorization);
50
40
 
51
- /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
52
- /// @param amount the amount to withdraw
53
- /// @return withdrawnAmount the amount that was actually withdrawn
54
- function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
55
-
56
41
  }
@@ -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
  }
@@ -3,11 +3,22 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {INftOwnable} from "./INftOwnable.sol";
5
5
  import {IRegistry} from "../registry/IRegistry.sol";
6
+ import {VersionPart} from "../type/Version.sol";
6
7
 
8
+ /// @title IRegisterable
9
+ /// @dev Marks contracts that are intended to be registered in the registry.
10
+ ///
7
11
  interface IRegisterable is
8
12
  INftOwnable
9
13
  {
14
+ /// @dev retuns the GIF release version for this contract.
15
+ /// This
16
+ function getRelease() external pure returns (VersionPart release);
10
17
 
18
+ /// @dev retuns the object info relevant for registering for this contract
19
+ /// IMPORTANT information returned by this function may only be used
20
+ /// before the contract is registered in the registry.
21
+ /// Once registered this information MUST only be accessed via the registry.
11
22
  function getInitialInfo()
12
23
  external
13
24
  view
@@ -11,13 +11,13 @@ contract InitializableERC165 is
11
11
  mapping(bytes4 => bool) private _isSupported;
12
12
 
13
13
  // @dev initializes with support for ERC165
14
- function initializeERC165() public onlyInitializing() {
14
+ function _initializeERC165() internal onlyInitializing() {
15
15
  _isSupported[type(IERC165).interfaceId] = true;
16
16
  }
17
17
 
18
18
  // @dev register support for provided interfaceId
19
19
  // includes initialization for ERC165_ID if not yet done
20
- function registerInterface(bytes4 interfaceId) public onlyInitializing() {
20
+ function _registerInterface(bytes4 interfaceId) internal onlyInitializing() {
21
21
  _isSupported[interfaceId] = true;
22
22
  }
23
23
 
@@ -17,7 +17,7 @@ import {IInstance} from "../instance/IInstance.sol";
17
17
  import {InstanceReader} from "../instance/InstanceReader.sol";
18
18
  import {IRegistry} from "../registry/IRegistry.sol";
19
19
  import {NftId} from "../type/NftId.sol";
20
- import {ObjectType, COMPONENT, INSTANCE} from "../type/ObjectType.sol";
20
+ import {ObjectType, COMPONENT, INSTANCE, PRODUCT} from "../type/ObjectType.sol";
21
21
  import {VersionPart} from "../type/Version.sol";
22
22
  import {RoleId, RoleIdLib} from "../type/RoleId.sol";
23
23
  import {IAccess} from "../instance/module/IAccess.sol";
@@ -48,18 +48,6 @@ abstract contract InstanceLinkedComponent is
48
48
  IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(false);
49
49
  }
50
50
 
51
- function getInstance() public view override returns (IInstance instance) {
52
- return _getInstanceLinkedComponentStorage()._instance;
53
- }
54
-
55
- function getProductNftId() public view override returns (NftId productNftId) {
56
- return getComponentInfo().productNftId;
57
- }
58
-
59
- function getAuthorization() external view returns (IAuthorization authorization) {
60
- return _getInstanceLinkedComponentStorage()._initialAuthorization;
61
- }
62
-
63
51
  /// @inheritdoc IInstanceLinkedComponent
64
52
  function withdrawFees(Amount amount)
65
53
  external
@@ -71,6 +59,16 @@ abstract contract InstanceLinkedComponent is
71
59
  return _withdrawFees(amount);
72
60
  }
73
61
 
62
+ /// @inheritdoc IInstanceLinkedComponent
63
+ function getInstance() public view override returns (IInstance instance) {
64
+ return _getInstanceLinkedComponentStorage()._instance;
65
+ }
66
+
67
+ /// @inheritdoc IInstanceLinkedComponent
68
+ function getAuthorization() external view returns (IAuthorization authorization) {
69
+ return _getInstanceLinkedComponentStorage()._initialAuthorization;
70
+ }
71
+
74
72
  function _getInstanceLinkedComponentStorage() private pure returns (InstanceLinkedComponentStorage storage $) {
75
73
  assembly {
76
74
  $.slot := INSTANCE_LINKED_COMPONENT_LOCATION_V1
@@ -79,51 +77,94 @@ abstract contract InstanceLinkedComponent is
79
77
 
80
78
  function _initializeInstanceLinkedComponent(
81
79
  address registry,
82
- NftId instanceNftId,
80
+ NftId parentNftId,
83
81
  string memory name,
84
82
  address token,
85
83
  ObjectType componentType,
86
84
  IAuthorization authorization,
87
85
  bool isInterceptor,
88
86
  address initialOwner,
89
- bytes memory registryData, // writeonly data that will saved in the object info record of the registry
90
87
  bytes memory componentData // data that will saved with the component info in the instance store
91
88
  )
92
89
  internal
93
90
  virtual
94
91
  onlyInitializing()
95
92
  {
93
+ // validate registry, nft ids and get parent nft id
94
+ NftId instanceNftId = _checkAndGetInstanceNftId(
95
+ registry,
96
+ parentNftId,
97
+ componentType);
98
+
96
99
  // set and check linked instance
97
100
  InstanceLinkedComponentStorage storage $ = _getInstanceLinkedComponentStorage();
98
101
  $._instance = IInstance(
99
- IRegistry(registry).getObjectInfo(
100
- instanceNftId).objectAddress);
102
+ IRegistry(registry).getObjectAddress(instanceNftId));
101
103
 
102
- if(!$._instance.supportsInterface(type(IInstance).interfaceId)) {
103
- revert ErrorComponentNotInstance(instanceNftId);
104
- }
105
-
106
- initializeComponent(
107
- $._instance.authority(),
104
+ // set component specific parameters
105
+ _initializeComponent(
106
+ $._instance.authority(), // instance linked components need to point to instance admin
108
107
  registry,
109
- instanceNftId,
108
+ parentNftId,
110
109
  name,
111
110
  token,
112
111
  componentType,
113
112
  isInterceptor,
114
113
  initialOwner,
115
- registryData,
114
+ "", // registry data
116
115
  componentData);
117
116
 
118
- // set component state
117
+ // set instance linked specific parameters
119
118
  $._instanceReader = $._instance.getInstanceReader();
120
119
  $._initialAuthorization = authorization;
121
120
  $._componentService = IComponentService(_getServiceAddress(COMPONENT()));
122
121
 
123
- registerInterface(type(IAccessManaged).interfaceId);
124
- registerInterface(type(IInstanceLinkedComponent).interfaceId);
122
+ // register interfaces
123
+ _registerInterface(type(IAccessManaged).interfaceId);
124
+ _registerInterface(type(IInstanceLinkedComponent).interfaceId);
125
+ }
126
+
127
+
128
+ function _checkAndGetInstanceNftId(
129
+ address registryAddress,
130
+ NftId parentNftId,
131
+ ObjectType componentType
132
+ )
133
+ internal
134
+ view
135
+ returns (NftId instanceNftId)
136
+ {
137
+ // if product, then parent is already instance
138
+ if (componentType == PRODUCT()) {
139
+ _checkAndGetRegistry(registryAddress, parentNftId, INSTANCE());
140
+ return parentNftId;
141
+ }
142
+
143
+ // if not product parent is product, and parent of product is instance
144
+ IRegistry registry = _checkAndGetRegistry(registryAddress, parentNftId, PRODUCT());
145
+ return registry.getObjectInfo(parentNftId).parentNftId;
146
+ }
147
+
148
+ /// @dev checks the and gets registry.
149
+ /// validates registry using a provided nft id and expected object type.
150
+ function _checkAndGetRegistry(
151
+ address registryAddress,
152
+ NftId objectNftId,
153
+ ObjectType requiredType
154
+ )
155
+ internal
156
+ view
157
+ returns (IRegistry registry)
158
+ {
159
+ registry = IRegistry(registryAddress);
160
+ IRegistry.ObjectInfo memory info = registry.getObjectInfo(objectNftId);
161
+
162
+ if (info.objectType != requiredType) {
163
+ revert ErrorInstanceLinkedComponentTypeMismatch(requiredType, info.objectType);
164
+ }
125
165
  }
126
166
 
167
+
127
168
  /// @dev for instance linked components the wallet address stored in the instance store.
128
169
  /// updating needs to go throug component service
129
170
  function _setWallet(address newWallet) internal virtual override onlyOwner {
@@ -132,7 +173,7 @@ abstract contract InstanceLinkedComponent is
132
173
 
133
174
 
134
175
  function _getComponentInfo() internal virtual override view returns (IComponents.ComponentInfo memory info) {
135
- NftId componentNftId = getRegistry().getNftId(address(this));
176
+ NftId componentNftId = getRegistry().getNftIdForAddress(address(this));
136
177
 
137
178
  // if registered, attempt to return component info via instance reader
138
179
  if (componentNftId.gtz()) {
@@ -166,7 +207,7 @@ abstract contract InstanceLinkedComponent is
166
207
  /// @dev returns the service address for the specified domain
167
208
  /// gets address via lookup from registry using the major version form the linked instance
168
209
  function _getServiceAddress(ObjectType domain) internal view returns (address service) {
169
- VersionPart majorVersion = _getInstanceLinkedComponentStorage()._instance.getMajorVersion();
170
- return getRegistry().getServiceAddress(domain, majorVersion);
210
+ VersionPart release = _getInstanceLinkedComponentStorage()._instance.getRelease();
211
+ return getRegistry().getServiceAddress(domain, release);
171
212
  }
172
213
  }
@@ -94,7 +94,7 @@ abstract contract KeyValueStore is
94
94
 
95
95
  // update state
96
96
  if(state != KEEP_STATE()) {
97
- checkTransition(metadata.objectType, stateOld, state);
97
+ checkTransition(stateOld, metadata.objectType, stateOld, state);
98
98
  metadata.state = state;
99
99
 
100
100
  // solhint-disable-next-line avoid-tx-origin
@@ -49,8 +49,9 @@ abstract contract Lifecycle is
49
49
  }
50
50
 
51
51
  function checkTransition(
52
+ StateId stateId,
52
53
  ObjectType objectType,
53
- StateId fromId,
54
+ StateId expectedFromId,
54
55
  StateId toId
55
56
  )
56
57
  public
@@ -58,12 +59,22 @@ abstract contract Lifecycle is
58
59
  {
59
60
  // revert if no life cycle support
60
61
  if (_initialState[objectType].eqz()) {
61
- revert ErrorNoLifecycle(objectType);
62
+ revert ErrorNoLifecycle(address(this), objectType);
63
+ }
64
+
65
+ // revert if current state is not expected `from` state
66
+ if(stateId != expectedFromId) {
67
+ revert ErrorFromStateMissmatch(address(this), objectType, stateId, expectedFromId);
62
68
  }
63
69
 
64
70
  // enforce valid state transition
65
- if (!_isValidTransition[objectType][fromId][toId]) {
66
- revert ErrorInvalidStateTransition(objectType, fromId, toId);
71
+ if (!_isValidTransition[objectType][stateId][toId]) {
72
+ revert ErrorInvalidStateTransition(
73
+ address(this),
74
+ objectType,
75
+ stateId,
76
+ toId
77
+ );
67
78
  }
68
79
  }
69
80
 
@@ -4,6 +4,7 @@ pragma solidity ^0.8.20;
4
4
  import {InitializableERC165} from "./InitializableERC165.sol";
5
5
  import {INftOwnable} from "./INftOwnable.sol";
6
6
  import {NftId} from "../type/NftId.sol";
7
+ import {ObjectType} from "../type/ObjectType.sol";
7
8
  import {RegistryLinked} from "./RegistryLinked.sol";
8
9
 
9
10
  contract NftOwnable is
@@ -27,19 +28,37 @@ contract NftOwnable is
27
28
  _;
28
29
  }
29
30
 
31
+ modifier onlyNftOwner(NftId nftId) {
32
+ if(!getRegistry().isOwnerOf(nftId, msg.sender)) {
33
+ revert ErrorNftOwnableNotOwner(msg.sender);
34
+ }
35
+ _;
36
+ }
37
+
38
+ modifier onlyNftOfType(NftId nftId, ObjectType expectedObjectType) {
39
+ _checkNftType(nftId, expectedObjectType);
40
+ _;
41
+ }
42
+
43
+ function _checkNftType(NftId nftId, ObjectType expectedObjectType) internal view {
44
+ if(!getRegistry().isObjectType(nftId, expectedObjectType)) {
45
+ revert ErrorNftOwnableInvalidType(nftId, expectedObjectType);
46
+ }
47
+ }
48
+
30
49
 
31
50
  /// @dev initialization for upgradable contracts
32
51
  // used in _initializeRegisterable
33
- function initializeNftOwnable(
34
- address initialOwner,
35
- address registryAddress
52
+ function _initializeNftOwnable(
53
+ address registry,
54
+ address initialOwner
36
55
  )
37
- public
56
+ internal
38
57
  virtual
39
58
  onlyInitializing()
40
59
  {
41
- initializeRegistryLinked(registryAddress);
42
- initializeERC165();
60
+ _initializeRegistryLinked(registry);
61
+ _initializeERC165();
43
62
 
44
63
  if(initialOwner == address(0)) {
45
64
  revert ErrorNftOwnableInitialOwnerZero();
@@ -93,13 +112,14 @@ contract NftOwnable is
93
112
  revert ErrorNftOwnableContractNotRegistered(nftOwnableAddress);
94
113
  }
95
114
 
96
- $._nftId = getRegistry().getNftId(nftOwnableAddress);
115
+ $._nftId = getRegistry().getNftIdForAddress(nftOwnableAddress);
97
116
 
98
117
  return $._nftId;
99
118
  }
100
119
 
101
120
 
102
121
  function _getNftOwnableStorage() private pure returns (NftOwnableStorage storage $) {
122
+ // solhint-disable-next-line no-inline-assembly
103
123
  assembly {
104
124
  $.slot := NFT_OWNABLE_STORAGE_LOCATION_V1
105
125
  }