@etherisc/gif-next 0.0.2-a3c2eef-755 → 0.0.2-a4051e9-983

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 (524) hide show
  1. package/README.md +34 -5
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1293 -0
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
  5. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1206 -0
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  7. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +414 -0
  8. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  9. package/artifacts/contracts/authorization/IAccess.sol/IAccess.json +10 -0
  10. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  11. package/artifacts/contracts/{shared → authorization}/IAccessAdmin.sol/IAccessAdmin.json +152 -281
  12. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +295 -0
  14. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  15. package/artifacts/contracts/{registry → authorization}/IServiceAuthorization.sol/IServiceAuthorization.json +48 -10
  16. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
  17. package/artifacts/contracts/{shared/AccessManagerCustom.sol/AccessManagerCustom.json → authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json} +28 -25
  18. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +253 -0
  20. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  21. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1402 -0
  22. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  23. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +470 -0
  24. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +133 -501
  26. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +300 -239
  28. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +108 -104
  30. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +164 -210
  32. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +181 -47
  34. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  35. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  36. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  37. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1538 -0
  38. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  39. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +470 -0
  40. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2077 -0
  42. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -0
  44. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  45. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1471 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1231 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1592 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2095 -0
  54. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  55. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
  56. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  57. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +59 -50
  58. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  59. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +43 -110
  60. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  61. package/artifacts/contracts/instance/Instance.sol/Instance.json +74 -202
  62. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1211 -266
  64. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +561 -0
  66. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  67. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +511 -154
  68. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  69. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +91 -316
  70. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  71. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +75 -111
  72. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  73. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +340 -260
  74. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  76. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  77. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  78. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  79. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  80. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +223 -0
  81. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  82. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +181 -0
  83. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  86. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  87. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  88. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  89. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  90. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  91. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  92. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +1039 -0
  93. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  94. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +478 -0
  95. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  96. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +43 -1
  97. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  98. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +109 -80
  99. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  100. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
  101. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  102. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +119 -358
  103. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  104. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +91 -159
  105. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  106. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +75 -83
  107. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  108. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1299 -0
  109. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  110. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +470 -0
  111. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  112. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +498 -167
  113. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  114. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +169 -89
  115. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  116. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +258 -1
  117. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  118. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +125 -319
  119. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  120. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +384 -179
  121. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  122. package/artifacts/contracts/pool/Pool.sol/Pool.json +165 -632
  123. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  124. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +506 -334
  125. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +111 -87
  127. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  128. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +76 -168
  129. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  130. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +72 -92
  131. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  132. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1173 -0
  133. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  134. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +470 -0
  135. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  136. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +303 -187
  137. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  138. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +119 -103
  139. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  140. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +34 -0
  141. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  142. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +176 -6
  143. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  144. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +323 -118
  145. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  146. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +114 -85
  147. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  148. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +154 -137
  149. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  150. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +31 -2
  151. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  152. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +444 -325
  153. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  154. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +119 -103
  155. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  156. package/artifacts/contracts/product/PricingService.sol/PricingService.json +202 -307
  157. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  158. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +96 -120
  159. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  160. package/artifacts/contracts/product/Product.sol/Product.json +168 -434
  161. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  162. package/artifacts/contracts/product/RiskService.sol/RiskService.json +622 -0
  163. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  164. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +694 -0
  165. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  166. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  167. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  168. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +311 -55
  169. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  170. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +42 -146
  171. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  172. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  173. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  174. package/artifacts/contracts/registry/Registry.sol/Registry.json +537 -112
  175. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  176. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +381 -396
  177. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  178. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +78 -284
  179. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  180. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +67 -75
  181. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  182. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +205 -0
  183. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  184. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1067 -0
  185. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  186. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +101 -16
  187. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  188. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +4 -4
  189. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  190. package/artifacts/contracts/shared/Component.sol/Component.json +65 -236
  191. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  192. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +517 -260
  193. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  194. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +136 -118
  195. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  196. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +47 -112
  197. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  198. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
  199. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  200. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +55 -54
  201. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  202. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +474 -19
  203. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  204. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +98 -80
  205. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  206. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +45 -3
  207. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  208. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +34 -3
  209. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  210. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  211. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  212. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  213. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  214. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
  215. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  216. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  217. package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
  218. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  219. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  220. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  221. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +111 -318
  222. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  223. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +55 -88
  224. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  225. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -62
  226. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  227. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  228. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  229. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
  230. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  231. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  232. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  233. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +58 -89
  234. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  235. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  236. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  237. package/artifacts/contracts/shared/Service.sol/Service.json +47 -112
  238. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  239. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  240. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  241. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  242. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  243. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +82 -55
  244. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  245. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
  246. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  247. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +85 -105
  248. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  249. package/artifacts/contracts/staking/Staking.sol/Staking.json +176 -293
  250. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  251. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +205 -0
  252. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  253. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +106 -91
  254. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  255. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +7 -12
  256. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  257. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +71 -165
  258. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  259. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +71 -79
  260. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  261. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +186 -164
  262. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  263. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +58 -22
  264. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  265. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  266. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/Amount.sol/AmountLib.json +61 -8
  268. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  270. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  272. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
  274. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/Fee.sol/FeeLib.json +17 -12
  276. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  277. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  278. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +4 -4
  280. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  281. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  282. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +55 -2
  284. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  286. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
  288. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +4 -4
  290. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  291. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  292. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  293. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +117 -14
  294. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  295. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
  296. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  297. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +2 -2
  298. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  299. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
  300. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  301. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  302. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  303. package/artifacts/contracts/type/String.sol/StrLib.json +2 -2
  304. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  305. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  306. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  307. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  308. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  309. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +71 -2
  310. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  311. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  312. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  313. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
  314. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  315. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  316. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  317. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +602 -0
  318. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  319. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  320. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  321. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  322. package/contracts/{shared → authorization}/AccessAdmin.sol +190 -353
  323. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  324. package/contracts/authorization/Authorization.sol +289 -0
  325. package/contracts/authorization/IAccess.sol +49 -0
  326. package/contracts/{shared → authorization}/IAccessAdmin.sol +26 -57
  327. package/contracts/authorization/IAuthorization.sol +60 -0
  328. package/contracts/{registry → authorization}/IServiceAuthorization.sol +11 -6
  329. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  330. package/contracts/{registry → authorization}/ServiceAuthorization.sol +45 -25
  331. package/contracts/distribution/BasicDistribution.sol +139 -0
  332. package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
  333. package/contracts/distribution/Distribution.sol +140 -116
  334. package/contracts/distribution/DistributionService.sol +137 -79
  335. package/contracts/distribution/DistributionServiceManager.sol +8 -11
  336. package/contracts/distribution/IDistributionComponent.sol +26 -40
  337. package/contracts/distribution/IDistributionService.sol +23 -3
  338. package/contracts/examples/fire/DamageLevel.sol +59 -0
  339. package/contracts/examples/fire/FirePool.sol +75 -0
  340. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  341. package/contracts/examples/fire/FireProduct.sol +418 -0
  342. package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
  343. package/contracts/examples/fire/FireUSD.sol +26 -0
  344. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  345. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  346. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  347. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  348. package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
  349. package/contracts/instance/IInstance.sol +17 -38
  350. package/contracts/instance/IInstanceService.sol +9 -34
  351. package/contracts/instance/Instance.sol +84 -115
  352. package/contracts/instance/InstanceAdmin.sol +216 -270
  353. package/contracts/instance/InstanceAuthorizationV3.sol +194 -0
  354. package/contracts/instance/InstanceReader.sol +137 -34
  355. package/contracts/instance/InstanceService.sol +98 -126
  356. package/contracts/instance/InstanceServiceManager.sol +8 -13
  357. package/contracts/instance/InstanceStore.sol +23 -5
  358. package/contracts/instance/base/ObjectLifecycle.sol +111 -0
  359. package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +11 -12
  360. package/contracts/instance/module/IBundle.sol +1 -1
  361. package/contracts/instance/module/IComponents.sol +10 -11
  362. package/contracts/instance/module/IDistribution.sol +0 -1
  363. package/contracts/instance/module/IPolicy.sol +24 -24
  364. package/contracts/mock/Dip.sol +1 -1
  365. package/contracts/oracle/BasicOracle.sol +47 -0
  366. package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
  367. package/contracts/oracle/IOracle.sol +16 -0
  368. package/contracts/oracle/IOracleComponent.sol +2 -1
  369. package/contracts/oracle/IOracleService.sol +2 -1
  370. package/contracts/oracle/Oracle.sol +64 -53
  371. package/contracts/oracle/OracleService.sol +47 -34
  372. package/contracts/oracle/OracleServiceManager.sol +8 -11
  373. package/contracts/pool/BasicPool.sol +154 -0
  374. package/contracts/pool/BasicPoolAuthorization.sol +57 -0
  375. package/contracts/pool/BundleService.sol +254 -70
  376. package/contracts/pool/BundleServiceManager.sol +8 -11
  377. package/contracts/pool/IBundleService.sol +42 -5
  378. package/contracts/pool/IPoolComponent.sol +24 -68
  379. package/contracts/pool/IPoolService.sol +56 -39
  380. package/contracts/pool/Pool.sol +184 -148
  381. package/contracts/pool/PoolService.sol +256 -164
  382. package/contracts/pool/PoolServiceManager.sol +6 -9
  383. package/contracts/product/ApplicationService.sol +68 -65
  384. package/contracts/product/ApplicationServiceManager.sol +6 -6
  385. package/contracts/product/BasicProduct.sol +53 -0
  386. package/contracts/product/BasicProductAuthorization.sol +42 -0
  387. package/contracts/product/ClaimService.sol +308 -146
  388. package/contracts/product/ClaimServiceManager.sol +6 -6
  389. package/contracts/product/IApplicationService.sol +1 -0
  390. package/contracts/product/IClaimService.sol +31 -7
  391. package/contracts/product/IPolicyService.sol +34 -32
  392. package/contracts/product/IPricingService.sol +10 -10
  393. package/contracts/product/IProductComponent.sol +26 -9
  394. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  395. package/contracts/product/PolicyService.sol +404 -196
  396. package/contracts/product/PolicyServiceManager.sol +6 -9
  397. package/contracts/product/PricingService.sol +50 -53
  398. package/contracts/product/PricingServiceManager.sol +5 -8
  399. package/contracts/product/Product.sol +211 -133
  400. package/contracts/product/{ProductService.sol → RiskService.sol} +13 -41
  401. package/contracts/product/RiskServiceManager.sol +39 -0
  402. package/contracts/registry/ChainNft.sol +68 -38
  403. package/contracts/registry/IRegistry.sol +69 -22
  404. package/contracts/registry/IRegistryService.sol +3 -10
  405. package/contracts/registry/ITransferInterceptor.sol +1 -2
  406. package/contracts/registry/Registry.sol +354 -219
  407. package/contracts/registry/RegistryAdmin.sol +244 -129
  408. package/contracts/registry/RegistryService.sol +39 -64
  409. package/contracts/registry/RegistryServiceManager.sol +4 -4
  410. package/contracts/registry/ReleaseLifecycle.sol +30 -0
  411. package/contracts/registry/ReleaseRegistry.sol +501 -0
  412. package/contracts/registry/ServiceAuthorizationV3.sol +23 -29
  413. package/contracts/registry/TokenRegistry.sol +2 -2
  414. package/contracts/shared/Component.sol +47 -63
  415. package/contracts/shared/ComponentService.sol +304 -186
  416. package/contracts/shared/ComponentServiceManager.sol +10 -7
  417. package/contracts/shared/ComponentVerifyingService.sol +24 -15
  418. package/contracts/shared/ContractLib.sol +38 -0
  419. package/contracts/shared/IComponent.sol +10 -6
  420. package/contracts/shared/IComponentService.sol +38 -20
  421. package/contracts/shared/IInstanceLinkedComponent.sol +11 -16
  422. package/contracts/shared/IKeyValueStore.sol +1 -0
  423. package/contracts/shared/ILifecycle.sol +3 -2
  424. package/contracts/shared/INftOwnable.sol +2 -0
  425. package/contracts/shared/IPolicyHolder.sol +12 -22
  426. package/contracts/shared/IRegisterable.sol +11 -0
  427. package/contracts/shared/IService.sol +1 -1
  428. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +3 -3
  429. package/contracts/shared/InstanceLinkedComponent.sol +106 -37
  430. package/contracts/shared/KeyValueStore.sol +7 -3
  431. package/contracts/shared/Lifecycle.sol +30 -72
  432. package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
  433. package/contracts/shared/NftOwnable.sol +29 -9
  434. package/contracts/shared/PolicyHolder.sol +17 -57
  435. package/contracts/shared/Registerable.sol +19 -9
  436. package/contracts/shared/RegistryLinked.sol +3 -2
  437. package/contracts/shared/Service.sol +23 -22
  438. package/contracts/shared/TokenHandler.sol +100 -19
  439. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  440. package/contracts/staking/IStaking.sol +3 -3
  441. package/contracts/staking/IStakingService.sol +12 -8
  442. package/contracts/staking/StakeManagerLib.sol +18 -25
  443. package/contracts/staking/Staking.sol +29 -45
  444. package/contracts/staking/StakingLifecycle.sol +23 -0
  445. package/contracts/staking/StakingManager.sol +10 -12
  446. package/contracts/staking/StakingReader.sol +23 -20
  447. package/contracts/staking/StakingService.sol +11 -29
  448. package/contracts/staking/StakingServiceManager.sol +4 -4
  449. package/contracts/staking/StakingStore.sol +15 -23
  450. package/contracts/staking/TargetManagerLib.sol +7 -3
  451. package/contracts/type/Amount.sol +27 -5
  452. package/contracts/type/Blocknumber.sol +7 -1
  453. package/contracts/type/ClaimId.sol +6 -1
  454. package/contracts/type/NftId.sol +1 -0
  455. package/contracts/type/ObjectType.sol +53 -18
  456. package/contracts/type/PayoutId.sol +10 -10
  457. package/contracts/type/Referral.sol +1 -0
  458. package/contracts/type/RiskId.sol +15 -1
  459. package/contracts/type/RoleId.sol +55 -94
  460. package/contracts/type/Seconds.sol +21 -1
  461. package/contracts/type/StateId.sol +15 -1
  462. package/contracts/type/Timestamp.sol +11 -1
  463. package/contracts/type/UFixed.sol +38 -9
  464. package/contracts/type/Version.sol +3 -1
  465. package/contracts/{shared → upgradeability}/ProxyManager.sol +71 -38
  466. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  467. package/contracts/{shared → upgradeability}/Versionable.sol +2 -2
  468. package/package.json +4 -3
  469. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  470. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -709
  471. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
  472. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -228
  473. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  474. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -187
  475. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  476. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  477. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  478. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  479. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  480. package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +0 -4
  481. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  482. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1218
  483. package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +0 -4
  484. package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.json +0 -171
  485. package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.dbg.json +0 -4
  486. package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.json +0 -1559
  487. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +0 -4
  488. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +0 -4
  489. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +0 -1747
  490. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +0 -4
  491. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +0 -1760
  492. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +0 -4
  493. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +0 -1838
  494. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +0 -4
  495. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +0 -1856
  496. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  497. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  498. package/artifacts/contracts/shared/IAccessAdmin.sol/IAccessAdmin.dbg.json +0 -4
  499. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +0 -4
  500. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.json +0 -1562
  501. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +0 -4
  502. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.json +0 -1600
  503. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  504. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  505. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  506. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
  507. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.json +0 -306
  508. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  509. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
  510. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  511. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  512. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  513. package/contracts/instance/InstanceAuthorizationsLib.sol +0 -377
  514. package/contracts/product/ProductServiceManager.sol +0 -42
  515. package/contracts/registry/ReleaseManager.sol +0 -527
  516. package/contracts/shared/AccessManagerCustom.sol +0 -741
  517. package/contracts/shared/AccessManagerExtended.sol +0 -481
  518. package/contracts/shared/AccessManagerExtendedInitializeable.sol +0 -13
  519. package/contracts/shared/AccessManagerExtendedWithDisable.sol +0 -137
  520. package/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol +0 -14
  521. package/contracts/shared/IAccessManagerExtended.sol +0 -74
  522. package/contracts/shared/IAccessManagerExtendedWithDisable.sol +0 -18
  523. package/contracts/shared/InitializableCustom.sol +0 -177
  524. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
