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

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