@etherisc/gif-next 0.0.2-f9b0591-801 → 0.0.2-fa35bce-363

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