@@ -1,48 +1,50 @@
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
- import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
8
- import {IRegistry} from "../registry/IRegistry.sol";
9
- import {IRegistryService} from "../registry/IRegistryService.sol";
10
- import {IInstance} from "../instance/IInstance.sol";
11
- import {IAccess} from "../instance/module/IAccess.sol";
12
- import {NftId} from "../type/NftId.sol";
13
- import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
14
- import {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, POLICY_SERVICE_ROLE, PRODUCT_SERVICE_ROLE} from "../type/RoleId.sol";
15
- import {KEEP_STATE} from "../type/StateId.sol";
16
10
  import {IComponents} from "../instance/module/IComponents.sol";
17
11
  import {IComponentService} from "./IComponentService.sol";
18
- import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
12
+ import {IInstance} from "../instance/IInstance.sol";
13
+ import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
14
+ import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
15
+ import {InstanceReader} from "../instance/InstanceReader.sol";
16
+ import {InstanceStore} from "../instance/InstanceStore.sol";
19
17
  import {IInstanceService} from "../instance/IInstanceService.sol";
18
+ import {IRegisterable} from "../shared/IRegisterable.sol";
20
19
  import {IPoolComponent} from "../pool/IPoolComponent.sol";
21
20
  import {IProductComponent} from "../product/IProductComponent.sol";
