@etherisc/gif-next 0.0.2-8fb3945-498 → 0.0.2-906d113-035

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 (447) hide show
  1. package/README.md +1 -1
  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 +151 -249
  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 -213
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +174 -237
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +99 -111
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +78 -66
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +78 -31
  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 +446 -81
  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 +335 -126
  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 +132 -230
  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 +73 -61
  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 +86 -208
  99. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  100. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +91 -159
  101. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  102. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +75 -83
  103. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  104. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +109 -216
  105. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  106. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +82 -22
  107. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  108. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +184 -185
  109. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +120 -104
  111. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  112. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +53 -0
  113. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  114. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +98 -58
  115. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  116. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +232 -131
  117. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  118. package/artifacts/contracts/pool/Pool.sol/Pool.json +109 -203
  119. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  120. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +328 -292
  121. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +102 -94
  123. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  124. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +71 -152
  125. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +72 -84
  127. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  128. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +143 -224
  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 +288 -188
  133. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  134. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +119 -103
  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 +161 -7
  139. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  140. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +141 -16
  141. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  142. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +114 -85
  143. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  144. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +131 -78
  145. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  146. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +31 -2
  147. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  148. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +248 -222
  149. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  150. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +110 -110
  151. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  152. package/artifacts/contracts/product/PricingService.sol/PricingService.json +199 -309
  153. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  154. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +96 -120
  155. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  156. package/artifacts/contracts/product/Product.sol/Product.json +143 -224
  157. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  158. package/artifacts/contracts/product/RiskService.sol/RiskService.json +622 -0
  159. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  160. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +694 -0
  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 +286 -34
  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 +492 -95
  171. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  172. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +283 -143
  173. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  174. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +78 -284
  175. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  176. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +67 -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 +129 -221
  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 +68 -175
  187. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  188. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +355 -339
  189. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  190. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +122 -148
  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 +92 -0
  195. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  196. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +55 -28
  197. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  198. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +321 -19
  199. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  200. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +73 -61
  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 +86 -208
  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 +149 -49
  236. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  237. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  238. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  239. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +82 -29
  240. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  241. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
  242. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  243. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +83 -30
  244. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  245. package/artifacts/contracts/staking/Staking.sol/Staking.json +173 -298
  246. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  247. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  248. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  249. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +103 -124
  250. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  251. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
  252. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  253. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +71 -165
  254. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  255. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +71 -79
  256. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  257. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +169 -128
  258. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  259. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +54 -23
  260. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  261. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  262. package/artifacts/contracts/type/Amount.sol/AmountLib.json +32 -8
  263. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  264. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  265. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  266. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  268. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
  270. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  271. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  272. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  274. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  275. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  276. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  278. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  280. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  282. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  284. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  286. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  288. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  290. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  291. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  293. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  294. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  295. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
  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 +55 -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 -40
  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 +2 -1
  317. package/contracts/distribution/Distribution.sol +7 -17
  318. package/contracts/distribution/DistributionService.sol +80 -47
  319. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  320. package/contracts/distribution/IDistributionComponent.sol +1 -1
  321. package/contracts/distribution/IDistributionService.sol +8 -2
  322. package/contracts/examples/fire/DamageLevel.sol +59 -0
  323. package/contracts/examples/fire/FirePool.sol +75 -0
  324. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  325. package/contracts/examples/fire/FireProduct.sol +418 -0
  326. package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
  327. package/contracts/examples/fire/FireUSD.sol +26 -0
  328. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  329. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  330. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  331. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  332. package/contracts/instance/IInstance.sol +10 -30
  333. package/contracts/instance/IInstanceService.sol +0 -20
  334. package/contracts/instance/Instance.sol +29 -51
  335. package/contracts/instance/InstanceAdmin.sol +42 -31
  336. package/contracts/instance/InstanceAuthorizationV3.sol +11 -21
  337. package/contracts/instance/InstanceReader.sol +106 -19
  338. package/contracts/instance/InstanceService.sol +25 -81
  339. package/contracts/instance/InstanceServiceManager.sol +6 -7
  340. package/contracts/instance/InstanceStore.sol +11 -1
  341. package/contracts/instance/base/ObjectLifecycle.sol +7 -1
  342. package/contracts/instance/module/IComponents.sol +10 -5
  343. package/contracts/instance/module/IPolicy.sol +23 -23
  344. package/contracts/oracle/BasicOracle.sol +0 -1
  345. package/contracts/oracle/IOracleService.sol +2 -1
  346. package/contracts/oracle/Oracle.sol +6 -16
  347. package/contracts/oracle/OracleService.sol +47 -34
  348. package/contracts/oracle/OracleServiceManager.sol +6 -6
  349. package/contracts/pool/BasicPool.sol +14 -26
  350. package/contracts/pool/BasicPoolAuthorization.sol +0 -1
  351. package/contracts/pool/BundleService.sol +78 -34
  352. package/contracts/pool/BundleServiceManager.sol +6 -6
  353. package/contracts/pool/IBundleService.sol +10 -0
  354. package/contracts/pool/IPoolComponent.sol +18 -8
  355. package/contracts/pool/IPoolService.sol +49 -29
  356. package/contracts/pool/Pool.sol +53 -46
  357. package/contracts/pool/PoolService.sol +140 -124
  358. package/contracts/pool/PoolServiceManager.sol +4 -4
  359. package/contracts/product/ApplicationService.sol +13 -12
  360. package/contracts/product/ApplicationServiceManager.sol +4 -4
  361. package/contracts/product/BasicProduct.sol +7 -6
  362. package/contracts/product/BasicProductAuthorization.sol +0 -1
  363. package/contracts/product/ClaimService.sol +268 -93
  364. package/contracts/product/ClaimServiceManager.sol +4 -4
  365. package/contracts/product/IClaimService.sol +30 -7
  366. package/contracts/product/IPolicyService.sol +16 -20
  367. package/contracts/product/IPricingService.sol +10 -10
  368. package/contracts/product/IProductComponent.sol +23 -4
  369. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -2
  370. package/contracts/product/PolicyService.sol +198 -101
  371. package/contracts/product/PolicyServiceManager.sol +4 -4
  372. package/contracts/product/PricingService.sol +45 -52
  373. package/contracts/product/PricingServiceManager.sol +3 -3
  374. package/contracts/product/Product.sol +108 -66
  375. package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
  376. package/contracts/product/RiskServiceManager.sol +39 -0
  377. package/contracts/registry/ChainNft.sol +68 -38
  378. package/contracts/registry/IRegistry.sol +55 -18
  379. package/contracts/registry/IRegistryService.sol +5 -12
  380. package/contracts/registry/ITransferInterceptor.sol +1 -2
  381. package/contracts/registry/Registry.sol +342 -201
  382. package/contracts/registry/RegistryAdmin.sol +134 -51
  383. package/contracts/registry/RegistryService.sol +35 -46
  384. package/contracts/registry/RegistryServiceManager.sol +2 -2
  385. package/contracts/registry/ReleaseLifecycle.sol +6 -3
  386. package/contracts/registry/ReleaseRegistry.sol +204 -188
  387. package/contracts/registry/ServiceAuthorizationV3.sol +16 -22
  388. package/contracts/shared/Component.sol +30 -33
  389. package/contracts/shared/ComponentService.sol +233 -137
  390. package/contracts/shared/ComponentServiceManager.sol +8 -5
  391. package/contracts/shared/ComponentVerifyingService.sol +23 -14
  392. package/contracts/shared/ContractLib.sol +38 -0
  393. package/contracts/shared/IComponent.sol +6 -2
  394. package/contracts/shared/IComponentService.sol +25 -13
  395. package/contracts/shared/IInstanceLinkedComponent.sol +2 -17
  396. package/contracts/shared/ILifecycle.sol +3 -1
  397. package/contracts/shared/INftOwnable.sol +2 -0
  398. package/contracts/shared/IPolicyHolder.sol +12 -22
  399. package/contracts/shared/IRegisterable.sol +11 -0
  400. package/contracts/shared/InitializableERC165.sol +2 -2
  401. package/contracts/shared/InstanceLinkedComponent.sol +72 -31
  402. package/contracts/shared/KeyValueStore.sol +1 -1
  403. package/contracts/shared/Lifecycle.sol +15 -4
  404. package/contracts/shared/NftOwnable.sol +23 -7
  405. package/contracts/shared/PolicyHolder.sol +15 -52
  406. package/contracts/shared/Registerable.sol +19 -9
  407. package/contracts/shared/RegistryLinked.sol +3 -2
  408. package/contracts/shared/Service.sol +20 -18
  409. package/contracts/shared/TokenHandler.sol +24 -16
  410. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  411. package/contracts/staking/IStaking.sol +2 -1
  412. package/contracts/staking/IStakingService.sol +0 -3
  413. package/contracts/staking/StakeManagerLib.sol +18 -0
  414. package/contracts/staking/Staking.sol +11 -10
  415. package/contracts/staking/StakingManager.sol +8 -6
  416. package/contracts/staking/StakingReader.sol +12 -5
  417. package/contracts/staking/StakingService.sol +3 -17
  418. package/contracts/staking/StakingServiceManager.sol +2 -2
  419. package/contracts/staking/TargetManagerLib.sol +7 -3
  420. package/contracts/type/Amount.sol +15 -0
  421. package/contracts/type/ClaimId.sol +6 -1
  422. package/contracts/type/NftId.sol +1 -0
  423. package/contracts/type/ObjectType.sol +16 -11
  424. package/contracts/type/PayoutId.sol +10 -10
  425. package/contracts/type/RiskId.sol +15 -1
  426. package/contracts/type/RoleId.sol +0 -12
  427. package/contracts/type/Seconds.sol +8 -0
  428. package/contracts/type/StateId.sol +15 -1
  429. package/contracts/type/UFixed.sol +4 -0
  430. package/contracts/upgradeability/ProxyManager.sol +68 -34
  431. package/contracts/upgradeability/Versionable.sol +2 -2
  432. package/package.json +2 -1
  433. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  434. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  435. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  436. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  437. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  438. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  439. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  440. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  441. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  442. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  443. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  444. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  445. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  446. package/contracts/product/ProductServiceManager.sol +0 -39
  447. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -1,16 +1,21 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
