@etherisc/gif-next 0.0.2-ff1bf36-818 → 0.0.2-ff795d8-141

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 (521) hide show
  1. package/README.md +82 -8
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1023 -0
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +752 -0
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +791 -0
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +658 -259
  10. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +1279 -0
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +202 -5
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +456 -24
  16. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  18. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +507 -206
  19. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +215 -18
  21. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +265 -16
  23. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +473 -17
  25. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +177 -441
  27. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +431 -36
  29. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +96 -325
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +473 -326
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +187 -125
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +90 -167
  37. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +287 -101
  39. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  40. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  41. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  42. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1461 -0
  43. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  44. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +805 -0
  45. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  46. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2018 -0
  47. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  48. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +805 -0
  49. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  50. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1404 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  54. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +805 -0
  55. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  56. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1152 -0
  57. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  58. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1628 -0
  59. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  60. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +805 -0
  61. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  62. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2405 -0
  63. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  64. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +805 -0
  65. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  66. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +193 -45
  67. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  68. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +505 -65
  69. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  70. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +255 -57
  71. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  72. package/artifacts/contracts/instance/Instance.sol/Instance.json +510 -162
  73. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  74. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1010 -334
  75. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  76. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +369 -68
  77. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  78. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1471 -466
  79. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  80. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +272 -231
  81. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  82. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +106 -106
  83. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  84. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +897 -638
  85. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  86. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +853 -0
  87. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  88. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  89. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  90. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  91. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  92. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  93. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
  94. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  95. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +16 -5
  96. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
  97. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
  98. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  99. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  100. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  101. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  102. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  103. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  104. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  105. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +129 -317
  106. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  107. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +429 -37
  108. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  109. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  110. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +104 -116
  111. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  112. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +69 -11
  113. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  114. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +105 -269
  115. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  116. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +169 -190
  117. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  118. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +140 -98
  119. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  120. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +145 -309
  121. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  122. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +430 -35
  123. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  124. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +180 -369
  125. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +124 -134
  127. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  128. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +90 -117
  129. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  130. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +135 -158
  131. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  132. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +318 -306
  133. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  134. package/artifacts/contracts/pool/Pool.sol/Pool.json +133 -308
  135. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  136. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +538 -0
  137. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  138. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +538 -557
  139. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  140. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +177 -111
  141. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  142. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +206 -163
  143. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  144. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +124 -98
  145. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  146. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +267 -370
  147. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  148. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +430 -35
  149. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  150. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +423 -242
  151. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  152. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +158 -124
  153. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  154. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +131 -9
  155. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  156. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +293 -17
  157. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  158. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +245 -64
  159. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  160. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +157 -83
  161. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  162. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +258 -209
  163. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  164. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +86 -6
  165. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  166. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +366 -288
  167. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  168. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +783 -0
  169. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  170. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +152 -122
  171. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  172. package/artifacts/contracts/product/PricingService.sol/PricingService.json +242 -332
  173. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  174. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +126 -140
  175. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  176. package/artifacts/contracts/product/Product.sol/Product.json +259 -362
  177. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  178. package/artifacts/contracts/product/RiskService.sol/RiskService.json +169 -176
  179. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  180. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +129 -95
  181. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  182. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  183. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  184. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +342 -42
  185. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  186. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +144 -41
  187. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
  188. package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
  189. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  190. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  191. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  192. package/artifacts/contracts/registry/Registry.sol/Registry.json +548 -103
  193. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  194. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +763 -382
  195. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
  196. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1053 -0
  197. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  198. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +109 -292
  199. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  200. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +104 -90
  201. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  202. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +2140 -0
  203. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  204. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
  205. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  206. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +487 -253
  207. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  208. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +489 -20
  209. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  210. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +15 -15
  211. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  212. package/artifacts/contracts/shared/Component.sol/Component.json +81 -227
  213. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  214. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +430 -623
  215. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  216. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +143 -131
  217. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  218. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +57 -111
  219. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  220. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +680 -0
  221. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  222. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  223. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  224. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  225. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  226. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  227. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  228. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +81 -75
  229. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  230. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +394 -300
  231. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  232. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +104 -116
  233. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  234. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
  235. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  236. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  237. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  238. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  239. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  240. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  241. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  242. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +148 -0
  243. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  244. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  245. package/artifacts/contracts/shared/IService.sol/IService.json +55 -2
  246. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  247. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
  248. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  249. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +104 -268
  250. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  251. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
  252. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  253. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  254. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  255. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  256. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  257. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
  258. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  259. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  260. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  261. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +122 -97
  262. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  263. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  264. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  265. package/artifacts/contracts/shared/Service.sol/Service.json +57 -111
  266. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  267. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +327 -73
  268. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  269. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
  270. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  271. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +88 -24
  272. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  273. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +197 -118
  274. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  275. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +155 -23
  276. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  277. package/artifacts/contracts/staking/Staking.sol/Staking.json +300 -337
  278. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  279. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +469 -0
  280. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  281. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  282. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  283. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +142 -103
  284. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  285. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +41 -73
  286. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  287. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +224 -171
  288. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  289. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +121 -95
  290. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  291. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +205 -150
  292. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  293. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +91 -50
  294. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  295. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/Amount.sol/AmountLib.json +35 -11
  297. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  299. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  300. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  301. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  302. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  303. package/artifacts/contracts/type/Fee.sol/FeeLib.json +94 -38
  304. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  305. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  306. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  307. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  308. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  309. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  310. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  311. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  312. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  313. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +33 -31
  314. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  315. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  316. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  317. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  318. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  319. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  320. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  321. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +125 -7
  322. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +42 -157
  324. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  325. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  326. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  327. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
  328. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  329. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
  330. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  331. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  332. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  333. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  334. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
  335. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  336. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +73 -36
  337. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  338. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
  339. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  340. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +101 -2
  341. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  342. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  343. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +81 -80
  344. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  345. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +15 -2
  346. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  347. package/contracts/accounting/AccountingService.sol +261 -0
  348. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  349. package/contracts/accounting/IAccountingService.sol +45 -0
  350. package/contracts/authorization/AccessAdmin.sol +464 -266
  351. package/contracts/authorization/AccessAdminLib.sol +387 -0
  352. package/contracts/authorization/AccessManagerCloneable.sol +146 -4
  353. package/contracts/authorization/Authorization.sol +159 -202
  354. package/contracts/authorization/IAccess.sol +25 -6
  355. package/contracts/authorization/IAccessAdmin.sol +80 -79
  356. package/contracts/authorization/IAuthorization.sol +9 -36
  357. package/contracts/authorization/IServiceAuthorization.sol +57 -17
  358. package/contracts/authorization/ServiceAuthorization.sol +254 -24
  359. package/contracts/distribution/BasicDistribution.sol +20 -17
  360. package/contracts/distribution/BasicDistributionAuthorization.sol +30 -10
  361. package/contracts/distribution/Distribution.sol +39 -89
  362. package/contracts/distribution/DistributionService.sol +235 -115
  363. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  364. package/contracts/distribution/IDistributionComponent.sol +4 -11
  365. package/contracts/distribution/IDistributionService.sol +40 -26
  366. package/contracts/examples/fire/DamageLevel.sol +59 -0
  367. package/contracts/examples/fire/FirePool.sol +86 -0
  368. package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
  369. package/contracts/examples/fire/FireProduct.sol +433 -0
  370. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  371. package/contracts/examples/fire/FireUSD.sol +26 -0
  372. package/contracts/examples/unpermissioned/SimpleDistribution.sol +81 -0
  373. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  374. package/contracts/examples/unpermissioned/SimpleOracle.sol +133 -0
  375. package/contracts/examples/unpermissioned/SimplePool.sol +102 -0
  376. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  377. package/contracts/examples/unpermissioned/SimpleProduct.sol +373 -0
  378. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  379. package/contracts/instance/BundleSet.sol +42 -38
  380. package/contracts/instance/IInstance.sol +96 -17
  381. package/contracts/instance/IInstanceService.sol +49 -31
  382. package/contracts/instance/Instance.sol +181 -69
  383. package/contracts/instance/InstanceAdmin.sol +279 -184
  384. package/contracts/instance/InstanceAuthorizationV3.sol +117 -58
  385. package/contracts/instance/InstanceReader.sol +365 -68
  386. package/contracts/instance/InstanceService.sol +271 -208
  387. package/contracts/instance/InstanceServiceManager.sol +6 -7
  388. package/contracts/instance/InstanceStore.sol +23 -2
  389. package/contracts/instance/RiskSet.sol +118 -0
  390. package/contracts/instance/base/ObjectCounter.sol +1 -2
  391. package/contracts/instance/base/ObjectLifecycle.sol +10 -2
  392. package/contracts/instance/base/ObjectSet.sol +31 -33
  393. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  394. package/contracts/instance/module/IBundle.sol +6 -5
  395. package/contracts/instance/module/IComponents.sol +29 -13
  396. package/contracts/instance/module/IDistribution.sol +21 -8
  397. package/contracts/instance/module/IPolicy.sol +49 -28
  398. package/contracts/instance/module/IRisk.sol +5 -0
  399. package/contracts/oracle/BasicOracle.sol +1 -4
  400. package/contracts/oracle/BasicOracleAuthorization.sol +15 -8
  401. package/contracts/oracle/IOracle.sol +9 -4
  402. package/contracts/oracle/IOracleService.sol +2 -1
  403. package/contracts/oracle/Oracle.sol +7 -19
  404. package/contracts/oracle/OracleService.sol +117 -85
  405. package/contracts/oracle/OracleServiceManager.sol +6 -6
  406. package/contracts/pool/BasicPool.sol +32 -25
  407. package/contracts/pool/BasicPoolAuthorization.sol +33 -9
  408. package/contracts/pool/BundleService.sol +93 -134
  409. package/contracts/pool/BundleServiceManager.sol +6 -6
  410. package/contracts/pool/IBundleService.sol +15 -34
  411. package/contracts/pool/IPoolComponent.sol +19 -15
  412. package/contracts/pool/IPoolService.sol +73 -71
  413. package/contracts/pool/Pool.sol +139 -124
  414. package/contracts/pool/PoolLib.sol +353 -0
  415. package/contracts/pool/PoolService.sol +332 -286
  416. package/contracts/pool/PoolServiceManager.sol +4 -4
  417. package/contracts/product/ApplicationService.sol +54 -26
  418. package/contracts/product/ApplicationServiceManager.sol +4 -4
  419. package/contracts/product/BasicProduct.sol +10 -13
  420. package/contracts/product/BasicProductAuthorization.sol +30 -12
  421. package/contracts/product/ClaimService.sol +372 -150
  422. package/contracts/product/ClaimServiceManager.sol +4 -4
  423. package/contracts/product/IApplicationService.sol +8 -2
  424. package/contracts/product/IClaimService.sol +43 -8
  425. package/contracts/product/IPolicyService.sol +39 -28
  426. package/contracts/product/IPricingService.sol +11 -10
  427. package/contracts/product/IProductComponent.sol +27 -5
  428. package/contracts/product/IRiskService.sol +7 -7
  429. package/contracts/product/PolicyService.sol +365 -309
  430. package/contracts/product/PolicyServiceLib.sol +139 -0
  431. package/contracts/product/PolicyServiceManager.sol +4 -4
  432. package/contracts/product/PricingService.sol +64 -59
  433. package/contracts/product/PricingServiceManager.sol +4 -4
  434. package/contracts/product/Product.sol +142 -85
  435. package/contracts/product/RiskService.sol +91 -34
  436. package/contracts/product/RiskServiceManager.sol +4 -4
  437. package/contracts/registry/ChainNft.sol +72 -40
  438. package/contracts/registry/IRegistry.sol +64 -28
  439. package/contracts/registry/IRegistryService.sol +5 -12
  440. package/contracts/registry/IRelease.sol +29 -0
  441. package/contracts/registry/ITransferInterceptor.sol +1 -2
  442. package/contracts/registry/Registry.sol +357 -203
  443. package/contracts/registry/RegistryAdmin.sol +110 -296
  444. package/contracts/registry/RegistryAuthorization.sol +277 -0
  445. package/contracts/registry/RegistryService.sol +37 -48
  446. package/contracts/registry/RegistryServiceManager.sol +3 -3
  447. package/contracts/registry/ReleaseAdmin.sol +195 -0
  448. package/contracts/registry/ReleaseLifecycle.sol +8 -3
  449. package/contracts/registry/ReleaseRegistry.sol +275 -240
  450. package/contracts/registry/ServiceAuthorizationV3.sol +200 -57
  451. package/contracts/registry/TokenRegistry.sol +12 -13
  452. package/contracts/shared/Component.sol +66 -124
  453. package/contracts/shared/ComponentService.sol +395 -375
  454. package/contracts/shared/ComponentServiceManager.sol +8 -5
  455. package/contracts/shared/ComponentVerifyingService.sol +28 -17
  456. package/contracts/shared/ContractLib.sol +357 -0
  457. package/contracts/shared/IComponent.sol +5 -17
  458. package/contracts/shared/IComponentService.sol +42 -40
  459. package/contracts/shared/IInstanceLinkedComponent.sol +3 -22
  460. package/contracts/shared/ILifecycle.sol +3 -1
  461. package/contracts/shared/INftOwnable.sol +2 -0
  462. package/contracts/shared/IPolicyHolder.sol +12 -22
  463. package/contracts/shared/IRegisterable.sol +23 -1
  464. package/contracts/shared/IService.sol +3 -5
  465. package/contracts/shared/InitializableERC165.sol +10 -2
  466. package/contracts/shared/InstanceLinkedComponent.sol +72 -50
  467. package/contracts/shared/KeyValueStore.sol +1 -1
  468. package/contracts/shared/Lifecycle.sol +15 -4
  469. package/contracts/shared/NftOwnable.sol +29 -9
  470. package/contracts/shared/PolicyHolder.sol +15 -52
  471. package/contracts/shared/Registerable.sol +52 -21
  472. package/contracts/shared/RegistryLinked.sol +9 -14
  473. package/contracts/shared/Service.sol +20 -35
  474. package/contracts/shared/TokenHandler.sol +275 -72
  475. package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
  476. package/contracts/staking/IStaking.sol +25 -13
  477. package/contracts/staking/IStakingService.sol +19 -4
  478. package/contracts/staking/Staking.sol +101 -52
  479. package/contracts/staking/{StakeManagerLib.sol → StakingLib.sol} +96 -21
  480. package/contracts/staking/StakingManager.sol +8 -6
  481. package/contracts/staking/StakingReader.sol +18 -21
  482. package/contracts/staking/StakingService.sol +85 -25
  483. package/contracts/staking/StakingServiceManager.sol +6 -5
  484. package/contracts/staking/StakingStore.sol +2 -1
  485. package/contracts/staking/TargetManagerLib.sol +8 -4
  486. package/contracts/type/Amount.sol +15 -0
  487. package/contracts/type/ClaimId.sol +6 -1
  488. package/contracts/type/Fee.sol +8 -8
  489. package/contracts/type/Key32.sol +2 -2
  490. package/contracts/type/Key32Set.sol +62 -0
  491. package/contracts/type/NftId.sol +7 -0
  492. package/contracts/type/ObjectType.sol +72 -36
  493. package/contracts/type/PayoutId.sol +10 -10
  494. package/contracts/type/RiskId.sol +38 -6
  495. package/contracts/type/RoleId.sol +61 -55
  496. package/contracts/type/Seconds.sol +8 -0
  497. package/contracts/type/Selector.sol +5 -0
  498. package/contracts/type/StateId.sol +15 -1
  499. package/contracts/type/Timestamp.sol +0 -5
  500. package/contracts/type/UFixed.sol +37 -126
  501. package/contracts/type/Version.sol +54 -5
  502. package/contracts/upgradeability/ProxyManager.sol +79 -43
  503. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +7 -1
  504. package/contracts/upgradeability/Versionable.sol +6 -3
  505. package/package.json +5 -4
  506. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  507. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  508. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  509. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  510. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  511. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
  512. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  513. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  514. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
  515. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -387
  516. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  517. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
  518. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  519. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  520. package/contracts/instance/module/IAccess.sol +0 -46
  521. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -1,13 +1,14 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Amount, AmountLib} from "../type/Amount.sol";