22
- import {InstanceReader} from "../instance/InstanceReader.sol";
23
- import {InstanceStore} from "../instance/InstanceStore.sol";
24
- import {TokenHandler} from "./TokenHandler.sol";
21
+ import {IRegistry} from "../registry/IRegistry.sol";
22
+ import {IRegistryService} from "../registry/IRegistryService.sol";
23
+ import {KEEP_STATE} from "../type/StateId.sol";
24
+ import {NftId} from "../type/NftId.sol";
25
+ import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
26
+ import {RoleId} from "../type/RoleId.sol";
27
+ import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
25
28
 
26
29
  contract ComponentService is
27
30
  ComponentVerifyingService,
28
31
  IComponentService
29
32
  {
30
33
 
31
- error ErrorComponentServiceAlreadyRegistered(address component);
32
- error ErrorComponentServiceNotComponent(address component);
33
- error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
34
- error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
35
- error ErrorComponentServiceExpectedRoleMissing(NftId instanceNftId, RoleId requiredRole, address sender);
36
- error ErrorComponentServiceComponentLocked(address component);
37
- error ErrorComponentServiceSenderNotService(address sender);
38
- error ErrorComponentServiceComponentTypeInvalid(address component, ObjectType expectedType, ObjectType foundType);
39
-
40
34
  bool private constant INCREASE = true;
41
35
  bool private constant DECREASE = false;
42
36
 
43
37
  IRegistryService private _registryService;
44
38
  IInstanceService private _instanceService;
45
39
 
40
+ modifier onlyComponent(address component) {
41
+ if (!ContractLib.supportsInterface(component, type(IInstanceLinkedComponent).interfaceId)) {
42
+ revert ErrorComponentServiceNotInstanceLinkedComponent(component);
43
+ }
44
+ _;
45
+ }
46
+
47
+
46
48
  function _initialize(
47
49
  address owner,
48
50
  bytes memory data
@@ -51,21 +53,44 @@ contract ComponentService is
51
53
  virtual override
52
54
  initializer()
53
55
  {
54
- // TODO check this, might no longer be the way, refactor if necessary
55
- address registryAddress;
56
- address initialOwner;
57
- (registryAddress, initialOwner) = abi.decode(data, (address, address));
56
+ (
57
+ address registryAddress,
58
+ address authority
59
+ ) = abi.decode(data, (address, address));
58
60
 
59
- initializeService(registryAddress, address(0), owner);
61
+ _initializeService(registryAddress, authority, owner);
60
62
 
61
63
  _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
62
64
  _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
63
65
 
64
- registerInterface(type(IComponentService).interfaceId);
66
+ _registerInterface(type(IComponentService).interfaceId);
65
67
  }
66
68
 
67
69
  //-------- component ----------------------------------------------------//
68
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
+
69
94
  function setWallet(address newWallet) external virtual {
70
95
  (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
71
96
  IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
@@ -94,40 +119,63 @@ contract ComponentService is
94
119
  // TODO implement
95
120
  function unlock() external virtual {}
96
121
 
122
+ function withdrawFees(Amount amount)
123
+ external
124
+ virtual
125
+ returns (Amount withdrawnAmount)
126
+ {
127
+ (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
128
+ IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
129
+ address componentWallet = info.wallet;
130
+
131
+ // determine withdrawn amount
132
+ withdrawnAmount = amount;
133
+ if (withdrawnAmount.gte(AmountLib.max())) {
134
+ withdrawnAmount = instance.getInstanceReader().getFeeAmount(componentNftId);
135
+ } else if (withdrawnAmount.eqz()) {
136
+ revert ErrorComponentServiceWithdrawAmountIsZero();
137
+ } else {
138
+ Amount withdrawLimit = instance.getInstanceReader().getFeeAmount(componentNftId);
139
+ if (withdrawnAmount.gt(withdrawLimit)) {
140
+ revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, withdrawLimit);
141
+ }
142
+ }
143
+
144
+ // decrease fee counters by withdrawnAmount
145
+ _changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
146
+
147
+ // transfer amount to component owner
148
+ address componentOwner = getRegistry().ownerOf(componentNftId);
149
+ emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
150
+ info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
151
+ }
152
+
97
153
 
98
154
  //-------- product ------------------------------------------------------//
99
155
 
100
- function registerProduct()
156
+ function registerProduct(address productAddress)
101
157
  external
102
158
  virtual
159
+ onlyComponent(productAddress)
160
+ returns (NftId productNftId)
103
161
  {
104
- address contractAddress = msg.sender;
105
- RoleId[] memory roles = new RoleId[](1);
106
- bytes4[][] memory selectors = new bytes4[][](1);
162
+ // register/create component setup
163
+ InstanceAdmin instanceAdmin;
164
+ InstanceStore instanceStore;
165
+ (, instanceAdmin, instanceStore,, productNftId) = _register(
166
+ productAddress,
167
+ PRODUCT());
107
168
 
108
- // authorizaion for distribution owner
109
- roles[0] = PRODUCT_OWNER_ROLE();
110
- selectors[0] = _createSelectors(IProductComponent.setFees.selector);
169
+ // get product
170
+ IProductComponent product = IProductComponent(productAddress);
111
171
 
112
- // register/create component setup
113
- (
114
- InstanceReader instanceReader,
115
- InstanceStore instanceStore,
116
- NftId productNftId
117
- ) = _register(
118
- contractAddress,
119
- PRODUCT(),
120
- PRODUCT_OWNER_ROLE(),
121
- roles,
122
- selectors);
123
-
124
- // create product info
125
- IComponents.ProductInfo memory productInfo = IProductComponent(contractAddress).getInitialProductInfo();
126
- instanceStore.createProduct(productNftId, productInfo);
127
-
128
- // link distribution and pool to product
129
- _linkToProduct(instanceReader, instanceStore, productInfo.distributionNftId, productNftId);
130
- _linkToProduct(instanceReader, instanceStore, productInfo.poolNftId, productNftId);
172
+ // create info
173
+ instanceStore.createProduct(
174
+ productNftId,
175
+ product.getInitialProductInfo());
176
+
177
+ // authorize
178
+ instanceAdmin.initializeComponentAuthorization(product);
131
179
  }
132
180
 
133
181
 
@@ -188,29 +236,36 @@ contract ComponentService is
188
236
  //-------- distribution -------------------------------------------------//
189
237
 
190
238
  /// @dev registers the sending component as a distribution component
191
- function registerDistribution()
192
- external
239
+ function _registerDistribution(address distributioAddress)
240
+ internal
193
241
  virtual
242
+ returns (NftId distributionNftId)
194
243
  {
195
- address contractAddress = msg.sender;
196
- RoleId[] memory roles = new RoleId[](2);
197
- bytes4[][] memory selectors = new bytes4[][](2);
198
-
199
- // authorizaion for distribution owner
200
- roles[0] = DISTRIBUTION_OWNER_ROLE();
201
- selectors[0] = _createSelectors(IDistributionComponent.setFees.selector);
244
+ // register/create component info
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
+ }
202
261
 
203
- // authorizaion for product service
204
- roles[1] = PRODUCT_SERVICE_ROLE();
205
- selectors[1] = _createSelectors(IDistributionComponent.processRenewal.selector);
262
+ // set distribution in product info
263
+ productInfo.distributionNftId = distributionNftId;
264
+ instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
206
265
 
207
- // register/create component info
208
- _register(
209
- contractAddress,
210
- DISTRIBUTION(),
211
- DISTRIBUTION_OWNER_ROLE(),
212
- roles,
213
- selectors);
266
+ // authorize
267
+ instanceAdmin.initializeComponentAuthorization(
268
+ IInstanceLinkedComponent(distributioAddress));
214
269
  }
215
270
 
216
271
 
@@ -275,63 +330,107 @@ contract ComponentService is
275
330
  _changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
276
331
  }
277
332
 
278
- //-------- oracle -------------------------------------------------------//
333
+ //-------- distributor -------------------------------------------------------//
279
334
 
280
- function registerOracle()
335
+ function increaseDistributorBalance(
336
+ InstanceStore instanceStore,
337
+ NftId distributorNftId,
338
+ Amount amount,
339
+ Amount feeAmount
340
+ )
281
341
  external
282
342
  virtual
343
+ // TODO re-enable once role granting is stable and fixed
344
+ // restricted()
283
345
  {
284
- address contractAddress = msg.sender;
285
- RoleId[] memory roles = new RoleId[](0);
286
- bytes4[][] memory selectors = new bytes4[][](0);
346
+ _changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
347
+ }
287
348
 
288
- // register/create component setup
289
- (
290
- , // instance reader
291
- InstanceStore instanceStore,
292
- NftId componentNftId
293
- ) = _register(
294
- contractAddress,
295
- ORACLE(),
296
- ORACLE_OWNER_ROLE(),
297
- roles,
298
- selectors);
349
+ function decreaseDistributorBalance(
350
+ InstanceStore instanceStore,
351
+ NftId distributorNftId,
352
+ Amount amount,
353
+ Amount feeAmount
354
+ )
355
+ external
356
+ virtual
357
+ // TODO re-enable once role granting is stable and fixed
358
+ // restricted()
359
+ {
360
+ _changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
299
361
  }
300
362
 
301
- //-------- pool ---------------------------------------------------------//
363
+ //-------- oracle -------------------------------------------------------//
302
364
 
303
- function registerPool()
304
- external
365
+ function _registerOracle(address oracleAddress)
366
+ internal
305
367
  virtual
368
+ returns (NftId oracleNftId)
306
369
  {
307
- address contractAddress = msg.sender;
308
- RoleId[] memory roles = new RoleId[](2);
309
- bytes4[][] memory selectors = new bytes4[][](2);
370
+ // register/create component setup
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
+ }
310
388
 
311
- // authorizaion for pool owner
312
- roles[0] = POOL_OWNER_ROLE();
313
- selectors[0] = _createSelectors(IPoolComponent.setFees.selector);
389
+ // update/add oracle to product info
390
+ productInfo.oracleNftId[productInfo.numberOfOracles] = oracleNftId;
391
+ productInfo.numberOfOracles++;
392
+ instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
314
393
 
315
- // authorizaion for product service
316
- roles[1] = POLICY_SERVICE_ROLE();
317
- selectors[1] = _createSelectors(IPoolComponent.verifyApplication.selector);
394
+ // authorize
395
+ instanceAdmin.initializeComponentAuthorization(
396
+ IInstanceLinkedComponent(oracleAddress));
397
+ }
318
398
 
399
+ //-------- pool ---------------------------------------------------------//
400
+
401
+ function _registerPool(address poolAddress)
402
+ internal
403
+ virtual
404
+ returns (NftId poolNftId)
405
+ {
319
406
  // register/create component setup
320
- (
321
- , // instance reader
322
- InstanceStore instanceStore,
323
- NftId componentNftId
324
- ) = _register(
325
- contractAddress,
326
- POOL(),
327
- POOL_OWNER_ROLE(),
328
- roles,
329
- selectors);
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
+ }
330
421
 
331
422
  // create info
423
+ IPoolComponent pool = IPoolComponent(poolAddress);
332
424
  instanceStore.createPool(
333
- componentNftId,
334
- IPoolComponent(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);
335
434
  }
336
435
 
337
436
 
@@ -457,74 +556,67 @@ contract ComponentService is
457
556
  }