4
6
  import {Amount, AmountLib} from "../type/Amount.sol";
5
7
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
8
+ import {ContractLib} from "../shared/ContractLib.sol";
6
9
  import {Fee, FeeLib} from "../type/Fee.sol";
7
10
  import {IComponents} from "../instance/module/IComponents.sol";
8
11
  import {IComponentService} from "./IComponentService.sol";
9
12
  import {IInstance} from "../instance/IInstance.sol";
10
13
  import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
14
+ import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
11
15
  import {InstanceReader} from "../instance/InstanceReader.sol";
12
16
  import {InstanceStore} from "../instance/InstanceStore.sol";
13
17
  import {IInstanceService} from "../instance/IInstanceService.sol";
18
+ import {IRegisterable} from "../shared/IRegisterable.sol";
14
19
  import {IPoolComponent} from "../pool/IPoolComponent.sol";
15
20
  import {IProductComponent} from "../product/IProductComponent.sol";
16
21
  import {IRegistry} from "../registry/IRegistry.sol";
@@ -18,21 +23,13 @@ import {IRegistryService} from "../registry/IRegistryService.sol";
18
23
  import {KEEP_STATE} from "../type/StateId.sol";
19
24
  import {NftId} from "../type/NftId.sol";
20
25
  import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
21
- import {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE} from "../type/RoleId.sol";
22
- import {TokenHandler} from "./TokenHandler.sol";
26
+ import {RoleId} from "../type/RoleId.sol";
27
+ import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
23
28
 
