@etherisc/gif-next 0.0.2-f11de3a-698 → 0.0.2-f12cf4d-104

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