@etherisc/gif-next 0.0.2-8ce6c0b-352 → 0.0.2-8d681eb-812

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