24
29
  contract ComponentService is
25
30
  ComponentVerifyingService,
26
31
  IComponentService
27
32
  {
28
- error ErrorComponentServiceAlreadyRegistered(address component);
29
- error ErrorComponentServiceNotComponent(address component);
30
- error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
31
- error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
32
- error ErrorComponentServiceExpectedRoleMissing(NftId instanceNftId, RoleId requiredRole, address sender);
33
- error ErrorComponentServiceComponentLocked(address component);
34
- error ErrorComponentServiceSenderNotService(address sender);
35
- error ErrorComponentServiceComponentTypeInvalid(address component, ObjectType expectedType, ObjectType foundType);
36
33
 
37
34
  bool private constant INCREASE = true;
38
35
  bool private constant DECREASE = false;
@@ -40,6 +37,14 @@ contract ComponentService is
40
37
  IRegistryService private _registryService;
41
38
  IInstanceService private _instanceService;
42
39
 
40
+ modifier onlyComponent(address component) {
41
+ if (!ContractLib.supportsInterface(component, type(IInstanceLinkedComponent).interfaceId)) {
42
+ revert ErrorComponentServiceNotInstanceLinkedComponent(component);
43
+ }
44
+ _;
45
+ }
46
+
47
+
43
48
  function _initialize(
44
49
  address owner,
45
50
  bytes memory data
@@ -48,21 +53,44 @@ contract ComponentService is
48
53
  virtual override
49
54
  initializer()
50
55
  {
51
- // TODO check this, might no longer be the way, refactor if necessary
52
- address registryAddress;
53
- address initialOwner;
54
- (registryAddress, initialOwner) = abi.decode(data, (address, address));
56
+ (
57
+ address registryAddress,
58
+ address authority
59
+ ) = abi.decode(data, (address, address));
55
60
 
56
- initializeService(registryAddress, address(0), owner);
61
+ _initializeService(registryAddress, authority, owner);
57
62
 
58
63
  _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
59
64
  _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
60
65
 
61
- registerInterface(type(IComponentService).interfaceId);
66
+ _registerInterface(type(IComponentService).interfaceId);
62
67
  }
63
68
 
64
69
  //-------- component ----------------------------------------------------//
65
70
 
71
+ function registerComponent(address component)
72
+ external
73
+ virtual
74
+ onlyComponent(component)
75
+ returns (NftId componentNftId)
76
+ {
77
+ // type specific registration
78
+ ObjectType componentType = IInstanceLinkedComponent(component).getInitialInfo().objectType;
79
+ if (componentType == POOL()) {
80
+ return _registerPool(component);
81
+ }
82
+ if (componentType == DISTRIBUTION()) {
83
+ return _registerDistribution(component);
84
+ }
85
+ if (componentType == ORACLE()) {
86
+ return _registerOracle(component);
87
+ }
88
+
89
+ // fail
90
+ revert ErrorComponentServiceTypeNotSupported(component, componentType);
91
+ }
92
+
93
+
66
94
  function setWallet(address newWallet) external virtual {
67
95
  (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
68
96
  IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
@@ -125,29 +153,29 @@ contract ComponentService is
125
153
 
126
154
  //-------- product ------------------------------------------------------//
127
155
 
128
- function registerProduct()
156
+ function registerProduct(address productAddress)
129
157
  external
130
158
  virtual
159
+ onlyComponent(productAddress)
160
+ returns (NftId productNftId)
131
161
  {
132
- address contractAddress = msg.sender;
133
-
134
162
  // register/create component setup
135
- (
136
- InstanceReader instanceReader,
137
- InstanceStore instanceStore,
138
- NftId productNftId
139
- ) = _register(
140
- contractAddress,
141
- PRODUCT(),
142
- PRODUCT_OWNER_ROLE());
143
-
144
- // create product info
145
- IComponents.ProductInfo memory productInfo = IProductComponent(contractAddress).getInitialProductInfo();
146
- instanceStore.createProduct(productNftId, productInfo);
163
+ InstanceAdmin instanceAdmin;
164
+ InstanceStore instanceStore;
165
+ (, instanceAdmin, instanceStore,, productNftId) = _register(
166
+ productAddress,
167
+ PRODUCT());
168
+
169
+ // get product
170
+ IProductComponent product = IProductComponent(productAddress);
147
171
 
148
- // link distribution and pool to product
149
- _linkToProduct(instanceReader, instanceStore, productInfo.distributionNftId, productNftId);
150
- _linkToProduct(instanceReader, instanceStore, productInfo.poolNftId, productNftId);
172
+ // create info
173
+ instanceStore.createProduct(
174
+ productNftId,
175
+ product.getInitialProductInfo());
176
+
177
+ // authorize
178
+ instanceAdmin.initializeComponentAuthorization(product);
151
179
  }
152
180
 
153
181
 
@@ -208,17 +236,36 @@ contract ComponentService is
208
236
  //-------- distribution -------------------------------------------------//
209
237
 
210
238
  /// @dev registers the sending component as a distribution component
211
- function registerDistribution()
212
- external
239
+ function _registerDistribution(address distributioAddress)
240
+ internal
213
241
  virtual
242
+ returns (NftId distributionNftId)
214
243
  {
215
- address contractAddress = msg.sender;
216
-
217
244
  // register/create component info
218
- _register(
219
- contractAddress,
220
- DISTRIBUTION(),
221
- DISTRIBUTION_OWNER_ROLE());
245
+ InstanceReader instanceReader;
246
+ InstanceAdmin instanceAdmin;
247
+ InstanceStore instanceStore;
248
+ NftId productNftId;
249
+ (instanceReader, instanceAdmin, instanceStore, productNftId, distributionNftId) = _register(
250
+ distributioAddress,
251
+ DISTRIBUTION());
252
+
253
+ // check product is still expecting a distribution registration
254
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
255
+ if (!productInfo.hasDistribution) {
256
+ revert ErrorProductServiceNoDistributionExpected(productNftId);
257
+ }
258
+ if (productInfo.distributionNftId.gtz()) {
259
+ revert ErrorProductServiceDistributionAlreadyRegistered(productNftId, productInfo.distributionNftId);
260
+ }
261
+
262
+ // set distribution in product info
263
+ productInfo.distributionNftId = distributionNftId;
264
+ instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
265
+
266
+ // authorize
267
+ instanceAdmin.initializeComponentAuthorization(
268
+ IInstanceLinkedComponent(distributioAddress));
222
269
  }
223
270
 
224
271
 
@@ -315,46 +362,75 @@ contract ComponentService is
315
362
 
316
363
  //-------- oracle -------------------------------------------------------//
317
364
 
318
- function registerOracle()
319
- external
365
+ function _registerOracle(address oracleAddress)
366
+ internal
320
367
  virtual
368
+ returns (NftId oracleNftId)
321
369
  {
322
- address contractAddress = msg.sender;
323
-
324
370
  // register/create component setup
325
- (
326
- , // instance reader
327
- InstanceStore instanceStore,
328
- NftId componentNftId
329
- ) = _register(
330
- contractAddress,
331
- ORACLE(),
332
- ORACLE_OWNER_ROLE());
371
+ InstanceReader instanceReader;
372
+ InstanceAdmin instanceAdmin;
373
+ InstanceStore instanceStore;
374
+ NftId productNftId;
375
+
376
+ (instanceReader, instanceAdmin, instanceStore, productNftId, oracleNftId) =_register(
377
+ oracleAddress,
378
+ ORACLE());
379
+
380
+ // check product is still expecting an oracle registration
381
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
382
+ if (productInfo.expectedNumberOfOracles == 0) {
383
+ revert ErrorProductServiceNoOraclesExpected(productNftId);
384
+ }
385
+ if (productInfo.numberOfOracles == productInfo.expectedNumberOfOracles) {
386
+ revert ErrorProductServiceOraclesAlreadyRegistered(productNftId, productInfo.expectedNumberOfOracles);
387
+ }
388
+
389
+ // update/add oracle to product info
390
+ productInfo.oracleNftId[productInfo.numberOfOracles] = oracleNftId;
391
+ productInfo.numberOfOracles++;
392
+ instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
393
+
394
+ // authorize
395
+ instanceAdmin.initializeComponentAuthorization(
396
+ IInstanceLinkedComponent(oracleAddress));
333
397
  }
334
398
 
335
399
  //-------- pool ---------------------------------------------------------//
336
400
 
337
- function registerPool()
338
- external
401
+ function _registerPool(address poolAddress)
402
+ internal
339
403
  virtual
404
+ returns (NftId poolNftId)
340
405
  {
341
- address contractAddress = msg.sender;
342
-
343
406
  // register/create component setup
344
- (
345
- , // instance reader
346
- InstanceStore instanceStore,
347
- NftId componentNftId
348
- ) = _register(
349
- contractAddress,
350
- POOL(),
351
- POOL_OWNER_ROLE());
407
+ InstanceReader instanceReader;
408
+ InstanceAdmin instanceAdmin;
409
+ InstanceStore instanceStore;
410
+ NftId productNftId;
411
+
412
+ (instanceReader, instanceAdmin, instanceStore, productNftId, poolNftId) =_register(
413
+ poolAddress,
414
+ POOL());
415
+
416
+ // check product is still expecting a pool registration
417
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
418
+ if (productInfo.poolNftId.gtz()) {
419
+ revert ErrorProductServicePoolAlreadyRegistered(productNftId, productInfo.poolNftId);
420
+ }
352
421
 
353
422
  // create info
423
+ IPoolComponent pool = IPoolComponent(poolAddress);
354
424
  instanceStore.createPool(
355
- componentNftId,
356
- IPoolComponent(
357
- contractAddress).getInitialPoolInfo());
425
+ poolNftId,
426
+ pool.getInitialPoolInfo());
427
+
428
+ // update pool in product info
429
+ productInfo.poolNftId = poolNftId;
430
+ instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
431
+
432
+ // authorize
433
+ instanceAdmin.initializeComponentAuthorization(pool);
358
434
  }
359
435
 
360
436
 
@@ -480,74 +556,67 @@ contract ComponentService is
480
556
  }
481
557
  }
482
558
 
483
- /// @dev registers the component represented by the provided address
559
+ /// @dev Registers the component represented by the provided address.
484
560
  function _register(
485
561
  address componentAddress, // address of component to register
486
- ObjectType requiredType, // required type for component for registration
487
- RoleId requiredRole // role required for comonent owner for registration
562
+ ObjectType requiredType // required type for component for registration
488
563
  )
489
564
  internal
490
565
  virtual
491
566
  returns (
492
567
  InstanceReader instanceReader,
568
+ InstanceAdmin instanceAdmin,
493
569
  InstanceStore instanceStore,
570
+ NftId parentNftId,
494
571
  NftId componentNftId
495
572
  )
496
573
  {
574
+ NftId instanceNftId;
575
+ IInstance instance;
576
+ IInstanceLinkedComponent component;
577
+ address initialOwner;
578
+
497
579
  (
498
- IInstance instance,
499
- IInstanceLinkedComponent component,
500
- address owner
580
+ instanceNftId,
581
+ instance,
582
+ parentNftId,
583
+ component,
584
+ initialOwner
501
585
  ) = _getAndVerifyRegisterableComponent(
586
+ getRegistry(),
502
587
  componentAddress,
503
- requiredType,
504
- requiredRole);
505
-
506
- // register component with registry
507
- componentNftId = _registryService.registerComponent(
508
- component,
509
- requiredType,
510
- owner).nftId;
511
-
512
- component.linkToRegisteredNftId();
588
+ requiredType);
513
589
 
514
- // setup initial component authorization
515
- _instanceService.initializeAuthorization(
516
- instance.getNftId(),
517
- component);
518
-
519
- // save amended component info with instance
590
+ // get instance supporting contracts (as function return values)
520
591
  instanceReader = instance.getInstanceReader();
592
+ instanceAdmin = instance.getInstanceAdmin();
521
593
  instanceStore = instance.getInstanceStore();
522
594
 
595
+ // register with registry
596
+ if (requiredType == PRODUCT()) {
597
+ componentNftId = _registryService.registerProduct(
598
+ component, initialOwner).nftId;
599
+ } else {
600
+ componentNftId = _registryService.registerProductLinkedComponent(
601
+ component, requiredType, initialOwner).nftId;
602
+ }
603
+
604
+ // deploy and wire token handler
523
605
  IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
524
- componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
606
+ IERC20Metadata token = componentInfo.token;
607
+ componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
608
+ address(token),
609
+ address(instanceAdmin.authority()));
525
610
 