5
- import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
6
- import {Fee, FeeLib} from "../type/Fee.sol";
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {IAccountingService} from "../accounting/IAccountingService.sol";
7
7
  import {IComponents} from "../instance/module/IComponents.sol";
8
8
  import {IComponentService} from "./IComponentService.sol";
9
9
  import {IInstance} from "../instance/IInstance.sol";
10
10
  import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
11
+ import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
11
12
  import {InstanceReader} from "../instance/InstanceReader.sol";
12
13
  import {InstanceStore} from "../instance/InstanceStore.sol";
13
14
  import {IInstanceService} from "../instance/IInstanceService.sol";
@@ -15,28 +16,27 @@ import {IPoolComponent} from "../pool/IPoolComponent.sol";
15
16
  import {IProductComponent} from "../product/IProductComponent.sol";
16
17
  import {IRegistry} from "../registry/IRegistry.sol";
17
18
  import {IRegistryService} from "../registry/IRegistryService.sol";
19
+
20
+ import {AccessManagerCloneable} from "../authorization/AccessManagerCloneable.sol";
21
+ import {Amount, AmountLib} from "../type/Amount.sol";
22
+ import {ContractLib} from "../shared/ContractLib.sol";
23
+ import {Fee, FeeLib} from "../type/Fee.sol";
18
24
  import {KEEP_STATE} from "../type/StateId.sol";
