@etherisc/gif-next 0.0.2-e8ea5fe-337 → 0.0.2-e91c6be-472

Sign up to get free protection for your applications and to get access to all the features.
Files changed (436) hide show
  1. package/README.md +28 -7
  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 +162 -327
  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 +102 -243
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +180 -198
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +131 -107
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +92 -81
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +52 -0
  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 +1429 -0
  36. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  37. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +502 -0
  38. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  39. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1979 -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 +1430 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1177 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1606 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2281 -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 +31 -86
  58. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/Instance.sol/Instance.json +72 -123
  60. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +165 -138
  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 +286 -83
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +96 -245
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  69. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +99 -87
  70. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  71. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +197 -116
  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/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  89. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +121 -286
  90. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  91. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
  92. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  93. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  94. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +87 -76
  95. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  96. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
  97. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  98. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +97 -238
  99. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  100. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +107 -159
  101. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  102. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +99 -83
  103. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  104. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +115 -256
  105. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  106. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +114 -22
  107. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  108. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +203 -208
  109. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +135 -107
  111. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  112. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +72 -15
  113. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  114. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +107 -107
  115. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  116. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +272 -185
  117. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  118. package/artifacts/contracts/pool/Pool.sol/Pool.json +115 -267
  119. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  120. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +420 -366
  121. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +128 -88
  123. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  124. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +87 -144
  125. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +96 -80
  127. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  128. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +156 -251
  129. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  130. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
  131. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  132. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +202 -200
  133. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  134. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +136 -104
  135. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  136. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +29 -0
  137. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  138. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +64 -8
  139. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  140. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +147 -1
  141. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  142. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +80 -51
  143. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  144. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +146 -89
  145. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  146. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +29 -0
  147. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  148. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +267 -167
  149. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  150. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +127 -91
  151. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  152. package/artifacts/contracts/product/PricingService.sol/PricingService.json +170 -219
  153. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  154. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +111 -91
  155. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  156. package/artifacts/contracts/product/Product.sol/Product.json +154 -249
  157. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  158. package/artifacts/contracts/product/RiskService.sol/RiskService.json +81 -138
  159. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  160. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +93 -77
  161. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  162. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  163. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  164. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +309 -33
  165. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  166. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +114 -35
  167. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  168. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  169. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  170. package/artifacts/contracts/registry/Registry.sol/Registry.json +515 -94
  171. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  172. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +296 -143
  173. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  174. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +94 -284
  175. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  176. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +91 -75
  177. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  178. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
  179. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  180. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +131 -223
  181. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  182. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
  183. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  184. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  185. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  186. package/artifacts/contracts/shared/Component.sol/Component.json +76 -213
  187. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  188. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +426 -263
  189. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  190. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +140 -110
  191. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  192. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +47 -112
  193. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  194. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +111 -0
  195. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  196. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +66 -51
  197. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  198. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +388 -19
  199. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  200. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +87 -76
  201. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  202. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
  203. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  204. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  205. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  206. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  207. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  208. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  209. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  210. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
  211. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  212. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  213. package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
  214. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  215. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
  216. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  217. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +97 -238
  218. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  219. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
  220. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  221. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  222. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  223. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  224. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  225. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
  226. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  227. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  228. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  229. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +58 -89
  230. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  231. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  232. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  233. package/artifacts/contracts/shared/Service.sol/Service.json +47 -112
  234. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  235. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +388 -35
  236. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  237. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +395 -0
  238. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  239. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +88 -24
  240. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  241. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +84 -87
  242. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  243. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
  244. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  245. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +2 -2
  246. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  247. package/artifacts/contracts/staking/Staking.sol/Staking.json +152 -311
  248. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  249. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  250. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  251. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +112 -97
  252. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  253. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +7 -12
  254. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  255. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +87 -165
  256. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  257. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +95 -79
  258. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  259. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +144 -103
  260. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  261. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
  262. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  263. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  264. package/artifacts/contracts/type/Amount.sol/AmountLib.json +32 -8
  265. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  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/Selector.sol/SelectorLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  293. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  295. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  297. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
  299. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  300. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +15 -2
  301. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  302. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  303. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  304. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  305. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +71 -70
  306. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  307. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  308. package/contracts/authorization/AccessAdmin.sol +64 -59
  309. package/contracts/authorization/Authorization.sol +111 -39
  310. package/contracts/authorization/IAccess.sol +1 -0
  311. package/contracts/authorization/IAccessAdmin.sol +4 -3
  312. package/contracts/authorization/IAuthorization.sol +13 -7
  313. package/contracts/authorization/IServiceAuthorization.sol +3 -1
  314. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  315. package/contracts/authorization/ServiceAuthorization.sol +26 -10
  316. package/contracts/distribution/BasicDistribution.sol +4 -3
  317. package/contracts/distribution/BasicDistributionAuthorization.sol +1 -1
  318. package/contracts/distribution/Distribution.sol +12 -23
  319. package/contracts/distribution/DistributionService.sol +78 -60
  320. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  321. package/contracts/distribution/IDistributionComponent.sol +1 -1
  322. package/contracts/distribution/IDistributionService.sol +5 -6
  323. package/contracts/examples/fire/DamageLevel.sol +59 -0
  324. package/contracts/examples/fire/FirePool.sol +86 -0
  325. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  326. package/contracts/examples/fire/FireProduct.sol +431 -0
  327. package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
  328. package/contracts/examples/fire/FireUSD.sol +26 -0
  329. package/contracts/examples/unpermissioned/SimpleDistribution.sol +58 -0
  330. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  331. package/contracts/examples/unpermissioned/SimplePool.sol +108 -0
  332. package/contracts/examples/unpermissioned/SimpleProduct.sol +345 -0
  333. package/contracts/instance/IInstance.sol +4 -1
  334. package/contracts/instance/IInstanceService.sol +2 -23
  335. package/contracts/instance/Instance.sol +22 -19
  336. package/contracts/instance/InstanceAdmin.sol +23 -31
  337. package/contracts/instance/InstanceAuthorizationV3.sol +9 -19
  338. package/contracts/instance/InstanceReader.sol +83 -18
  339. package/contracts/instance/InstanceService.sol +35 -88
  340. package/contracts/instance/InstanceServiceManager.sol +6 -7
  341. package/contracts/instance/module/IComponents.sol +10 -6
  342. package/contracts/instance/module/IPolicy.sol +4 -3
  343. package/contracts/oracle/BasicOracle.sol +0 -1
  344. package/contracts/oracle/IOracleService.sol +2 -1
  345. package/contracts/oracle/Oracle.sol +5 -16
  346. package/contracts/oracle/OracleService.sol +56 -43
  347. package/contracts/oracle/OracleServiceManager.sol +6 -6
  348. package/contracts/pool/BasicPool.sol +33 -24
  349. package/contracts/pool/BasicPoolAuthorization.sol +12 -2
  350. package/contracts/pool/BundleService.sol +96 -49
  351. package/contracts/pool/BundleServiceManager.sol +6 -6
  352. package/contracts/pool/IBundleService.sol +11 -5
  353. package/contracts/pool/IPoolComponent.sol +19 -15
  354. package/contracts/pool/IPoolService.sol +42 -30
  355. package/contracts/pool/Pool.sol +142 -123
  356. package/contracts/pool/PoolService.sol +254 -143
  357. package/contracts/pool/PoolServiceManager.sol +4 -4
  358. package/contracts/product/ApplicationService.sol +20 -9
  359. package/contracts/product/ApplicationServiceManager.sol +4 -4
  360. package/contracts/product/BasicProduct.sol +8 -12
  361. package/contracts/product/BasicProductAuthorization.sol +0 -1
  362. package/contracts/product/ClaimService.sol +235 -108
  363. package/contracts/product/ClaimServiceManager.sol +4 -4
  364. package/contracts/product/IClaimService.sol +3 -2
  365. package/contracts/product/IPolicyService.sol +13 -4
  366. package/contracts/product/IPricingService.sol +9 -9
  367. package/contracts/product/IProductComponent.sol +23 -3
  368. package/contracts/product/PolicyService.sol +169 -47
  369. package/contracts/product/PolicyServiceManager.sol +4 -4
  370. package/contracts/product/PricingService.sol +12 -13
  371. package/contracts/product/PricingServiceManager.sol +3 -3
  372. package/contracts/product/Product.sol +77 -70
  373. package/contracts/product/RiskService.sol +4 -5
  374. package/contracts/product/RiskServiceManager.sol +4 -4
  375. package/contracts/registry/ChainNft.sol +68 -38
  376. package/contracts/registry/IRegistry.sol +56 -17
  377. package/contracts/registry/IRegistryService.sol +5 -12
  378. package/contracts/registry/ITransferInterceptor.sol +1 -2
  379. package/contracts/registry/Registry.sol +349 -200
  380. package/contracts/registry/RegistryAdmin.sol +146 -58
  381. package/contracts/registry/RegistryService.sol +35 -46
  382. package/contracts/registry/RegistryServiceManager.sol +2 -2
  383. package/contracts/registry/ReleaseLifecycle.sol +6 -3
  384. package/contracts/registry/ReleaseRegistry.sol +204 -204
  385. package/contracts/registry/ServiceAuthorizationV3.sol +24 -20
  386. package/contracts/shared/Component.sol +62 -101
  387. package/contracts/shared/ComponentService.sol +291 -153
  388. package/contracts/shared/ComponentServiceManager.sol +8 -5
  389. package/contracts/shared/ComponentVerifyingService.sol +27 -16
  390. package/contracts/shared/ContractLib.sol +54 -0
  391. package/contracts/shared/IComponent.sol +10 -13
  392. package/contracts/shared/IComponentService.sol +38 -16
  393. package/contracts/shared/IInstanceLinkedComponent.sol +3 -11
  394. package/contracts/shared/ILifecycle.sol +3 -1
  395. package/contracts/shared/INftOwnable.sol +2 -0
  396. package/contracts/shared/IPolicyHolder.sol +12 -22
  397. package/contracts/shared/IRegisterable.sol +11 -0
  398. package/contracts/shared/InitializableERC165.sol +2 -2
  399. package/contracts/shared/InstanceLinkedComponent.sol +70 -37
  400. package/contracts/shared/KeyValueStore.sol +1 -1
  401. package/contracts/shared/Lifecycle.sol +15 -4
  402. package/contracts/shared/NftOwnable.sol +26 -6
  403. package/contracts/shared/PolicyHolder.sol +15 -52
  404. package/contracts/shared/Registerable.sol +19 -11
  405. package/contracts/shared/RegistryLinked.sol +9 -14
  406. package/contracts/shared/Service.sol +20 -18
  407. package/contracts/shared/TokenHandler.sol +324 -66
  408. package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
  409. package/contracts/staking/IStaking.sol +9 -4
  410. package/contracts/staking/IStakingService.sol +0 -3
  411. package/contracts/staking/Staking.sol +34 -27
  412. package/contracts/staking/StakingManager.sol +8 -6
  413. package/contracts/staking/StakingReader.sol +12 -5
  414. package/contracts/staking/StakingService.sol +71 -25
  415. package/contracts/staking/StakingServiceManager.sol +2 -2
  416. package/contracts/type/Amount.sol +15 -0
  417. package/contracts/type/ClaimId.sol +6 -1
  418. package/contracts/type/NftId.sol +1 -0
  419. package/contracts/type/ObjectType.sol +1 -0
  420. package/contracts/type/PayoutId.sol +10 -10
  421. package/contracts/type/RiskId.sol +16 -2
  422. package/contracts/type/RoleId.sol +0 -12
  423. package/contracts/type/StateId.sol +14 -1
  424. package/contracts/type/UFixed.sol +4 -0
  425. package/contracts/upgradeability/ProxyManager.sol +68 -34
  426. package/contracts/upgradeability/Versionable.sol +2 -2
  427. package/package.json +4 -3
  428. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  429. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  430. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  431. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  432. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  433. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  434. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  435. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  436. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -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