611
+ // register component with instance
526
612
  instanceStore.createComponent(
527
- component.getNftId(),
613
+ componentNftId,
528
614
  componentInfo);
529
615
 
530
- // TODO add logging
531
- }
532
-
616
+ // link component contract to nft id
617
+ component.linkToRegisteredNftId();
533
618
 
534
- /// @dev link the component info corresponding to the componentNftId to the provided productNftId
535
- function _linkToProduct(
536
- InstanceReader instanceReader,
537
- InstanceStore instanceStore,
538
- NftId componentNftId,
539
- NftId productNftId
540
- )
541
- internal
542
- {
543
- // only link components that are registered
544
- if(componentNftId.eqz()) {
545
- return;
546
- }
547
-
548
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(componentNftId);
549
- componentInfo.productNftId = productNftId;
550
- instanceStore.updateComponent(componentNftId, componentInfo, KEEP_STATE());
619
+ emit LogComponentServiceRegistered(instanceNftId, componentNftId, requiredType, address(component), address(token), initialOwner);
551
620
  }
552
621
 
553
622
 
@@ -566,12 +635,6 @@ contract ComponentService is
566
635
  }
567
636
 
568
637
 
569
- function _createSelectors(bytes4 selector) internal pure returns (bytes4[] memory selectors) {
570
- selectors = new bytes4[](1);
571
- selectors[0] = selector;
572
- }
573
-
574
-
575
638
  function _getLinkedProductInfo(
576
639
  InstanceReader instanceReader,
577
640
  NftId componentNftId
@@ -583,56 +646,89 @@ contract ComponentService is
583
646
  IComponents.ProductInfo memory info
584
647
  )