19
- 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";
25
+ import {NftId, NftIdLib} from "../type/NftId.sol";
26
+ import {ObjectType, ACCOUNTING, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
27
+ import {Service} from "../shared/Service.sol";
28
+ import {TokenHandler} from "../shared/TokenHandler.sol";
22
29
  import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
23
30
 
31
+
24
32
  contract ComponentService is
25
- ComponentVerifyingService,
33
+ Service,
26
34
  IComponentService
27
35
  {
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
-
37
36
  bool private constant INCREASE = true;
38
37
  bool private constant DECREASE = false;
39
38
 
39
+ IAccountingService private _accountingService;
40
40
  IRegistryService private _registryService;
41
41
  IInstanceService private _instanceService;
42
42
 
@@ -48,177 +48,272 @@ contract ComponentService is
48
48
  virtual override
49
49
  initializer()
50
50
  {
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));
51
+ (
52
+ address authority,
53
+ address registry
54
+ ) = abi.decode(data, (address, address));
55
55
 
56
- initializeService(registryAddress, address(0), owner);
56
+ __Service_init(authority, registry, owner);
57
57
 
58
+ _accountingService = IAccountingService(_getServiceAddress(ACCOUNTING()));
58
59
  _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
59
60
  _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
60
61
 
61
- registerInterface(type(IComponentService).interfaceId);
62
+ _registerInterface(type(IComponentService).interfaceId);
62
63
  }
63
64
 
64
65
  //-------- component ----------------------------------------------------//
65
66
 