458
557
  }
459
558
 
460
- /// @dev registers the component represented by the provided address
559
+ /// @dev Registers the component represented by the provided address.
461
560
  function _register(
462
561
  address componentAddress, // address of component to register
463
- ObjectType requiredType, // required type for component for registration
464
- RoleId requiredRole, // role required for comonent owner for registration
465
- RoleId[] memory roles, // roles with write access to component
466
- bytes4[][] memory selectors // authorized functions per role with write access
562
+ ObjectType requiredType // required type for component for registration
467
563
  )
468
564
  internal
469
565
  virtual
470
566
  returns (
471
567
  InstanceReader instanceReader,
568
+ InstanceAdmin instanceAdmin,
472
569
  InstanceStore instanceStore,
570
+ NftId parentNftId,
473
571
  NftId componentNftId
474
572
  )
475
573
  {
574
+ NftId instanceNftId;
575
+ IInstance instance;
576
+ IInstanceLinkedComponent component;
577
+ address initialOwner;
578
+
476
579
  (
477
- IInstance instance,
478
- IInstanceLinkedComponent component,
479
- address owner
580
+ instanceNftId,
581
+ instance,
582
+ parentNftId,
583
+ component,
584
+ initialOwner
480
585
  ) = _getAndVerifyRegisterableComponent(
586
+ getRegistry(),
481
587
  componentAddress,
482
- requiredType,
483
- requiredRole);
588
+ requiredType);
484
589
 