585
648
  {
586
- productNftId = instanceReader.getComponentInfo(componentNftId).productNftId;
649
+ productNftId = _getProductNftId(componentNftId);
587
650
  info = instanceReader.getProductInfo(productNftId);
588
651
  }
589
652
 
590
653
 
591
- /// @dev based on the provided component address required type and role returns the component and related instance contract
592
- /// the function reverts iff:
593
- /// - the component has already been registered
654
+ /// @dev Based on the provided component address required type the component
655
+ /// and related instance contract this function reverts iff:
656
+ /// - the sender is not registered
594
657
  /// - the component contract does not support IInstanceLinkedComponent
595
658
  /// - the component type does not match with the required type
596
- /// - the initial component owner misses the required role (with the instance access manager)
659
+ /// - the component has already been registered
597
660
  function _getAndVerifyRegisterableComponent(
661
+ IRegistry registry,
598
662
  address componentAddress,
599
- ObjectType requiredType,
600
- RoleId requiredRole
663
+ ObjectType requiredType
601
664
  )
602
665
  internal
603
666
  view
604
667
  returns (
668
+ NftId instanceNftId,
605
669
  IInstance instance,
670
+ NftId parentNftId,
606
671
  IInstanceLinkedComponent component,
607
- address owner
672
+ address initialOwner
608
673
  )
