@etherisc/gif-next 0.0.2-f18fb8b-243 → 0.0.2-f1b01e0-214

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