66
- function setWallet(address newWallet) external virtual {
67
- (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
68
- IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
69
- address currentWallet = info.wallet;
70
-
71
- if (newWallet == address(0)) {
72
- revert ErrorComponentServiceNewWalletAddressZero();
67
+ /// @inheritdoc IComponentService
68
+ function registerComponent(address componentAddress)
69
+ external
70
+ virtual
71
+ restricted()
72
+ returns (NftId componentNftId)
73
+ {
74
+ // checks
75
+ // check sender is registered product
76
+ IRegistry registry = getRegistry();
77
+ if (!registry.isObjectType(msg.sender, PRODUCT())) {
78
+ revert ErrorComponentServiceCallerNotProduct(msg.sender);
73
79
  }
74
80
 
75
- if (currentWallet == address(0)) {
76
- revert ErrorComponentServiceWalletAddressZero();
81
+ // check provided address is product contract
82
+ if (!ContractLib.isInstanceLinkedComponent(address(registry), componentAddress)) {
83
+ revert ErrorComponentServiceNotComponent(componentAddress);
77
84
  }
78
85
 
79
- if (newWallet == currentWallet) {
80
- revert ErrorComponentServiceWalletAddressIsSameAsCurrent();
81
- }
86
+ NftId productNftId = registry.getNftIdForAddress(msg.sender);
87
+ IInstance instance = IInstance(
88
+ registry.getObjectAddress(
89
+ registry.getParentNftId(productNftId)));
82
90
 
83
- info.wallet = newWallet;
84
- instance.getInstanceStore().updateComponent(componentNftId, info, KEEP_STATE());
85
- emit LogComponentServiceWalletAddressChanged(componentNftId, currentWallet, newWallet);
91
+ componentNftId = _verifyAndRegister(
92
+ instance,
93
+ componentAddress,
94
+ productNftId, // product is parent of component to be registered
95
+ address(0)); // token will be inhereited from product
86
96
  }
87
97
 
88
- // TODO implement
89
- function lock() external virtual {}
90
98
 
91
- // TODO implement
92
- function unlock() external virtual {}
99
+ /// @inheritdoc IComponentService
100
+ function approveTokenHandler(
101
+ IERC20Metadata token,
102
+ Amount amount
103
+ )
104
+ external
105
+ virtual
106
+ restricted()
107
+ {
108
+ // checks
109
+ (NftId componentNftId, IInstance instance) = _getAndVerifyComponent(COMPONENT(), true);
110
+ TokenHandler tokenHandler = instance.getInstanceReader().getTokenHandler(
111
+ componentNftId);
112
+
113
+ // effects
114
+ tokenHandler.approve(token, amount);
115
+ }
93
116
 
117
+
118
+ /// @inheritdoc IComponentService
119
+ function setWallet(address newWallet)
120
+ external
121
+ virtual
122
+ restricted()
123
+ {
124
+ // checks
125
+ (NftId componentNftId, IInstance instance) = _getAndVerifyComponent(COMPONENT(), true);
126
+ TokenHandler tokenHandler = instance.getInstanceReader().getTokenHandler(
127
+ componentNftId);
128
+
129
+ // effects
130
+ tokenHandler.setWallet(newWallet);
131
+ }
132
+
133
+ /// @inheritdoc IComponentService
134
+ function setLocked(bool locked)
135
+ external
136
+ virtual
137
+ restricted()
138
+ {
139
+ (, IInstance instance) = _getAndVerifyComponent(COMPONENT(), false);
140
+
141
+ address component = msg.sender;
142
+ instance.getInstanceAdmin().setComponentLocked(
143
+ component,
144
+ locked);
145
+ }
146
+
147
+
148
+ /// @inheritdoc IComponentService
94
149
  function withdrawFees(Amount amount)
95
150
  external
96
151
  virtual
152
+ restricted()
97
153
  returns (Amount withdrawnAmount)
98
154
  {
99
- (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
100
- IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
101
- address componentWallet = info.wallet;
155
+ // checks
156
+ (NftId componentNftId, IInstance instance) = _getAndVerifyComponent(COMPONENT(), true);
157
+ InstanceReader instanceReader = instance.getInstanceReader();
102
158
 
103
159
  // determine withdrawn amount
160
+ Amount maxAvailableAmount = instanceReader.getFeeAmount(componentNftId);
104
161
  withdrawnAmount = amount;
105
- if (withdrawnAmount.gte(AmountLib.max())) {
106
- withdrawnAmount = instance.getInstanceReader().getFeeAmount(componentNftId);
107
- } else if (withdrawnAmount.eqz()) {
162
+
163
+ // max amount -> withraw all available fees
164
+ if (amount == AmountLib.max()) {
165
+ withdrawnAmount = maxAvailableAmount;
166
+ }
167
+
168
+ // check modified withdrawn amount
169
+ if (withdrawnAmount.eqz()) {
108
170
  revert ErrorComponentServiceWithdrawAmountIsZero();
109
- } else {
110
- Amount withdrawLimit = instance.getInstanceReader().getFeeAmount(componentNftId);
111
- if (withdrawnAmount.gt(withdrawLimit)) {
112
- revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, withdrawLimit);
113
- }
171
+ } else if (withdrawnAmount > maxAvailableAmount) {
172
+ revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, maxAvailableAmount);
114
173
  }
115
174
 
175
+ // effects
116
176
  // decrease fee counters by withdrawnAmount
117
- _changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
177
+ _accountingService.decreaseComponentFees(
178
+ instance.getInstanceStore(),
179
+ componentNftId,
180
+ withdrawnAmount);
118
181
 
119
182
  // transfer amount to component owner
120
183
  address componentOwner = getRegistry().ownerOf(componentNftId);
121
- emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
122
- info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
184
+ TokenHandler tokenHandler = instanceReader.getTokenHandler(componentNftId);
185
+ emit LogComponentServiceComponentFeesWithdrawn(
186
+ componentNftId,
187
+ componentOwner,
188
+ address(tokenHandler.TOKEN()),
189
+ withdrawnAmount);
190
+
191
+ // interactions
192
+ // transfer amount to component owner
193
+ tokenHandler.pushFeeToken(
194
+ componentOwner,
195
+ withdrawnAmount);
123
196
  }
124
197
 
125
198
 
126
199
  //-------- product ------------------------------------------------------//
127
200
 
128
- function registerProduct()
201
+ /// @inheritdoc IComponentService
202
+ function registerProduct(address productAddress, address token)
129
203
  external
130
204
  virtual
205
+ restricted()
206
+ nonReentrant()
207
+ returns (NftId productNftId)
131
208
  {
132
- address contractAddress = msg.sender;
209
+ // checks
210
+ // check sender is registered instance
211
+ IRegistry registry = getRegistry();
212
+ if (!registry.isObjectType(msg.sender, INSTANCE())) {
213
+ revert ErrorComponentServiceCallerNotInstance(msg.sender);
214
+ }
133
215
 
134
- // 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);
216
+ // check provided address is product contract
217
+ if (!ContractLib.isProduct(address(registry), productAddress)) {
218
+ revert ErrorComponentServiceNotProduct(productAddress);
219
+ }
147
220
 
148
- // link distribution and pool to product
149
- _linkToProduct(instanceReader, instanceStore, productInfo.distributionNftId, productNftId);
150
- _linkToProduct(instanceReader, instanceStore, productInfo.poolNftId, productNftId);
221
+ IInstance instance = IInstance(msg.sender);
222
+ productNftId = _verifyAndRegister(
223
+ instance,
224
+ productAddress,
225
+ instance.getNftId(), // instance is parent of product to be registered
226
+ token);
151
227
  }
152
228
 
153
229
 
230
+ /// @inheritdoc IComponentService
154
231
  function setProductFees(
155
232
  Fee memory productFee, // product fee on net premium
156
233
  Fee memory processingFee // product fee on payout amounts
157
234
  )
158
235
  external
159
236
  virtual
237
+ restricted()
238
+ nonReentrant()
160
239
  {
161
- (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
162
- IComponents.ProductInfo memory productInfo = instance.getInstanceReader().getProductInfo(productNftId);
240
+ (NftId productNftId, IInstance instance) = _getAndVerifyComponent(PRODUCT(), true);
241
+ IComponents.FeeInfo memory feeInfo = instance.getInstanceReader().getFeeInfo(productNftId);
163
242
  bool feesChanged = false;
164
243
 
165
244
  // update product fee if required
166
- if(!FeeLib.eq(productInfo.productFee, productFee)) {
167
- _logUpdateFee(productNftId, "ProductFee", productInfo.productFee, productFee);
168
- productInfo.productFee = productFee;
245
+ if(!FeeLib.eq(feeInfo.productFee, productFee)) {
246
+ _logUpdateFee(productNftId, "ProductFee", feeInfo.productFee, productFee);
247
+ feeInfo.productFee = productFee;
169
248
  feesChanged = true;
170
249
  }
171
250
 
172
251
  // update processing fee if required
173
- if(!FeeLib.eq(productInfo.processingFee, processingFee)) {
174
- _logUpdateFee(productNftId, "ProcessingFee", productInfo.processingFee, processingFee);
175
- productInfo.processingFee = processingFee;
252
+ if(!FeeLib.eq(feeInfo.processingFee, processingFee)) {
253
+ _logUpdateFee(productNftId, "ProcessingFee", feeInfo.processingFee, processingFee);
254
+ feeInfo.processingFee = processingFee;
176
255
  feesChanged = true;
177
256
  }
178
257
 
179
258
  if(feesChanged) {
180
- instance.getInstanceStore().updateProduct(productNftId, productInfo, KEEP_STATE());
259
+ instance.getInstanceStore().updateFee(productNftId, feeInfo);
181
260
  emit LogComponentServiceProductFeesUpdated(productNftId);
182
261
  }
183
262
  }
184
263
 
185
- function increaseProductFees(
264
+
265
+ function _createProduct(
186
266
  InstanceStore instanceStore,
187
- NftId productNftId,
188
- Amount feeAmount
189
- )
190
- external
191
- virtual
192
- // TODO re-enable once role granting is stable and fixed
193
- // restricted()
267
+ NftId productNftId,
268
+ address productAddress,
269
+ address token
270
+ )
271
+ internal
272
+ virtual
194
273
  {
195
- _changeTargetBalance(INCREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
196
- }
274
+ // create product in instance instanceStore
275
+ IProductComponent product = IProductComponent(productAddress);
276
+ IComponents.ProductInfo memory initialProductInfo = product.getInitialProductInfo();
277
+ // force initialization of linked components with empty values to
278
+ // ensure no components are linked upon initialization of the product
279
+ initialProductInfo.poolNftId = NftIdLib.zero();
280
+ initialProductInfo.distributionNftId = NftIdLib.zero();
281
+ initialProductInfo.oracleNftId = new NftId[](initialProductInfo.expectedNumberOfOracles);
197
282
 
283
+ // create info
284
+ instanceStore.createProduct(
285
+ productNftId,
286
+ initialProductInfo);
198
287
 
199
- function decreaseProductFees(InstanceStore instanceStore, NftId productNftId, Amount feeAmount)
200
- external
201
- virtual
202
- // TODO re-enable once role granting is stable and fixed
203
- // restricted()
204
- {
205
- _changeTargetBalance(DECREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
288
+ instanceStore.createFee(
289
+ productNftId,
290
+ product.getInitialFeeInfo());
206
291
  }
207
292
 
208
293
  //-------- distribution -------------------------------------------------//
209
294
 
210
295
  /// @dev registers the sending component as a distribution component
211
- function registerDistribution()
212
- external
296
+ function _createDistribution(
297
+ InstanceStore instanceStore,
298
+ NftId productNftId,
299
+ NftId distributionNftId,
300
+ IComponents.ProductInfo memory productInfo
301
+ )
302
+ internal
213
303
  virtual
304
+ nonReentrant()
214
305
  {
215
- address contractAddress = msg.sender;
306
+ // check product is still expecting a distribution registration
307
+ if (!productInfo.hasDistribution) {
308
+ revert ErrorProductServiceNoDistributionExpected(productNftId);
309
+ }
310
+ if (productInfo.distributionNftId.gtz()) {
311
+ revert ErrorProductServiceDistributionAlreadyRegistered(productNftId, productInfo.distributionNftId);
312
+ }
216
313
 
217
- // register/create component info
218
- _register(
219
- contractAddress,
220
- DISTRIBUTION(),
221
- DISTRIBUTION_OWNER_ROLE());
314
+ // set distribution in product info
315
+ productInfo.distributionNftId = distributionNftId;
316
+ instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
222
317
  }
223
318
 
224
319
 
@@ -228,133 +323,85 @@ contract ComponentService is
228
323
  )
229
324
  external
230
325
  virtual
326
+ restricted()
231
327
  {
232
- (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
233
- (NftId productNftId, IComponents.ProductInfo memory productInfo) = _getLinkedProductInfo(
328
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyComponent(DISTRIBUTION(), true);
329
+ (NftId productNftId, IComponents.FeeInfo memory feeInfo) = _getLinkedFeeInfo(
234
330
  instance.getInstanceReader(), distributionNftId);
235
331
  bool feesChanged = false;
236
332
 
237
333
  // update distributino fee if required
238
- if(!FeeLib.eq(productInfo.distributionFee, distributionFee)) {
239
- _logUpdateFee(productNftId, "DistributionFee", productInfo.distributionFee, distributionFee);
240
- productInfo.distributionFee = distributionFee;
334
+ if(!FeeLib.eq(feeInfo.distributionFee, distributionFee)) {
335
+ _logUpdateFee(productNftId, "DistributionFee", feeInfo.distributionFee, distributionFee);
336
+ feeInfo.distributionFee = distributionFee;
241
337
  feesChanged = true;
242
338
  }
243
339
 
244
340
  // update min distribution owner fee if required
245
- if(!FeeLib.eq(productInfo.minDistributionOwnerFee, minDistributionOwnerFee)) {
246
- _logUpdateFee(productNftId, "MinDistributionOwnerFee", productInfo.minDistributionOwnerFee, minDistributionOwnerFee);
247
- productInfo.minDistributionOwnerFee = minDistributionOwnerFee;
341
+ if(!FeeLib.eq(feeInfo.minDistributionOwnerFee, minDistributionOwnerFee)) {
342
+ _logUpdateFee(productNftId, "MinDistributionOwnerFee", feeInfo.minDistributionOwnerFee, minDistributionOwnerFee);
343
+ feeInfo.minDistributionOwnerFee = minDistributionOwnerFee;
248
344
  feesChanged = true;
249
345
  }
250
346
 
251
347
  if(feesChanged) {
252
- instance.getInstanceStore().updateProduct(productNftId, productInfo, KEEP_STATE());
348
+ instance.getInstanceStore().updateFee(productNftId, feeInfo);
253
349
  emit LogComponentServiceDistributionFeesUpdated(distributionNftId);
254
350
  }
255
351
  }
256
352
 
257
- function increaseDistributionBalance(
258
- InstanceStore instanceStore,
259
- NftId distributionNftId,
260
- Amount amount,
261
- Amount feeAmount
262
- )
263
- external
264
- virtual
265
- // TODO re-enable once role granting is stable and fixed
266
- // restricted()
267
- {
268
- _changeTargetBalance(INCREASE, instanceStore, distributionNftId, amount, feeAmount);
269
- }
270
-
271
-
272
- function decreaseDistributionBalance(
273
- InstanceStore instanceStore,
274
- NftId distributionNftId,
275
- Amount amount,
276
- Amount feeAmount
277
- )
278
- external
279
- virtual
280
- // TODO re-enable once role granting is stable and fixed
281
- // restricted()
282
- {
283
- _changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
284
- }
285
-
286
- //-------- distributor -------------------------------------------------------//
287
-
288
- function increaseDistributorBalance(
289
- InstanceStore instanceStore,
290
- NftId distributorNftId,
291
- Amount amount,
292
- Amount feeAmount
293
- )
294
- external
295
- virtual
296
- // TODO re-enable once role granting is stable and fixed
297
- // restricted()
298
- {
299
- _changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
300
- }
301
-
302
- function decreaseDistributorBalance(
303
- InstanceStore instanceStore,
304
- NftId distributorNftId,
305
- Amount amount,
306
- Amount feeAmount
307
- )
308
- external
309
- virtual
310
- // TODO re-enable once role granting is stable and fixed
311
- // restricted()
312
- {
313
- _changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
314
- }
315
-
316
353
  //-------- oracle -------------------------------------------------------//
317
354
 
318
- function registerOracle()
319
- external
355
+ function _createOracle(
356
+ InstanceStore instanceStore,
357
+ NftId productNftId,
358
+ NftId oracleNftId,
359
+ IComponents.ProductInfo memory productInfo
360
+ )
361
+ internal
320
362
  virtual
321
363
  {
322
- address contractAddress = msg.sender;
364
+ // check product is still expecting an oracle registration
365
+ if (productInfo.expectedNumberOfOracles == 0) {
366
+ revert ErrorProductServiceNoOraclesExpected(productNftId);
367
+ }
368
+ if (productInfo.numberOfOracles == productInfo.expectedNumberOfOracles) {
369
+ revert ErrorProductServiceOraclesAlreadyRegistered(productNftId, productInfo.expectedNumberOfOracles);
370
+ }
323
371
 
324
- // register/create component setup
325
- (
326
- , // instance reader
327
- InstanceStore instanceStore,
328
- NftId componentNftId
329
- ) = _register(
330
- contractAddress,
331
- ORACLE(),
332
- ORACLE_OWNER_ROLE());
372
+ // update/add oracle to product info
373
+ productInfo.oracleNftId[productInfo.numberOfOracles] = oracleNftId;
374
+ productInfo.numberOfOracles++;
375
+ instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
333
376
  }
334
377
 
335
378
  //-------- pool ---------------------------------------------------------//
336
379
 
337
- function registerPool()
338
- external
380
+ function _createPool(
381
+ InstanceStore instanceStore,
382
+ NftId productNftId,
383
+ NftId poolNftId,
384
+ address componentAddress,
385
+ IComponents.ProductInfo memory productInfo
386
+ )
387
+ internal
339
388
  virtual
340
389
  {
341
- address contractAddress = msg.sender;
342
-
343
- // register/create component setup
344
- (
345
- , // instance reader
346
- InstanceStore instanceStore,
347
- NftId componentNftId
348
- ) = _register(
349
- contractAddress,
350
- POOL(),
351
- POOL_OWNER_ROLE());
390
+ // check product is still expecting a pool registration
391
+ //IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
392
+ if (productInfo.poolNftId.gtz()) {
393
+ revert ErrorProductServicePoolAlreadyRegistered(productNftId, productInfo.poolNftId);
394
+ }
352
395
 
353
396
  // create info
397
+ IPoolComponent pool = IPoolComponent(componentAddress);
354
398
  instanceStore.createPool(
355
- componentNftId,
356
- IPoolComponent(
357
- contractAddress).getInitialPoolInfo());
399
+ poolNftId,
400
+ pool.getInitialPoolInfo());
401
+
402
+ // update pool in product info
403
+ productInfo.poolNftId = poolNftId;
404
+ instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
358
405
  }
359
406
 
360
407
 
@@ -365,191 +412,144 @@ contract ComponentService is
365
412
  )
366
413
  external
367
414
  virtual
415
+ restricted()
368
416
  {
369
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
370
- (NftId productNftId, IComponents.ProductInfo memory productInfo) = _getLinkedProductInfo(
417
+ (NftId poolNftId, IInstance instance) = _getAndVerifyComponent(POOL(), true);
418
+
419
+ (NftId productNftId, IComponents.FeeInfo memory feeInfo) = _getLinkedFeeInfo(
371
420
  instance.getInstanceReader(), poolNftId);
372
421
  bool feesChanged = false;
373
422
 
374
423
  // update pool fee if required
375
- if(!FeeLib.eq(productInfo.poolFee, poolFee)) {
376
- _logUpdateFee(productNftId, "PoolFee", productInfo.poolFee, poolFee);
377
- productInfo.poolFee = poolFee;
424
+ if(!FeeLib.eq(feeInfo.poolFee, poolFee)) {
425
+ _logUpdateFee(productNftId, "PoolFee", feeInfo.poolFee, poolFee);
426
+ feeInfo.poolFee = poolFee;
378
427
  feesChanged = true;
379
428
  }
380
429
 
381
430
  // update staking fee if required
382
- if(!FeeLib.eq(productInfo.stakingFee, stakingFee)) {
383
- _logUpdateFee(productNftId, "StakingFee", productInfo.stakingFee, stakingFee);
384
- productInfo.stakingFee = stakingFee;
431
+ if(!FeeLib.eq(feeInfo.stakingFee, stakingFee)) {
432
+ _logUpdateFee(productNftId, "StakingFee", feeInfo.stakingFee, stakingFee);
433
+ feeInfo.stakingFee = stakingFee;
385
434
  feesChanged = true;
386
435
  }
387
436
 
388
437
  // update performance fee if required
389
- if(!FeeLib.eq(productInfo.performanceFee, performanceFee)) {
390
- _logUpdateFee(productNftId, "PerformanceFee", productInfo.performanceFee, performanceFee);
391
- productInfo.performanceFee = performanceFee;
438
+ if(!FeeLib.eq(feeInfo.performanceFee, performanceFee)) {
439
+ _logUpdateFee(productNftId, "PerformanceFee", feeInfo.performanceFee, performanceFee);
440
+ feeInfo.performanceFee = performanceFee;
392
441
  feesChanged = true;
393
442
  }
394
443
 
395
444
  if(feesChanged) {
396
- instance.getInstanceStore().updateProduct(productNftId, productInfo, KEEP_STATE());
445
+ instance.getInstanceStore().updateFee(productNftId, feeInfo);
397
446
  emit LogComponentServicePoolFeesUpdated(poolNftId);
398
447
  }
399
448
  }
400
449
 
401
- function increasePoolBalance(
402
- InstanceStore instanceStore,
403
- NftId poolNftId,
404
- Amount amount,
405
- Amount feeAmount
406
- )
407
- public
408
- virtual
409
- // TODO re-enable once role granting is stable and fixed
410
- // restricted()
411
- {
412
- _changeTargetBalance(INCREASE, instanceStore, poolNftId, amount, feeAmount);
413
- }
414
-
415
- function decreasePoolBalance(
416
- InstanceStore instanceStore,
417
- NftId poolNftId,
418
- Amount amount,
419
- Amount feeAmount
420
- )
421
- public
422
- virtual
423
- // TODO re-enable once role granting is stable and fixed
424
- // restricted()
425
- {
426
- _changeTargetBalance(DECREASE, instanceStore, poolNftId, amount, feeAmount);
427
- }
428
-
429
- //-------- bundle -------------------------------------------------------//
430
-
431
- function increaseBundleBalance(
432
- InstanceStore instanceStore,
433
- NftId bundleNftId,
434
- Amount amount,
435
- Amount feeAmount
436
- )
437
- external
438
- virtual
439
- // TODO re-enable once role granting is stable and fixed
440
- // restricted()
441
- {
442
- _changeTargetBalance(INCREASE, instanceStore, bundleNftId, amount, feeAmount);
443
- }
444
-
445
- function decreaseBundleBalance(
446
- InstanceStore instanceStore,
447
- NftId bundleNftId,
448
- Amount amount,
449
- Amount feeAmount
450
- )
451
- external
452
- virtual
453
- // TODO re-enable once role granting is stable and fixed
454
- // restricted()
455
- {
456
- _changeTargetBalance(DECREASE, instanceStore, bundleNftId, amount, feeAmount);
457
- }
458
-
459
-
460
- //-------- internal functions ------------------------------------------//
461
-
462
- function _changeTargetBalance(
463
- bool increase,
464
- InstanceStore instanceStore,
465
- NftId targetNftId,
466
- Amount amount,
467
- Amount feeAmount
468
- )
469
- internal
470
- virtual
471
- {
472
- Amount totalAmount = amount + feeAmount;
473
-
474
- if(increase) {
475
- if(totalAmount.gtz()) { instanceStore.increaseBalance(targetNftId, totalAmount); }
476
- if(feeAmount.gtz()) { instanceStore.increaseFees(targetNftId, feeAmount); }
477
- } else {
478
- if(totalAmount.gtz()) { instanceStore.decreaseBalance(targetNftId, totalAmount); }
479
- if(feeAmount.gtz()) { instanceStore.decreaseFees(targetNftId, feeAmount); }
480
- }
481
- }
482
450
 
483
- /// @dev registers the component represented by the provided address
484
- function _register(
485
- 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
451
+ /// @dev Registers the component represented by the provided address.
452
+ /// The caller must ensure componentAddress is IInstanceLinkedComponent.
453
+ function _verifyAndRegister(
454
+ IInstance instance,
455
+ address componentAddress,
456
+ NftId parentNftId,
457
+ address token
488
458
  )
489
459
  internal
490
460
  virtual
491
- returns (
492
- InstanceReader instanceReader,
493
- InstanceStore instanceStore,
494
- NftId componentNftId
495
- )
461
+ returns (NftId componentNftId)
496
462
  {
497
463
  (
498
- IInstance instance,
499
464
  IInstanceLinkedComponent component,
500
- address owner
465
+ IRegistry.ObjectInfo memory objectInfo // initial component info
501
466
  ) = _getAndVerifyRegisterableComponent(
502
467
  componentAddress,
503
- requiredType,
504
- requiredRole);
468
+ parentNftId);
505
469
 
506
- // register component with registry
507
- componentNftId = _registryService.registerComponent(
508
- component,
509
- requiredType,
510
- owner).nftId;
470
+ InstanceAdmin instanceAdmin = instance.getInstanceAdmin();
471
+ InstanceStore instanceStore = instance.getInstanceStore();
472
+ InstanceReader instanceReader = instance.getInstanceReader();
473
+ ObjectType componentType = objectInfo.objectType;
511
474
 
512
- component.linkToRegisteredNftId();
475
+ if(componentType == PRODUCT()) {
476
+ // register product with registry
477
+ componentNftId = _registryService.registerProduct(
478
+ component,
479
+ objectInfo.initialOwner).nftId;
513
480
 
514
- // save amended component info with instance
515
- instanceReader = instance.getInstanceReader();
516
- instanceStore = instance.getInstanceStore();
481
+ // create product info in instance store
482
+ _createProduct(instanceStore, componentNftId, componentAddress, token);
483
+ } else {
484
+ // register non product component with registry
485
+ componentNftId = _registryService.registerProductLinkedComponent(
486
+ component,
487
+ objectInfo.objectType,
488
+ objectInfo.initialOwner).nftId;
489
+
490
+ // create non product component info in instance store
491
+ NftId productNftId = parentNftId;
492
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
493
+ if(componentType == POOL()) {
494
+ _createPool(instanceStore, productNftId, componentNftId, componentAddress, productInfo);
495
+ } else if(componentType == DISTRIBUTION()) {
496
+ _createDistribution(instanceStore, productNftId, componentNftId, productInfo);
497
+ } else if(componentType == ORACLE()) {
498
+ _createOracle(instanceStore, productNftId, componentNftId, productInfo);
499
+ } else {
500
+ revert ErrorComponentServiceComponentTypeNotSupported(componentAddress, componentType);
501
+ }
502
+
503
+ // get product's token
504
+ token = address(instanceReader.getTokenHandler(productNftId).TOKEN());
505
+ }
517
506
 
507
+ _checkToken(instance, token);
508
+
509
+ // deploy and wire token handler
518
510
  IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
519
511
  componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
520
- address(componentInfo.token),
521
- address(instance.getInstanceAdmin().authority()));
522
-
512
+ address(getRegistry()),
513
+ address(component), // initially, component is its own wallet
514
+ token,
515
+ instanceAdmin.authority());
516
+
517
+ // register component with instance
523
518
  instanceStore.createComponent(
524
- component.getNftId(),
519
+ componentNftId,
525
520
  componentInfo);
526
521
 
527
- // setup initial component authorization
528
- _instanceService.initializeAuthorization(
529
- instance.getNftId(),
530
- component);
522
+ // link component contract to nft id
523
+ component.linkToRegisteredNftId();
531
524
 
532
- // TODO add logging
525
+ // authorize
526
+ instanceAdmin.initializeComponentAuthorization(componentAddress, componentType);
527
+
528
+ emit LogComponentServiceRegistered(
529
+ instance.getNftId(),
530
+ componentNftId,
531
+ componentType,
532
+ address(component),
533
+ token,
534
+ objectInfo.initialOwner);
533
535
  }
534
536
 
535
537
 
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
- )
538
+ function _checkToken(IInstance instance, address token)
543
539
  internal
540
+ view
544
541
  {
545
- // only link components that are registered
546
- if(componentNftId.eqz()) {
547
- return;
542
+ if (! instance.isTokenRegistryDisabled()) {
543
+ // check if provided token is whitelisted and active
544
+ if (!ContractLib.isActiveToken(
545
+ getRegistry().getTokenRegistryAddress(),
546
+ token,
547
+ block.chainid,
548
+ AccessManagerCloneable(authority()).getRelease())
549
+ ) {
550
+ revert ErrorComponentServiceTokenInvalid(token);
551
+ }
548
552
  }
549
-
550
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(componentNftId);
551
- componentInfo.productNftId = productNftId;
552
- instanceStore.updateComponent(componentNftId, componentInfo, KEEP_STATE());
553
553
  }
554
554
 
555
555
 
@@ -568,13 +568,7 @@ contract ComponentService is
568
568
  }
569
569
 
570
570
 
571
- function _createSelectors(bytes4 selector) internal pure returns (bytes4[] memory selectors) {
572
- selectors = new bytes4[](1);
573
- selectors[0] = selector;
574
- }
575
-
576
-
577
- function _getLinkedProductInfo(
571
+ function _getLinkedFeeInfo(
578
572
  InstanceReader instanceReader,
579
573
  NftId componentNftId
580
574
  )
@@ -582,59 +576,85 @@ contract ComponentService is
582
576
  view
583
577
  returns(
584
578
  NftId productNftId,
585
- IComponents.ProductInfo memory info
579
+ IComponents.FeeInfo memory info
586
580
  )
587
581
  {
588
- productNftId = instanceReader.getComponentInfo(componentNftId).productNftId;
589
- info = instanceReader.getProductInfo(productNftId);
582
+ productNftId = getRegistry().getParentNftId(componentNftId);
583
+ info = instanceReader.getFeeInfo(productNftId);
590
584
  }
591
585
 
592
586
 
593
- /// @dev based on the provided component address required type and role returns the component and related instance contract
594
- /// the function reverts iff:
587
+ /// @dev Based on the provided component address required type the component
588
+ /// and related instance contract this function reverts iff:
589
+ /// - the component parent does not match with the required parent
590
+ /// - the component release does not match with the service release
595
591
  /// - the component has already been registered
596
- /// - the component contract does not support IInstanceLinkedComponent
597
- /// - the component type does not match with the required type
598
- /// - the initial component owner misses the required role (with the instance access manager)
599
592
  function _getAndVerifyRegisterableComponent(
600
593
  address componentAddress,
601
- ObjectType requiredType,
602
- RoleId requiredRole
594
+ NftId requiredParent
603
595
  )
604
596
  internal
605
597
  view
606
598
  returns (
607
- IInstance instance,
608
599
  IInstanceLinkedComponent component,
609
- address owner
600
+ IRegistry.ObjectInfo memory info
610
601
  )
611
602
  {
612
- // check this is a component
613
603
  component = IInstanceLinkedComponent(componentAddress);
614
- if(!component.supportsInterface(type(IInstanceLinkedComponent).interfaceId)) {
615
- revert ErrorComponentServiceNotComponent(componentAddress);
604
+ info = component.getInitialInfo();
605
+
606
+ // check component parent
607
+ if(info.parentNftId != requiredParent) {
608
+ revert ErrorComponentServiceComponentParentInvalid(componentAddress, requiredParent, info.parentNftId);
616
609
  }
617
610
 
618
- // check component is of required type
619
- IRegistry.ObjectInfo memory info = component.getInitialInfo();
620
- if(info.objectType != requiredType) {
621
- revert ErrorComponentServiceInvalidType(componentAddress, requiredType, info.objectType);
611
+ // check component release (must match with service release)
612
+ if(component.getRelease() != getRelease()) {
613
+ revert ErrorComponentServiceComponentReleaseMismatch(componentAddress, getRelease(), component.getRelease());
622
614
  }
623
615
 
624
616
  // check component has not already been registered
625
- if (getRegistry().getNftId(componentAddress).gtz()) {
626
- revert ErrorComponentServiceAlreadyRegistered(componentAddress);
617
+ if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
618
+ revert ErrorComponentServiceComponentAlreadyRegistered(componentAddress);
627
619
  }
620
+ }
621
+
622
+
623
+ function _setLocked(InstanceAdmin instanceAdmin, address componentAddress, bool locked) internal {
624
+ instanceAdmin.setTargetLocked(componentAddress, locked);
625
+ }
628
626
 
629
- // check instance has assigned required role to inital owner
630
- instance = _getInstance(info.parentNftId);
631
- owner = info.initialOwner;
632
627
 
633
- if(!instance.getInstanceAdmin().hasRole(owner, requiredRole)) {
634
- revert ErrorComponentServiceExpectedRoleMissing(info.parentNftId, requiredRole, owner);
628
+ function _getAndVerifyComponent(ObjectType expectedType, bool isActive)
629
+ internal
630
+ view
631
+ returns (
632
+ NftId componentNftId,
633
+ IInstance instance
634
+ )
635
+ {
636
+ IRegistry.ObjectInfo memory info;
637
+ address instanceAddress;
638
+
639
+ if (expectedType != COMPONENT()) {
640
+ (info, instanceAddress) = ContractLib.getAndVerifyComponent(
641
+ getRegistry(),
642
+ msg.sender, // caller
643
+ expectedType,
644
+ isActive);
645
+ } else {
646
+ (info, instanceAddress) = ContractLib.getAndVerifyAnyComponent(
647
+ getRegistry(),
648
+ msg.sender,
649
+ isActive);
635
650
  }
651
+
652
+ // get component nft id and instance
653
+ componentNftId = info.nftId;
654
+ instance = IInstance(instanceAddress);
636
655
  }
637
656
 
657
+
638
658
  function _getDomain() internal pure virtual override returns(ObjectType) {
639
659
  return COMPONENT();
640
660
  }