609
674
  {
610
- // check this is a component
611
- component = IInstanceLinkedComponent(componentAddress);
612
- if(!component.supportsInterface(type(IInstanceLinkedComponent).interfaceId)) {
613
- revert ErrorComponentServiceNotComponent(componentAddress);
675
+ // check sender (instance or product) is registered
676
+ IRegistry.ObjectInfo memory senderInfo = registry.getObjectInfo(msg.sender);
677
+ if (senderInfo.nftId.eqz()) {
678
+ revert ErrorComponentServiceSenderNotRegistered(msg.sender);
614
679
  }
615
680
 
681
+ // the sender is the parent of the component to be registered
682
+ // an instance caller wanting to register a product - or -
683
+ // a product caller wantint go register a distribution, oracle or pool
684
+ parentNftId = senderInfo.nftId;
685
+
616
686
  // check component is of required type
687
+ component = IInstanceLinkedComponent(componentAddress);
617
688
  IRegistry.ObjectInfo memory info = component.getInitialInfo();
618
689
  if(info.objectType != requiredType) {
619
690
  revert ErrorComponentServiceInvalidType(componentAddress, requiredType, info.objectType);
620
691
  }
621
692
 
622
693
  // check component has not already been registered
623
- if (getRegistry().getNftId(componentAddress).gtz()) {
694
+ if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
624
695
  revert ErrorComponentServiceAlreadyRegistered(componentAddress);
625
696
  }
626
697
 
627
- // check instance has assigned required role to inital owner
628
- instance = _getInstance(info.parentNftId);
629
- owner = info.initialOwner;
698
+ // check release matches
699
+ address parentAddress = registry.getObjectAddress(parentNftId);
700
+ if (component.getRelease() != IRegisterable(parentAddress).getRelease()) {
701
+ revert ErrorComponentServiceReleaseMismatch(componentAddress, component.getRelease(), IRegisterable(parentAddress).getRelease());
702
+ }
630
703
 
631
- if(!instance.getInstanceAdmin().hasRole(owner, requiredRole)) {
632
- revert ErrorComponentServiceExpectedRoleMissing(info.parentNftId, requiredRole, owner);
704
+ // check component belongs to same product cluster
705
+ // parent of product must be instance, parent of other componet types must be product
706
+ if (info.parentNftId != senderInfo.nftId) {
707
+ revert ErrorComponentServiceSenderNotComponentParent(senderInfo.nftId, info.parentNftId);
633
708
  }
709
+
710
+ // verify parent is registered instance
711
+ if (requiredType == PRODUCT()) {
712
+ if (senderInfo.objectType != INSTANCE()) {
713
+ revert ErrorComponentServiceParentNotInstance(senderInfo.nftId, senderInfo.objectType);
714
+ }
715
+
716
+ instanceNftId = senderInfo.nftId;
717
+ // verify parent is registered product
718
+ } else {
719
+ if (senderInfo.objectType != PRODUCT()) {
720
+ revert ErrorComponentServiceParentNotProduct(senderInfo.nftId, senderInfo.objectType);
721
+ }
722
+
723
+ instanceNftId = senderInfo.parentNftId;
724
+ }
725
+
726
+ // get initial owner and instance
727
+ initialOwner = info.initialOwner;
728
+ instance = _getInstance(registry, instanceNftId);
634
729
  }
635
730
 
731
+
636
732
  function _getDomain() internal pure virtual override returns(ObjectType) {
637
733
  return COMPONENT();
638
734
  }
@@ -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
  }
@@ -12,7 +12,6 @@ import {Service} from "../shared/Service.sol";
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
 
@@ -32,7 +31,7 @@ abstract contract ComponentVerifyingService is
32
31
  IInstance instance
33
32
  )