485
- // register component with registry
486
- componentNftId = _registryService.registerComponent(
487
- component,
488
- requiredType,
489
- owner).nftId;
490
-
491
- component.linkToRegisteredNftId();
492
-
493
- // save amended component info with instance
590
+ // get instance supporting contracts (as function return values)
494
591
  instanceReader = instance.getInstanceReader();
592
+ instanceAdmin = instance.getInstanceAdmin();
495
593
  instanceStore = instance.getInstanceStore();
496
594
 
497
- IComponents.ComponentInfo memory componentInfo = component.getComponentInfo();
498
- componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
499
- instanceStore.createComponent(component.getNftId(), componentInfo);
500
-
501
- // configure instance authorization
502
- _instanceService.createComponentTarget(
503
- instance.getNftId(),
504
- componentAddress,
505
- component.getName(),
506
- selectors,
507
- roles);
508
- }
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
+ }
509
603
 
604
+ // deploy and wire token handler
605
+ IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
606
+ IERC20Metadata token = componentInfo.token;
607
+ componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
608
+ address(token),
609
+ address(instanceAdmin.authority()));
510
610
 
511
- /// @dev link the component info corresponding to the componentNftId to the provided productNftId
512
- function _linkToProduct(
513
- InstanceReader instanceReader,
514
- InstanceStore instanceStore,
515
- NftId componentNftId,
516
- NftId productNftId
517
- )
518
- internal
519
- {
520
- // only link components that are registered
521
- if(componentNftId.eqz()) {
522
- return;
523
- }
524
-
525
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(componentNftId);
526
- componentInfo.productNftId = productNftId;
527
- instanceStore.updateComponent(componentNftId, componentInfo, KEEP_STATE());
611
+ // register component with instance
612
+ instanceStore.createComponent(
613
+ componentNftId,
614
+ componentInfo);
615
+
616
+ // link component contract to nft id
617
+ component.linkToRegisteredNftId();
618
+
619
+ emit LogComponentServiceRegistered(instanceNftId, componentNftId, requiredType, address(component), address(token), initialOwner);
528
620
  }