34
  componentNftId = getRegistry().getNftIdForAddress(msg.sender);
36
- (componentInfo, instance) = _getAndVerifyComponentInfo(
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,54 @@
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
+ import {IRegistry} from "../registry/IRegistry.sol";
9
+
10
+ library ContractLib {
11
+
12
+ function isPolicyHolder(address target) external view returns (bool) {
13
+ return ERC165Checker.supportsInterface(target, type(IPolicyHolder).interfaceId);
14
+ }
15
+
16
+
17
+ function isAccessManaged(address target) external view returns (bool) {
18
+ if (!isContract(target)) {
19
+ return false;
20
+ }
21
+
22
+ (bool success, ) = target.staticcall(
23
+ abi.encodeWithSelector(
24
+ IAccessManaged.authority.selector));
25
+
26
+ return success;
27
+ }
28
+
29
+
30
+ function isRegistry(address registry) public view returns (bool) {
31
+ if (!isContract(registry)) {
32
+ return false;
33
+ }
34
+
35
+ return supportsInterface(registry, type(IRegistry).interfaceId);
36
+ }
37
+
38
+
39
+ function isContract(address target) public view returns (bool) {
40
+ if (target == address(0)) {
41
+ return false;
42
+ }
43
+
44
+ uint256 size;
45
+ assembly {
46
+ size := extcodesize(target)
47
+ }
48
+ return size > 0;
49
+ }
50
+
51
+ function supportsInterface(address target, bytes4 interfaceId) public view returns (bool) {
52
+ return ERC165Checker.supportsInterface(target, interfaceId);
53
+ }
54
+ }
@@ -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
30
  error ErrorComponentWalletNotComponent();
27
31
 
28
32
  event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
29
33
  event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
30
- event LogComponentTokenHandlerApproved(address token, Amount limit);
31
-
32
- /// @dev approves token hanlder to spend up to the specified amount of tokens
33
- /// reverts if component wallet is not component itself
34
- /// only component owner (nft holder) is authorizes to call this function
35
- function approveTokenHandler(Amount spendingLimitAmount) external;
34
+ event LogComponentTokenHandlerApproved(address tokenHandler, address token, Amount limit, bool isMaxAmount);
36
35
 
37
- /// @dev sets the wallet address for the component.
38
- /// if the current wallet has tokens, these will be transferred.
39
- /// if the new wallet address is externally owned, an approval from the
40
- /// owner of the external wallet to the tokenhandler of the component that
41
- /// covers the current component balance 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,19 +1,39 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
4
5
 
5
6
  import {Amount} from "../type/Amount.sol";
6
7
  import {Fee} from "../type/Fee.sol";
7
8
  import {InstanceStore} from "../instance/InstanceStore.sol";
8
9
  import {IService} from "../shared/IService.sol";
9
10
  import {NftId} from "../type/NftId.sol";
11
+ import {ObjectType} from "../type/ObjectType.sol";
10
12
  import {UFixed} from "../type/UFixed.sol";
13
+ import {VersionPart} from "../type/Version.sol";
11
14
 
12
15
  /// @dev component base class
13
16
  /// component examples are staking, product, distribution, pool and oracle
14
17
  interface IComponentService is
15
18
  IService
16
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
+
17
37
  error ErrorComponentServiceNewWalletAddressZero();
18
38
  error ErrorComponentServiceWalletAddressZero();
19
39
  error ErrorComponentServiceWalletAddressIsSameAsCurrent();
@@ -22,7 +42,9 @@ interface IComponentService is
22
42
  error ErrorComponentServiceWithdrawAmountExceedsLimit(Amount withdrawnAmount, Amount withdrawLimit);
23
43
  error ErrorComponentServiceWalletAllowanceTooSmall(address wallet, address spender, uint256 allowance, uint256 amount);
24
44
 
45
+ event LogComponentServiceRegistered(NftId instanceNftId, NftId componentNftId, ObjectType componentType, address component, address token, address initialOwner);
25
46
  event LogComponentServiceWalletAddressChanged(NftId componentNftId, address currentWallet, address newWallet);
47
+ event LogComponentServiceWalletTokensTransferred(NftId componentNftId, address currentWallet, address newWallet, uint256 currentBalance);
26
48
  event LogComponentServiceComponentFeesWithdrawn(NftId componentNftId, address recipient, address token, Amount withdrawnAmount);
27
49
  event LogComponentServiceProductFeesUpdated(NftId productNftId);
28
50
  event LogComponentServiceDistributionFeesUpdated(NftId distributionNftId);
@@ -38,13 +60,21 @@ interface IComponentService is
38
60
 
39
61
  //-------- component ----------------------------------------------------//
40
62
 
41
- /// @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
42
72
  function setWallet(address newWallet) external;
43
73
 
44
- /// @dev locks the component associated with the caller
74
+ /// @dev Locks the component associated with the caller
45
75
  function lock() external;
46
76
 
47
- /// @dev unlocks the component associated with the caller
77
+ /// @dev Unlocks the component associated with the caller
48
78
  function unlock() external;
49
79
 
50
80
  /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
@@ -52,10 +82,13 @@ interface IComponentService is
52
82
  /// @return withdrawnAmount the amount that was actually withdrawn
53
83
  function withdrawFees(Amount withdrawAmount) external returns (Amount withdrawnAmount);
54
84
 
85
+ /// @dev Registers the provided component with the product (sender)
86
+ function registerComponent(address component) external returns (NftId componentNftId);
87
+
55
88
  //-------- product ------------------------------------------------------//
56
89
 
57
- /// @dev registers the sending component as a product component
58
- function registerProduct() external;
90
+ /// @dev Registers the specified product component for the instance (sender)
91
+ function registerProduct(address product) external returns (NftId productNftId);
59
92
 
60
93
  function setProductFees(
61
94
  Fee memory productFee, // product fee on net premium
@@ -67,9 +100,6 @@ interface IComponentService is
67
100
 
68
101
  //-------- distribution -------------------------------------------------//
69
102
 
70
- /// @dev registers the sending component as a distribution component
71
- function registerDistribution() external;
72
-
73
103
  function setDistributionFees(
74
104
  Fee memory distributionFee, // distribution fee for sales that do not include commissions
75
105
  Fee memory minDistributionOwnerFee // min fee required by distribution owner (not including commissions for distributors)
@@ -82,16 +112,8 @@ interface IComponentService is
82
112
  function increaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
83
113
  function decreaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
84
114
 
85
- //-------- oracle -------------------------------------------------------//
86
-
87
- /// @dev registers the sending component as an oracle component
88
- function registerOracle() external;
89
-
90
115
  //-------- pool ---------------------------------------------------------//
91
116
 
92
- /// @dev registers the sending component as a pool component
93
- function registerPool() external;
94
-
95
117
  function setPoolFees(
96
118
  Fee memory poolFee, // pool fee on net premium
97
119
  Fee memory stakingFee, // pool fee on staked capital from investor
@@ -9,19 +9,15 @@ import {IComponent} from "../shared/IComponent.sol";
9
9
  import {IAuthorization} from "../authorization/IAuthorization.sol";
10
10
  import {IInstance} from "../instance/IInstance.sol";
11
11
  import {NftId} from "../type/NftId.sol";
12
+ import {ObjectType} from "../type/ObjectType.sol";
12
13
 
13
14
  /// @dev component base class
14
15
  /// component examples are product, distribution, pool and oracle
15
16
  interface IInstanceLinkedComponent is
16
17
  IComponent
17
18
  {
18
- error ErrorComponentNotInstance(NftId instanceNftId);
19
- error ErrorComponentProductNftAlreadySet();
20
-
21
- /// @dev registers this component with the registry and instance.
22
- /// a component may only be linked once
23
- /// only initial component owner (nft holder) is authorizes to call this function
24
- function register() external;
19
+ error ErrorInstanceLinkedComponentTypeMismatch(ObjectType requiredType, ObjectType objectType);
20
+ error ErrorInstanceLinkedComponentNotProduct(NftId nftId, ObjectType objectType);
25
21
 
26
22
  /// @dev locks component to disable functions that may change state related to this component, the only exception is function "unlock"
27
23
  /// only component owner (nft holder) is authorizes to call this function
@@ -42,8 +38,4 @@ interface IInstanceLinkedComponent is
42
38
  /// @dev returns the initial component authorization specification.
43
39
  function getAuthorization() external view returns (IAuthorization authorization);
44
40
 
45
- /// @dev defines the product to which this component is linked to
46
- /// this is only relevant for pool and distribution components
47
- function getProductNftId() external view returns (NftId productNftId);
48
-
49
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
125
  }
126
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
+ }
165
+ }
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 {
@@ -140,7 +181,7 @@ abstract contract InstanceLinkedComponent is
140
181
  info = _getInstanceReader().getComponentInfo(getNftId());
141
182
 
142
183
  // check if also registered with instance
143
- if (info.wallet != address(0)) {
184
+ if (address(info.tokenHandler) != address(0)) {
144
185
  return info;
145
186
  }
146
187
  }
@@ -161,12 +202,4 @@ abstract contract InstanceLinkedComponent is
161
202
  {
162
203
  return _getInstanceLinkedComponentStorage()._componentService.withdrawFees(amount);
163
204
  }
164
-
165
-
166
- /// @dev returns the service address for the specified domain
167
- /// gets address via lookup from registry using the major version form the linked instance
168
- function _getServiceAddress(ObjectType domain) internal view returns (address service) {
169
- VersionPart majorVersion = _getInstanceLinkedComponentStorage()._instance.getMajorVersion();
170
- return getRegistry().getServiceAddress(domain, majorVersion);
171
- }
172
205
  }