@etherisc/gif-next 0.0.2-858f0b8-208 → 0.0.2-85e1eb3-876

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