529
621
 
530
622
 
@@ -543,12 +635,6 @@ contract ComponentService is
543
635
  }
544
636
 
545
637
 
546
- function _createSelectors(bytes4 selector) internal pure returns (bytes4[] memory selectors) {
547
- selectors = new bytes4[](1);
548
- selectors[0] = selector;
549
- }
550
-
551
-
552
638
  function _getLinkedProductInfo(
553
639
  InstanceReader instanceReader,
554
640
  NftId componentNftId
@@ -560,57 +646,89 @@ contract ComponentService is
560
646
  IComponents.ProductInfo memory info
561
647
  )
562
648
  {
563
- productNftId = instanceReader.getComponentInfo(componentNftId).productNftId;
649
+ productNftId = _getProductNftId(componentNftId);
564
650
  info = instanceReader.getProductInfo(productNftId);
565
651
  }
566
652
 
567
653
 
568
- /// @dev based on the provided component address required type and role returns the component and related instance contract
569
- /// the function reverts iff:
570
- /// - 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
571
657
  /// - the component contract does not support IInstanceLinkedComponent
572
658
  /// - the component type does not match with the required type
573
- /// - the initial component owner misses the required role (with the instance access manager)
659
+ /// - the component has already been registered
574
660
  function _getAndVerifyRegisterableComponent(
661
+ IRegistry registry,
575
662
  address componentAddress,
576
- ObjectType requiredType,
577
- RoleId requiredRole
663
+ ObjectType requiredType
578
664
  )