34
33
  {
35
- componentNftId = getRegistry().getNftId(msg.sender);
34
+ componentNftId = getRegistry().getNftIdForAddress(msg.sender);
36
35
  (componentInfo, instance) = _getAndVerifyComponentInfo(
37
36
  componentNftId,
38
37
  expectedType,
@@ -83,7 +82,7 @@ abstract contract ComponentVerifyingService is
83
82
  }
84
83
  }
85
84
 
86
- instance = _getInstance(info.parentNftId);
85
+ instance = _getInstanceForComponent(registry, info);
87
86
 
88
87
  // ensure component is not locked
89
88
  if (onlyActive) {
@@ -94,24 +93,34 @@ abstract contract ComponentVerifyingService is
94
93
  }
95
94
 
96
95
 
97
- /// @dev returns the linked product nft id for the specified component
98
- function _getProductNftId(
99
- InstanceReader instanceReader,
100
- NftId componentNftId
101
- )
96
+ function _getInstanceForComponent(IRegistry registry, IRegistry.ObjectInfo memory componentInfo)
102
97
  internal
103
- virtual
104
98
  view
105
- returns (NftId productNftId)
99
+ returns (IInstance instance)
106
100
  {
107
- return instanceReader.getComponentInfo(componentNftId).productNftId;
101
+ // parent of product is instance
102
+ if (componentInfo.objectType == PRODUCT()) {
103
+ instance = _getInstance(registry, componentInfo.parentNftId);
104
+ // parent of other types is product
105
+ } else {
106
+ instance = _getInstance(
107
+ registry,
108
+ registry.getObjectInfo(
109
+ componentInfo.parentNftId).parentNftId);
110
+ }
111
+ }
112
+
113
+
114
+ /// @dev returns the product nft id from the registry.
115
+ /// assumes the component nft id is valid and represents a product linked component.
116
+ function _getProductNftId(NftId componentNftId) internal view returns (NftId productNftId) {
117
+ productNftId = getRegistry().getObjectInfo(componentNftId).parentNftId;
108
118
  }
109
119
 
110
120
 
111
121
  /// @dev returns an IInstance contract reference for the specified instance nft id
112
- function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
122
+ function _getInstance(IRegistry registry, NftId instanceNftId) internal view returns (IInstance) {
113
123
  return IInstance(
114
- getRegistry().getObjectInfo(
115
- instanceNftId).objectAddress);
124
+ registry.getObjectAddress(instanceNftId));
116
125
  }
117
126
  }
@@ -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
+ }