@etherisc/gif-next 0.0.2-7177fd8-761 → 0.0.2-71cf987-554

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