579
665
  internal
580
666
  view
581
667
  returns (
668
+ NftId instanceNftId,
582
669
  IInstance instance,
670
+ NftId parentNftId,
583
671
  IInstanceLinkedComponent component,
584
- address owner
672
+ address initialOwner
585
673
  )
586
674
  {
587
- // check this is a component
588
- component = IInstanceLinkedComponent(componentAddress);
589
- if(!component.supportsInterface(type(IInstanceLinkedComponent).interfaceId)) {
590
- 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);
591
679
  }
592
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
+
593
686
  // check component is of required type
687
+ component = IInstanceLinkedComponent(componentAddress);
594
688
  IRegistry.ObjectInfo memory info = component.getInitialInfo();
595
689
  if(info.objectType != requiredType) {
596
690
  revert ErrorComponentServiceInvalidType(componentAddress, requiredType, info.objectType);
597
691
  }
598
692
 
599
693
  // check component has not already been registered
600
- if (getRegistry().getNftId(componentAddress).gtz()) {
694
+ if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
601
695
  revert ErrorComponentServiceAlreadyRegistered(componentAddress);
602
696
  }
603
697
 
604
- // check instance has assigned required role to inital owner
605
- instance = _getInstance(info.parentNftId);
606
- 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
+ }
703
+
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);
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
+ }
607
715
 
608
- (bool hasRole,) = instance.getInstanceAccessManager().hasRole(requiredRole.toInt(), owner);
609
- if(!hasRole) {
610
- revert ErrorComponentServiceExpectedRoleMissing(info.parentNftId, requiredRole, owner);
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;
611
724
  }
725
+
726
+ // get initial owner and instance
727
+ initialOwner = info.initialOwner;
728
+ instance = _getInstance(registry, instanceNftId);
612
729
  }
613
730
 
731
+
614
732
  function _getDomain() internal pure virtual override returns(ObjectType) {
615
733
  return COMPONENT();
616
734
  }