@etherisc/gif-next 0.0.2-85cbb88-630 → 0.0.2-85e1eb3-876

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (555) hide show
  1. package/README.md +103 -9
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1075 -0
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +790 -0
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +843 -0
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +673 -262
  10. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +1289 -0
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +202 -5
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +456 -24
  16. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  18. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +549 -209
  19. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +215 -18
  21. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +265 -16
  23. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +473 -17
  25. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +212 -473
  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 +139 -381
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +814 -399
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +228 -124
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +135 -187
  37. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +582 -141
  39. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  40. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  41. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  42. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1484 -0
  43. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  44. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +805 -0
  45. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  46. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2053 -0
  47. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  48. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +805 -0
  49. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  50. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1439 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  54. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +805 -0
  55. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  56. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1171 -0
  57. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  58. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1647 -0
  59. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  60. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +805 -0
  61. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  62. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2585 -0
  63. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  64. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +805 -0
  65. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  66. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +193 -45
  67. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  68. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +567 -67
  69. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  70. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +385 -60
  71. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  72. package/artifacts/contracts/instance/Instance.sol/Instance.json +573 -165
  73. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  74. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1034 -311
  75. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  76. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +369 -68
  77. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  78. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1685 -774
  79. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  80. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +399 -231
  81. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  82. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +143 -105
  83. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  84. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +983 -782
  85. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  86. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +866 -0
  87. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  88. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +8 -8
  89. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  90. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  91. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  92. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  93. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
  94. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  95. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +16 -5
  96. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
  97. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
  98. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  99. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  100. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  101. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  102. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  103. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  104. package/artifacts/contracts/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 +152 -350
  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 +129 -129
  112. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  113. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +98 -11
  114. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  115. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +128 -318
  116. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  117. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +198 -190
  118. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  119. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +177 -97
  120. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  121. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +198 -433
  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 +574 -270
  126. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  127. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +216 -104
  128. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  129. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +383 -53
  130. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  131. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +158 -212
  132. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  133. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +711 -340
  134. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  135. package/artifacts/contracts/pool/Pool.sol/Pool.json +148 -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 +925 -545
  140. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  141. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +230 -106
  142. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  143. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +353 -180
  144. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  145. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +159 -99
  146. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  147. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +287 -427
  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 +466 -245
  152. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  153. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +187 -123
  154. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  155. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +301 -9
  156. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  157. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +350 -18
  158. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  159. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +417 -101
  160. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  161. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +183 -80
  162. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  163. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +272 -222
  164. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  165. package/artifacts/contracts/{shared/ComponentVerifyingService.sol/ComponentVerifyingService.json → product/IRiskService.sol/IRiskService.json} +283 -157
  166. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  167. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +532 -311
  168. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  169. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +783 -0
  170. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  171. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +196 -108
  172. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  173. package/artifacts/contracts/product/PricingService.sol/PricingService.json +249 -329
  174. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  175. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +165 -137
  176. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  177. package/artifacts/contracts/product/Product.sol/Product.json +279 -419
  178. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  179. package/artifacts/contracts/product/RiskService.sol/RiskService.json +873 -0
  180. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  181. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +774 -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 +394 -35
  186. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  187. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +97 -148
  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 +620 -92
  194. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  195. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +795 -394
  196. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
  197. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1061 -0
  198. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  199. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +136 -290
  200. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  201. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +141 -89
  202. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  203. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +2152 -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 +483 -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 +120 -60
  212. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  213. package/artifacts/contracts/shared/Component.sol/Component.json +86 -277
  214. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  215. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +624 -560
  216. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  217. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +198 -120
  218. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  219. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +632 -0
  220. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  221. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  222. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  223. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  224. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  225. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  226. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  227. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +92 -93
  228. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  229. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +535 -240
  230. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  231. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +118 -129
  232. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  233. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +42 -6
  234. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  235. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  236. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  237. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +35 -0
  238. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  239. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  240. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  241. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +167 -0
  242. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  243. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  244. package/artifacts/contracts/shared/IService.sol/IService.json +84 -2
  245. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  246. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  247. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  248. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +117 -318
  249. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  250. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +48 -7
  251. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  252. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  253. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  254. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  255. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  256. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +41 -57
  257. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  258. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  259. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  260. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +141 -97
  261. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  262. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  263. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  264. package/artifacts/contracts/shared/Service.sol/Service.json +86 -111
  265. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  266. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +585 -12
  267. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  268. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
  269. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  270. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
  271. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  272. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1087 -160
  273. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  274. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +235 -123
  275. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  276. package/artifacts/contracts/staking/Staking.sol/Staking.json +1273 -405
  277. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  278. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +424 -0
  279. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  280. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  281. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  282. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +225 -104
  283. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  284. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +175 -223
  285. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  286. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +282 -281
  287. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  288. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +144 -96
  289. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  290. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +962 -729
  291. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  292. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +135 -49
  293. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  294. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  295. package/artifacts/contracts/type/Amount.sol/AmountLib.json +63 -10
  296. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  297. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +45 -19
  298. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
  299. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +174 -0
  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 +69 -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/String.sol/StrLib.json +50 -2
  336. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  337. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +24 -5
  338. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  339. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +109 -35
  340. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  341. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
  342. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  343. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +120 -2
  344. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  345. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +11 -1
  346. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  347. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +656 -0
  348. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  349. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +142 -0
  350. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  351. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +11 -1
  352. package/contracts/accounting/AccountingService.sol +274 -0
  353. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  354. package/contracts/accounting/IAccountingService.sol +47 -0
  355. package/contracts/authorization/AccessAdmin.sol +458 -269
  356. package/contracts/authorization/AccessAdminLib.sol +396 -0
  357. package/contracts/authorization/AccessManagerCloneable.sol +146 -4
  358. package/contracts/authorization/Authorization.sol +159 -208
  359. package/contracts/authorization/IAccess.sol +25 -6
  360. package/contracts/authorization/IAccessAdmin.sol +87 -79
  361. package/contracts/authorization/IAuthorization.sol +9 -36
  362. package/contracts/authorization/IServiceAuthorization.sol +57 -17
  363. package/contracts/authorization/ServiceAuthorization.sol +255 -25
  364. package/contracts/distribution/BasicDistribution.sol +21 -29
  365. package/contracts/distribution/BasicDistributionAuthorization.sol +34 -10
  366. package/contracts/distribution/Distribution.sol +48 -84
  367. package/contracts/distribution/DistributionService.sol +276 -130
  368. package/contracts/distribution/DistributionServiceManager.sol +8 -11
  369. package/contracts/distribution/IDistributionComponent.sol +11 -14
  370. package/contracts/distribution/IDistributionService.sol +56 -26
  371. package/contracts/examples/fire/DamageLevel.sol +59 -0
  372. package/contracts/examples/fire/FirePool.sol +86 -0
  373. package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
  374. package/contracts/examples/fire/FireProduct.sol +433 -0
  375. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  376. package/contracts/examples/fire/FireUSD.sol +26 -0
  377. package/contracts/examples/unpermissioned/SimpleDistribution.sol +81 -0
  378. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  379. package/contracts/examples/unpermissioned/SimpleOracle.sol +133 -0
  380. package/contracts/examples/unpermissioned/SimplePool.sol +102 -0
  381. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  382. package/contracts/examples/unpermissioned/SimpleProduct.sol +437 -0
  383. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  384. package/contracts/instance/BundleSet.sol +42 -38
  385. package/contracts/instance/IInstance.sol +102 -43
  386. package/contracts/instance/IInstanceService.sol +59 -34
  387. package/contracts/instance/Instance.sol +193 -100
  388. package/contracts/instance/InstanceAdmin.sol +275 -158
  389. package/contracts/instance/InstanceAuthorizationV3.sol +120 -56
  390. package/contracts/instance/InstanceReader.sol +478 -251
  391. package/contracts/instance/InstanceService.sol +293 -236
  392. package/contracts/instance/InstanceServiceManager.sol +8 -13
  393. package/contracts/instance/InstanceStore.sol +24 -2
  394. package/contracts/instance/RiskSet.sol +126 -0
  395. package/contracts/instance/base/BalanceStore.sol +4 -6
  396. package/contracts/instance/base/ObjectCounter.sol +1 -2
  397. package/contracts/instance/base/ObjectLifecycle.sol +13 -10
  398. package/contracts/instance/base/ObjectSet.sol +31 -33
  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 +2 -5
  407. package/contracts/oracle/BasicOracleAuthorization.sol +15 -8
  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 +23 -26
  412. package/contracts/oracle/OracleService.sol +119 -87
  413. package/contracts/oracle/OracleServiceManager.sol +8 -11
  414. package/contracts/pool/BasicPool.sol +39 -41
  415. package/contracts/pool/BasicPoolAuthorization.sol +43 -11
  416. package/contracts/pool/BundleService.sol +218 -128
  417. package/contracts/pool/BundleServiceManager.sol +8 -11
  418. package/contracts/pool/IBundleService.sol +43 -33
  419. package/contracts/pool/IPoolComponent.sol +20 -10
  420. package/contracts/pool/IPoolService.sol +97 -77
  421. package/contracts/pool/Pool.sol +146 -124
  422. package/contracts/pool/PoolLib.sol +341 -0
  423. package/contracts/pool/PoolService.sol +419 -256
  424. package/contracts/pool/PoolServiceManager.sol +6 -9
  425. package/contracts/product/ApplicationService.sol +153 -80
  426. package/contracts/product/ApplicationServiceManager.sol +6 -6
  427. package/contracts/product/BasicProduct.sol +13 -46
  428. package/contracts/product/BasicProductAuthorization.sol +33 -10
  429. package/contracts/product/ClaimService.sol +382 -194
  430. package/contracts/product/ClaimServiceManager.sol +6 -6
  431. package/contracts/product/IApplicationService.sol +29 -3
  432. package/contracts/product/IClaimService.sol +48 -11
  433. package/contracts/product/IPolicyService.sol +61 -37
  434. package/contracts/product/IPricingService.sol +11 -10
  435. package/contracts/product/IProductComponent.sol +28 -5
  436. package/contracts/product/IRiskService.sol +48 -0
  437. package/contracts/product/PolicyService.sol +443 -273
  438. package/contracts/product/PolicyServiceLib.sol +139 -0
  439. package/contracts/product/PolicyServiceManager.sol +6 -9
  440. package/contracts/product/PricingService.sol +90 -84
  441. package/contracts/product/PricingServiceManager.sol +6 -9
  442. package/contracts/product/Product.sol +201 -100
  443. package/contracts/product/RiskService.sol +190 -0
  444. package/contracts/product/RiskServiceManager.sol +39 -0
  445. package/contracts/registry/ChainNft.sol +72 -40
  446. package/contracts/registry/IRegistry.sol +83 -32
  447. package/contracts/registry/IRegistryService.sol +3 -10
  448. package/contracts/registry/IRelease.sol +29 -0
  449. package/contracts/registry/ITransferInterceptor.sol +1 -2
  450. package/contracts/registry/Registry.sol +370 -212
  451. package/contracts/registry/RegistryAdmin.sol +110 -287
  452. package/contracts/registry/RegistryAuthorization.sol +308 -0
  453. package/contracts/registry/RegistryService.sol +42 -67
  454. package/contracts/registry/RegistryServiceManager.sol +5 -5
  455. package/contracts/registry/ReleaseAdmin.sol +195 -0
  456. package/contracts/registry/ReleaseLifecycle.sol +8 -3
  457. package/contracts/registry/ReleaseRegistry.sol +279 -241
  458. package/contracts/registry/ServiceAuthorizationV3.sol +205 -63
  459. package/contracts/registry/TokenRegistry.sol +61 -59
  460. package/contracts/shared/Component.sol +70 -137
  461. package/contracts/shared/ComponentService.sol +452 -346
  462. package/contracts/shared/ComponentServiceManager.sol +10 -7
  463. package/contracts/shared/ContractLib.sol +312 -0
  464. package/contracts/shared/IComponent.sol +6 -18
  465. package/contracts/shared/IComponentService.sol +50 -41
  466. package/contracts/shared/IInstanceLinkedComponent.sol +7 -27
  467. package/contracts/shared/IKeyValueStore.sol +1 -1
  468. package/contracts/shared/ILifecycle.sol +3 -1
  469. package/contracts/shared/INftOwnable.sol +4 -0
  470. package/contracts/shared/IPolicyHolder.sol +12 -22
  471. package/contracts/shared/IRegisterable.sol +22 -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 +83 -40
  475. package/contracts/shared/KeyValueStore.sol +4 -4
  476. package/contracts/shared/Lifecycle.sol +15 -4
  477. package/contracts/shared/NftOwnable.sol +33 -11
  478. package/contracts/shared/PolicyHolder.sol +20 -59
  479. package/contracts/shared/Registerable.sol +52 -21
  480. package/contracts/shared/RegistryLinked.sol +9 -14
  481. package/contracts/shared/Service.sol +22 -38
  482. package/contracts/shared/TokenHandler.sol +310 -26
  483. package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
  484. package/contracts/staking/IStaking.sol +164 -66
  485. package/contracts/staking/IStakingService.sol +45 -78
  486. package/contracts/staking/Staking.sol +639 -228
  487. package/contracts/staking/StakingLib.sol +168 -0
  488. package/contracts/staking/StakingManager.sol +11 -13
  489. package/contracts/staking/StakingReader.sol +55 -90
  490. package/contracts/staking/StakingService.sol +62 -152
  491. package/contracts/staking/StakingServiceManager.sol +9 -7
  492. package/contracts/staking/StakingStore.sol +640 -361
  493. package/contracts/staking/TargetManagerLib.sol +8 -4
  494. package/contracts/type/Amount.sol +31 -5
  495. package/contracts/type/Blocknumber.sol +22 -16
  496. package/contracts/type/ChainId.sol +92 -0
  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 +76 -44
  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 +61 -55
  507. package/contracts/type/Seconds.sol +26 -1
  508. package/contracts/type/Selector.sol +5 -0
  509. package/contracts/type/StateId.sol +15 -1
  510. package/contracts/type/String.sol +12 -0
  511. package/contracts/type/Timestamp.sol +14 -7
  512. package/contracts/type/UFixed.sol +57 -126
  513. package/contracts/type/Version.sol +57 -6
  514. package/contracts/{shared → upgradeability}/IVersionable.sol +3 -0
  515. package/contracts/{shared → upgradeability}/ProxyManager.sol +96 -49
  516. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +24 -0
  517. package/contracts/{shared → upgradeability}/Versionable.sol +8 -5
  518. package/package.json +5 -4
  519. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  520. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  521. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  522. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  523. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  524. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
  525. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  526. package/artifacts/contracts/product/IProductService.sol/IProductService.json +0 -400
  527. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  528. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  529. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  530. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  531. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
  532. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  533. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  534. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  535. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  536. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  537. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  538. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
  539. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  540. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  541. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  542. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
  543. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -460
  544. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  545. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -10
  546. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  547. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  548. package/contracts/instance/module/IAccess.sol +0 -46
  549. package/contracts/product/IProductService.sol +0 -33
  550. package/contracts/product/ProductService.sol +0 -124
  551. package/contracts/product/ProductServiceManager.sol +0 -42
  552. package/contracts/shared/ComponentVerifyingService.sol +0 -117
  553. package/contracts/shared/InitializableCustom.sol +0 -177
  554. package/contracts/shared/UpgradableProxyWithAdmin.sol +0 -16
  555. package/contracts/staking/StakeManagerLib.sol +0 -231
@@ -3,31 +3,26 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
5
5
 
6
- import {Amount, AmountLib} from "../type/Amount.sol";
7
- import {Blocknumber, BlocknumberLib} from "../type/Blocknumber.sol";
8
- import {ChainNft} from "../registry/ChainNft.sol";
9
- import {Component} from "../shared/Component.sol";
10
6
  import {IRegistry} from "../registry/IRegistry.sol";
11
- import {IRegistryService} from "../registry/IRegistryService.sol";
12
7
  import {IStaking} from "./IStaking.sol";
13
- import {IVersionable} from "../shared/IVersionable.sol";
14
- import {Key32} from "../type/Key32.sol";
8
+
9
+ import {Amount, AmountLib} from "../type/Amount.sol";
10
+ import {ChainId, ChainIdLib} from "../type/ChainId.sol";
11
+ import {Blocknumber, BlocknumberLib} from "../type/Blocknumber.sol";
15
12
  import {KeyValueStore} from "../shared/KeyValueStore.sol";
16
13
  import {KEEP_STATE} from "../type/StateId.sol";
17
14
  import {NftId, NftIdLib} from "../type/NftId.sol";
18
15
  import {NftIdSet} from "../shared/NftIdSet.sol";
19
- import {ObjectType, INSTANCE, PROTOCOL, STAKE, STAKING, TARGET} from "../type/ObjectType.sol";
16
+ import {ObjectType} from "../type/ObjectType.sol";
17
+ import {PROTOCOL, STAKE, TARGET} from "../type/ObjectType.sol";
20
18
  import {Seconds, SecondsLib} from "../type/Seconds.sol";
19
+ import {StakingLib} from "./StakingLib.sol";
20
+ import {StakingLifecycle} from "./StakingLifecycle.sol";
21
21
  import {StakingReader} from "./StakingReader.sol";
22
22
  import {TargetManagerLib} from "./TargetManagerLib.sol";
23
23
  import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
24
24
  import {TokenRegistry} from "../registry/TokenRegistry.sol";
25
25
  import {UFixed, UFixedLib} from "../type/UFixed.sol";
26
- import {Version, VersionLib} from "../type/Version.sol";
27
- import {Versionable} from "../shared/Versionable.sol";
28
-
29
- import {RegistryAdmin} from "../registry/RegistryAdmin.sol";
30
- import {StakingLifecycle} from "./StakingLifecycle.sol";
31
26
 
32
27
 
33
28
  contract StakingStore is
@@ -36,51 +31,44 @@ contract StakingStore is
36
31
  StakingLifecycle
37
32
  {
38
33
 
39
- event LogStakingStoreReserveBalanceIncreased(NftId targetNftId, Amount dipAmount, Amount reserveBalance, Blocknumber lastUpdatedIn);
40
- event LogStakingStoreReserveBalanceDecreased(NftId targetNftId, Amount dipAmount, Amount reserveBalance, Blocknumber lastUpdatedIn);
41
-
42
- event LogStakingStoreTotalValueLockedIncreased(NftId targetNftId, address token, Amount amount, Amount newBalance, Blocknumber lastUpdatedIn);
43
- event LogStakingStoreTotalValueLockedDecreased(NftId targetNftId, address token, Amount amount, Amount newBalance, Blocknumber lastUpdatedIn);
34
+ // token
35
+ error ErrorStakingStoreTokenNotRegistered(ChainId chainId, address token);
36
+ error ErrorStakingStoreTokenAlreadyAdded(ChainId chainId, address token);
37
+ error ErrorStakingStoreTokenUnknown(ChainId chainId, address token);
44
38
 
45
- event LogStakingStoreStakesIncreased(NftId nftId, Amount addedAmount, Amount newBalance, Blocknumber lastUpdatedIn);
46
- event LogStakingStoreStakesDecreased(NftId nftId, Amount addedAmount, Amount newBalance, Blocknumber lastUpdatedIn);
47
-
48
- event LogStakingStoreRewardsIncreased(NftId nftId, Amount addedAmount, Amount newBalance, Blocknumber lastUpdatedIn);
49
- event LogStakingStoreRewardsDecreased(NftId nftId, Amount addedAmount, Amount newBalance, Blocknumber lastUpdatedIn);
50
-
51
- event LogStakingStoreRewardsRestaked(NftId nftId, Amount amount, Amount rewardAmount, Amount rewardIncrementAmount, Amount newBalance, Blocknumber lastUpdatedIn);
39
+ // target
40
+ error ErrorStakingStoreTargetNotInitialized(NftId targetNftId);
52
41
 
53
42
  // in/decreasing reward reserves
54
43
  error ErrorStakingStoreNotTarget(NftId targetNftId);
55
- error ErrorStakingStoreRewardReservesInsufficient(NftId targetNftId, Amount dipAmount, Amount reservesBalanceAmount);
44
+ error ErrorStakingStoreRewardReservesInsufficient(NftId targetNftId, Amount reserveAmount, Amount claimedAmount);
56
45
 
57
- // creating and updating of balance
58
- error ErrorStakingStoreBalanceAlreadyInitialized(NftId nftId);
59
- error ErrorStakingStoreBalanceNotInitialized(NftId nftId);
46
+ // stakes
47
+ error ErrorStakingStoreStakesExceedingTargetMaxAmount(NftId targetNftId, Amount maxStakedAmount, Amount newIStaking);
48
+ error ErrorStakingStoreStakeNotInitialized(NftId nftId);
60
49
 
61
- // update balance
62
- error ErrorStakingStoreTvlBalanceNotInitialized(NftId nftId);
50
+ // creating and updating of staking balance
51
+ error ErrorStakingStoreStakeBalanceAlreadyInitialized(NftId nftId);
52
+ error ErrorStakingStoreStakeBalanceNotInitialized(NftId nftI);
53
+
54
+ // creating and updating of tvl balance
55
+ error ErrorStakingStoreTvlBalanceAlreadyInitialized(NftId nftId, address token);
56
+ error ErrorStakingStoreTvlBalanceNotInitialized(NftId nftId, address token);
63
57
 
64
58
  IRegistry private _registry;
65
59
  NftIdSet private _targetNftIdSet;
66
60
  StakingReader private _reader;
67
61
 
68
- // staking rate
69
- mapping(uint256 chainId => mapping(address token => UFixed stakingRate)) private _stakingRate;
70
-
71
- // total, stake and reward balances
72
- mapping(NftId nftId => Amount stakes) private _stakeBalance;
73
- mapping(NftId nftId => Amount rewards) private _rewardBalance;
74
- mapping(NftId nftId => Amount reserves) private _reserveBalance;
62
+ // stakes
63
+ mapping(NftId stakeNftId => IStaking.StakeInfo) private _stakeInfo;
75
64
 
76
- mapping(NftId nftId => Timestamp lastUpdatedAt) private _lastUpdatedAt;
77
- mapping(NftId nftId => Blocknumber lastUpdatedIn) private _lastUpdatedIn;
65
+ // targets
66
+ mapping(NftId targetNftId => IStaking.TargetInfo) private _targetInfo;
67
+ mapping(NftId targetNftId => mapping(address token => IStaking.TvlInfo)) private _tvlInfo;
68
+ mapping(NftId targetNftId => address [] token) _targetToken;
78
69
 
79
- // total value locked balance
80
- mapping(NftId nftId => mapping(address token => Amount tvl)) private _tvlBalance;
81
- mapping(NftId nftId => mapping(address token => Amount tvlInDip)) private _tvlInDip;
82
- mapping(NftId nftId => Amount tvlRequiredDip) private _tvlRequiredDip;
83
- mapping(NftId nftId => Blocknumber lastUpdatedIn) private _tvlLastUpdatedIn;
70
+ // staking rate
71
+ mapping(ChainId chainId => mapping(address token => IStaking.TokenInfo)) private _tokenInfo;
84
72
 
85
73
 
86
74
  constructor(IRegistry registry, StakingReader reader)
@@ -90,526 +78,817 @@ contract StakingStore is
90
78
  setAuthority(registry.getAuthority());
91
79
 
92
80
  // set internal variables
93
- _registry = registry; //TODO if keeps registry -> RegistryLinked and checks registry address
81
+ _registry = registry;
94
82
  _reader = reader;
95
83
  _targetNftIdSet = new NftIdSet();
96
84
 
97
85
  // register protocol target
98
86
  _createTarget(
99
87
  NftIdLib.toNftId(1101),
100
- IStaking.TargetInfo({
101
- objectType: PROTOCOL(),
102
- chainId: 1,
103
- lockingPeriod: TargetManagerLib.getDefaultLockingPeriod(),
104
- rewardRate: TargetManagerLib.getDefaultRewardRate()}));
88
+ PROTOCOL(),
89
+ TargetManagerLib.getDefaultLockingPeriod(),
90
+ TargetManagerLib.getDefaultRewardRate(),
91
+ false); // no parameter check
105
92
  }
106
93
 
107
94
 
108
- //--- staking rate specific functions -----------------------------------//
95
+ //--- token management --------------------------------------------------//
96
+
97
+ /// @dev Registers a token for tvl management.
98
+ function addToken(
99
+ ChainId chainId,
100
+ address token
101
+ )
102
+ external
103
+ restricted() // token registry via staking
104
+ {
105
+ // checks
106
+
107
+ IStaking.TokenInfo storage info = _tokenInfo[chainId][token];
108
+
109
+ // check token is not yet registered
110
+ if (info.lastUpdateIn.gtz()) {
111
+ revert ErrorStakingStoreTokenAlreadyAdded(chainId, token);
112
+ }
113
+
114
+ info.stakingRate = UFixedLib.zero();
115
+ info.lastUpdateIn = BlocknumberLib.current();
116
+ }
117
+
109
118
 
119
+ /// @dev Sets the staking rate for the token.
110
120
  function setStakingRate(
111
- uint256 chainId,
121
+ ChainId chainId,
112
122
  address token,
113
123
  UFixed stakingRate
114
124
  )
115
125
  external
116
- restricted()
126
+ restricted() // staking
127
+ returns (
128
+ UFixed oldStakingRate,
129
+ Blocknumber lastUpdatedIn
130
+ )
117
131
  {
118
- _stakingRate[chainId][token] = stakingRate;
132
+ IStaking.TokenInfo storage info = _tokenInfo[chainId][token];
133
+ if (info.lastUpdateIn.eqz()) {
134
+ revert ErrorStakingStoreTokenUnknown(chainId, token);
135
+ }
136
+
137
+ // get previous values
138
+ oldStakingRate = info.stakingRate;
139
+ lastUpdatedIn = info.lastUpdateIn;
140
+
141
+ // update values
142
+ info.stakingRate = stakingRate;
143
+ info.lastUpdateIn = BlocknumberLib.current();
119
144
  }
120
145
 
121
- //--- target specific functions -----------------------------------------//
146
+ //--- target management -------------------------------------------------//
122
147
 
123
148
  function createTarget(
124
149
  NftId targetNftId,
125
- IStaking.TargetInfo memory targetInfo
150
+ ObjectType objectType,
151
+ Seconds lockingPeriod,
152
+ UFixed rewardRate
126
153
  )
127
154
  external
128
- restricted()
155
+ restricted() // staking
129
156
  {
130
- _createTarget(targetNftId, targetInfo);
157
+ _createTarget(targetNftId, objectType, lockingPeriod, rewardRate, true);
131
158
  }
132
159
 
133
160
 
134
- function updateTarget(
135
- NftId targetNftId,
136
- IStaking.TargetInfo memory targetInfo
161
+ function setLockingPeriod(
162
+ NftId targetNftId,
163
+ Seconds lockingPeriod
137
164
  )
138
165
  external
139
- restricted()
166
+ restricted() // staking
167
+ returns (
168
+ Seconds oldLockingPeriod,
169
+ Blocknumber lastUpdatedIn
170
+ )
140
171
  {
141
- _update(
142
- targetNftId.toKey32(TARGET()),
143
- abi.encode(targetInfo), KEEP_STATE());
172
+ TargetManagerLib.checkLockingPeriod(targetNftId, lockingPeriod);
173
+
174
+ IStaking.TargetInfo storage targetInfo;
175
+ (targetInfo, lastUpdatedIn) = _verifyAndUpdateTarget(targetNftId);
176
+
177
+ oldLockingPeriod = targetInfo.lockingPeriod;
178
+ targetInfo.lockingPeriod = lockingPeriod;
144
179
  }
145
180
 
146
181
 
147
- function increaseReserves(
148
- NftId targetNftId,
149
- Amount dipAmount
182
+ function setRewardRate(
183
+ NftId targetNftId,
184
+ UFixed rewardRate
150
185
  )
151
186
  external
152
- restricted()
153
- returns (Amount newReserveBalance)
187
+ restricted() // staking
188
+ returns (
189
+ UFixed oldRewardRate,
190
+ Blocknumber lastUpdatedIn
191
+ )
154
192
  {
155
- newReserveBalance = _reserveBalance[targetNftId] + dipAmount;
156
- Blocknumber lastUpdatedIn = _updateReserves(targetNftId, newReserveBalance);
193
+ TargetManagerLib.checkRewardRate(targetNftId, rewardRate);
194
+
195
+ IStaking.TargetInfo storage targetInfo;
196
+ (targetInfo, lastUpdatedIn) = _verifyAndUpdateTarget(targetNftId);
157
197
 
158
- emit LogStakingStoreReserveBalanceIncreased(targetNftId, dipAmount, newReserveBalance, lastUpdatedIn);
198
+ oldRewardRate = targetInfo.rewardRate;
199
+ targetInfo.rewardRate = rewardRate;
159
200
  }
160
201
 
161
202
 
162
- function decreaseReserves(
163
- NftId targetNftId,
164
- Amount dipAmount
203
+ function setMaxStakedAmount(
204
+ NftId targetNftId,
205
+ Amount maxStakedAmount
165
206
  )
166
207
  external
167
- restricted()
168
- returns (Amount newReserveBalance)
208
+ restricted() // staking
209
+ returns (
210
+ Amount oldMaxStakedAmount,
211
+ Blocknumber lastUpdatedIn
212
+ )
169
213
  {
170
- Amount reserveAmount = _reserveBalance[targetNftId];
171
- if (dipAmount > reserveAmount) {
172
- revert ErrorStakingStoreRewardReservesInsufficient(
173
- targetNftId,
174
- dipAmount,
175
- reserveAmount);
176
- }
177
-
178
- newReserveBalance = _reserveBalance[targetNftId] - dipAmount;
179
- Blocknumber lastUpdatedIn = _updateReserves(targetNftId, newReserveBalance);
214
+ IStaking.TargetInfo storage targetInfo;
215
+ (targetInfo, lastUpdatedIn) = _verifyAndUpdateTarget(targetNftId);
180
216
 
181
- emit LogStakingStoreReserveBalanceDecreased(targetNftId, dipAmount, newReserveBalance, lastUpdatedIn);
217
+ oldMaxStakedAmount = targetInfo.maxStakedAmount;
218
+ targetInfo.maxStakedAmount = maxStakedAmount;
182
219
  }
183
220
 
184
221
 
185
- //--- tvl specific functions -------------------------------------//
222
+ // TODO move to private functions
223
+ function _verifyAndUpdateTarget(NftId targetNftId)
224
+ private
225
+ returns (
226
+ IStaking.TargetInfo storage targetInfo,
227
+ Blocknumber lastUpdatedIn
228
+ )
229
+ {
230
+ // checks
231
+ targetInfo = _getAndVerifyTarget(targetNftId);
232
+ lastUpdatedIn = targetInfo.lastUpdateIn;
233
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
234
+ }
186
235
 
187
- function increaseTotalValueLocked(
236
+
237
+ // TODO move to private functions
238
+ function _createTarget(
188
239
  NftId targetNftId,
189
- UFixed stakingRate,
190
- address token,
191
- Amount amount
240
+ ObjectType objectType,
241
+ Seconds lockingPeriod,
242
+ UFixed rewardRate,
243
+ bool checkParameters
192
244
  )
193
- external
194
- restricted()
195
- returns (Amount newBalance)
245
+ private
196
246
  {
197
- (
198
- Blocknumber tvlLastUpdatedIn,
199
- Amount oldBalance,
200
- Amount oldDipBalance
201
- ) = _getAndVerifyTvl(targetNftId, token);
202
-
203
- newBalance = oldBalance + amount;
204
- Amount newDipBalance = newBalance.multiplyWith(stakingRate);
205
-
206
- // update new tvl balances
207
- _tvlBalance[targetNftId][token] = newBalance;
208
- _tvlInDip[targetNftId][token] = newDipBalance;
247
+ // checks
248
+ if (checkParameters) {
249
+ TargetManagerLib.checkTargetParameters(
250
+ _registry,
251
+ _reader,
252
+ targetNftId,
253
+ objectType,
254
+ lockingPeriod,
255
+ rewardRate);
256
+ }
209
257
 
210
- // update new amount of required dip
211
- _tvlRequiredDip[targetNftId] = _tvlRequiredDip[targetNftId] - oldDipBalance + newDipBalance;
258
+ // effects
259
+ IStaking.TargetInfo storage targetInfo = _targetInfo[targetNftId];
260
+ targetInfo.stakedAmount = AmountLib.zero();
261
+ targetInfo.rewardAmount = AmountLib.zero();
262
+ targetInfo.reserveAmount = AmountLib.zero();
263
+ targetInfo.maxStakedAmount = AmountLib.max();
212
264
 
213
- // update last updated in
214
- _tvlLastUpdatedIn[targetNftId] = BlocknumberLib.currentBlocknumber();
265
+ targetInfo.objectType = objectType;
266
+ targetInfo.lockingPeriod = lockingPeriod;
267
+ targetInfo.rewardRate = rewardRate;
268
+ targetInfo.chainId = ChainIdLib.fromNftId(targetNftId);
269
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
215
270
 
216
- emit LogStakingStoreTotalValueLockedIncreased(targetNftId, token, amount, newBalance, tvlLastUpdatedIn);
271
+ // add new target to target set
272
+ _targetNftIdSet.add(targetNftId);
217
273
  }
218
274
 
219
275
 
220
- function decreaseTotalValueLocked(
276
+ function addTargetToken(
221
277
  NftId targetNftId,
222
- UFixed stakingRate,
223
- address token,
224
- Amount amount
278
+ address token
225
279
  )
226
280
  external
227
281
  restricted()
228
- returns (Amount newBalance)
229
282
  {
230
- (
231
- Blocknumber tvlLastUpdatedIn,
232
- Amount oldBalance,
233
- Amount oldDipBalance
234
- ) = _getAndVerifyTvl(targetNftId, token);
283
+ // checks
235
284
 
236
- newBalance = oldBalance - amount;
237
- Amount newDipBalance = AmountLib.toAmount((
238
- stakingRate * newBalance.toUFixed()).toInt());
285
+ // skip registering if tvl balance has already been initialized
286
+ IStaking.TvlInfo storage tvlInfo = _tvlInfo[targetNftId][token];
287
+ if (tvlInfo.lastUpdateIn.gtz()) {
288
+ return;
289
+ }
239
290
 
240
- // update new tvl balances
241
- _tvlBalance[targetNftId][token] = newBalance;
242
- _tvlInDip[targetNftId][token] = newDipBalance;
291
+ // check target exists
292
+ _getAndVerifyTarget(targetNftId);
243
293
 
244
- // update new amount of required dip
245
- _tvlRequiredDip[targetNftId] = _tvlRequiredDip[targetNftId] - oldDipBalance + newDipBalance;
294
+ // check token is known for chain id of target
295
+ ChainId chainId = ChainIdLib.fromNftId(targetNftId);
296
+ if (_tokenInfo[chainId][token].lastUpdateIn.eqz()) {
297
+ revert ErrorStakingStoreTokenUnknown(chainId, token);
298
+ }
246
299
 
247
- // update last updated in
248
- _tvlLastUpdatedIn[targetNftId] = BlocknumberLib.currentBlocknumber();
300
+ // effects
301
+ tvlInfo.tvlAmount = AmountLib.zero();
302
+ tvlInfo.lastUpdateIn = BlocknumberLib.current();
249
303
 
250
- emit LogStakingStoreTotalValueLockedDecreased(targetNftId, token, amount, newBalance, tvlLastUpdatedIn);
304
+ // add token to list of know tokens for target
305
+ _targetToken[targetNftId].push(token);
251
306
  }
252
307
 
253
- //--- stake specific functions -------------------------------------//
254
308
 
255
- function create(
256
- NftId stakeNftId,
257
- IStaking.StakeInfo memory stakeInfo
309
+ function refillRewardReserves(
310
+ NftId targetNftId,
311
+ Amount dipAmount
258
312
  )
259
313
  external
260
314
  restricted()
315
+ returns (Amount newReserveBalance)
261
316
  {
262
- _create(
263
- stakeNftId.toKey32(STAKE()),
264
- abi.encode(stakeInfo));
317
+ // checks
318
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(targetNftId);
319
+ Blocknumber lastUpdateIn = targetInfo.lastUpdateIn;
265
320
 
266
- _createStakeBalance(stakeNftId);
321
+ // effects
322
+ targetInfo.reserveAmount = targetInfo.reserveAmount + dipAmount;
323
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
324
+
325
+ // logging
326
+ newReserveBalance = targetInfo.reserveAmount;
327
+ emit IStaking.LogStakingRewardReservesRefilled(
328
+ targetNftId,
329
+ dipAmount,
330
+ _registry.ownerOf(targetNftId),
331
+ newReserveBalance,
332
+ lastUpdateIn);
267
333
  }
268
334
 
269
- function update(
270
- NftId stakeNftId,
271
- IStaking.StakeInfo memory stakeInfo
335
+
336
+ function withdrawRewardReserves(
337
+ NftId targetNftId,
338
+ Amount dipAmount
272
339
  )
273
340
  external
274
341
  restricted()
342
+ returns (Amount newReserveBalance)
275
343
  {
276
- _update(
277
- stakeNftId.toKey32(STAKE()),
278
- abi.encode(stakeInfo),
279
- KEEP_STATE());
344
+ // checks
345
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(targetNftId);
346
+
347
+ // effects
348
+ Blocknumber lastUpdateIn = _decreaseReserves(targetNftId, targetInfo, dipAmount);
349
+
350
+ // logging
351
+ newReserveBalance = targetInfo.reserveAmount;
352
+ emit IStaking.LogStakingRewardReservesWithdrawn(
353
+ targetNftId,
354
+ dipAmount,
355
+ _registry.ownerOf(targetNftId),
356
+ newReserveBalance,
357
+ lastUpdateIn);
280
358
  }
281
359
 
282
- //--- general functions --------------------------------------------//
283
360
 
361
+ function _spendRewardReserves(
362
+ NftId targetNftId,
363
+ IStaking.TargetInfo storage targetInfo,
364
+ Amount dipAmount
365
+ )
366
+ private
367
+ {
368
+ Blocknumber lastUpdateIn = _decreaseReserves(targetNftId, targetInfo, dipAmount);
284
369
 
285
- function increaseStake(
286
- NftId nftId,
370
+ // logging
371
+ emit IStaking.LogStakingRewardReservesSpent(
372
+ targetNftId,
373
+ dipAmount,
374
+ targetInfo.reserveAmount,
375
+ lastUpdateIn);
376
+ }
377
+
378
+
379
+ function _decreaseReserves(
287
380
  NftId targetNftId,
288
- Amount amount
381
+ IStaking.TargetInfo storage targetInfo,
382
+ Amount dipAmount
289
383
  )
290
- external
291
- restricted()
384
+ private
385
+ returns ( Blocknumber lastUpdateIn)
292
386
  {
293
- Blocknumber lastUpdatedIn = _checkBalanceExists(nftId);
294
-
295
- _updateStakeBalance(
296
- nftId,
297
- _stakeBalance[nftId] + amount, // new stake balance
298
- _rewardBalance[nftId]); // unchanged reward balance
387
+ lastUpdateIn = targetInfo.lastUpdateIn;
299
388
 
300
- _updateTargetBalance(
301
- targetNftId,
302
- _stakeBalance[targetNftId] + amount,
303
- _rewardBalance[targetNftId]);
389
+ // check if reserves are sufficient
390
+ if (dipAmount > targetInfo.reserveAmount) {
391
+ revert ErrorStakingStoreRewardReservesInsufficient(
392
+ targetNftId,
393
+ targetInfo.reserveAmount,
394
+ dipAmount);
395
+ }
304
396
 
305
- emit LogStakingStoreStakesIncreased(nftId, amount, _stakeBalance[nftId], lastUpdatedIn);
397
+ // effects
398
+ targetInfo.reserveAmount = targetInfo.reserveAmount - dipAmount;
399
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
306
400
  }
307
401
 
308
402
 
309
- function restakeRewards(
310
- NftId nftId,
403
+ //--- tvl specific functions -------------------------------------//
404
+
405
+ function increaseTotalValueLocked(
311
406
  NftId targetNftId,
312
- Amount rewardIncrementAmount
407
+ address token,
408
+ Amount amount
313
409
  )
314
410
  external
315
411
  restricted()
412
+ returns (Amount newBalance)
316
413
  {
317
- Blocknumber lastUpdatedIn = _checkBalanceExists(nftId);
318
- Amount stakeAmount = _stakeBalance[nftId];
319
- Amount rewardAmount = _rewardBalance[nftId];
414
+ // checks
415
+ IStaking.TvlInfo storage tvlInfo = _getAndVerifyTvl(targetNftId, token);
320
416
 
321
- // move all rewards to stake balance
322
- _updateStakeBalance(
323
- nftId,
324
- stakeAmount + rewardAmount + rewardIncrementAmount, // new stake balance
325
- AmountLib.zero()); // new reward balance
417
+ // effects
418
+ tvlInfo.tvlAmount = tvlInfo.tvlAmount + amount;
419
+ tvlInfo.lastUpdateIn = BlocknumberLib.current();
420
+ newBalance = tvlInfo.tvlAmount;
421
+ }
326
422
 
327
- _updateTargetBalance(
328
- targetNftId,
329
- _stakeBalance[targetNftId] + rewardAmount + rewardIncrementAmount,
330
- _rewardBalance[targetNftId] - rewardAmount);
331
423
 
332
- emit LogStakingStoreRewardsRestaked(nftId, stakeAmount, rewardAmount, rewardIncrementAmount, _stakeBalance[nftId], lastUpdatedIn);
424
+ function decreaseTotalValueLocked(
425
+ NftId targetNftId,
426
+ address token,
427
+ Amount amount
428
+ )
429
+ external
430
+ restricted()
431
+ returns (Amount newBalance)
432
+ {
433
+ // checks
434
+ IStaking.TvlInfo storage tvlInfo = _getAndVerifyTvl(targetNftId, token);
435
+
436
+ // effects
437
+ tvlInfo.tvlAmount = tvlInfo.tvlAmount - amount;
438
+ tvlInfo.lastUpdateIn = BlocknumberLib.current();
439
+ newBalance = tvlInfo.tvlAmount;
333
440
  }
334
441
 
442
+ //--- stake specific functions -------------------------------------//
335
443
 
336
- function updateRewards(
337
- NftId nftId,
444
+ function createStake(
445
+ NftId stakeNftId,
338
446
  NftId targetNftId,
339
- Amount rewardIncrementAmount
447
+ Amount stakedAmount
340
448
  )
341
449
  external
342
450
  restricted()
451
+ returns (Timestamp lockedUntil)
343
452
  {
344
- Blocknumber lastUpdatedIn = _checkBalanceExists(nftId);
345
-
346
- // increse rewards by increment
347
- _updateStakeBalance(
348
- nftId,
349
- _stakeBalance[nftId], // unchanged stake balance
350
- _rewardBalance[nftId] + rewardIncrementAmount); // new reward balance
351
-
352
- _updateTargetBalance(
453
+ // checks
454
+ lockedUntil = StakingLib.checkCreateParameters(
455
+ _reader,
353
456
  targetNftId,
354
- _stakeBalance[targetNftId],
355
- _rewardBalance[targetNftId] + rewardIncrementAmount);
457
+ stakedAmount);
356
458
 
357
- emit LogStakingStoreRewardsIncreased(nftId, rewardIncrementAmount, _rewardBalance[nftId], lastUpdatedIn);
358
- }
459
+ IStaking.StakeInfo storage stakeInfo = _stakeInfo[stakeNftId];
460
+ if (stakeInfo.lastUpdateIn.gtz()) {
461
+ revert ErrorStakingStoreStakeBalanceAlreadyInitialized(stakeNftId);
462
+ }
359
463
 
464
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(targetNftId);
465
+ _checkMaxStakedAmount(targetNftId, targetInfo, stakedAmount);
466
+
467
+ // effects
468
+ // update target
469
+ targetInfo.stakedAmount = targetInfo.stakedAmount + stakedAmount;
470
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
471
+
472
+ // update stake
473
+ stakeInfo.targetNftId = targetNftId;
474
+ stakeInfo.stakedAmount = stakedAmount;
475
+ stakeInfo.rewardAmount = AmountLib.zero();
476
+ stakeInfo.lockedUntil = lockedUntil;
477
+ stakeInfo.lastUpdateAt = TimestampLib.current();
478
+ stakeInfo.lastUpdateIn = BlocknumberLib.current();
479
+ }
360
480
 
361
- function claimUpTo(
362
- NftId nftId,
363
- NftId targetNftId,
364
- Amount maxClaimAmount
481
+ /// @dev Increases the stake amount and optionally restakes the rewards.
482
+ /// IMPORTANT: Function updateRewards must be called before this function in the same transaction.
483
+ function increaseStakes(
484
+ NftId stakeNftId,
485
+ Amount stakeIncreaseAmount, // additional staked amount
486
+ Seconds additionalLockingPeriod, // duration to increase locked until
487
+ bool restakeRewards
365
488
  )
366
489
  external
367
490
  restricted()
368
- returns (Amount claimedAmount)
491
+ returns (
492
+ Amount stakeBalance,
493
+ Amount rewardBalance,
494
+ Timestamp lockedUntil
495
+ )
369
496
  {
370
- Blocknumber lastUpdatedIn = _checkBalanceExists(nftId);
371
-
372
- // determine the claimable rewards amount
373
- claimedAmount = AmountLib.min(maxClaimAmount, _rewardBalance[nftId]);
497
+ // checks
498
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
499
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
500
+ Amount restakedRewardAmount = stakeInfo.rewardAmount;
501
+
502
+ // calculate new values (with restaking)
503
+ if (restakeRewards && restakedRewardAmount.gtz()) {
504
+ Amount totalStakeIncreaseAmount = stakeIncreaseAmount + restakedRewardAmount;
505
+ _checkMaxStakedAmount(stakeInfo.targetNftId, targetInfo, totalStakeIncreaseAmount);
506
+
507
+ // effects
508
+ // update target
509
+ targetInfo.stakedAmount = targetInfo.stakedAmount + totalStakeIncreaseAmount;
510
+ targetInfo.rewardAmount = targetInfo.rewardAmount - stakeInfo.rewardAmount;
511
+
512
+ // update stake
513
+ stakeInfo.stakedAmount = stakeInfo.stakedAmount + totalStakeIncreaseAmount;
514
+ stakeInfo.rewardAmount = AmountLib.zero();
515
+
516
+ // calculate new values (without restaking)
517
+ } else {
518
+ _checkMaxStakedAmount(stakeInfo.targetNftId, targetInfo, stakeIncreaseAmount);
519
+
520
+ // effects
521
+ // update target and stake
522
+ targetInfo.stakedAmount = targetInfo.stakedAmount + stakeIncreaseAmount;
523
+ stakeInfo.stakedAmount = stakeInfo.stakedAmount + stakeIncreaseAmount;
524
+ }
374
525
 
375
- // decrease rewards by claimed amount
376
- _updateStakeBalance(
377
- nftId,
378
- _stakeBalance[nftId], // unchanged stake balance
379
- _rewardBalance[nftId] - claimedAmount); // new reward balance
526
+ // update meta data for target and stake
527
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
528
+ stakeInfo.lastUpdateAt = TimestampLib.current();
529
+ stakeInfo.lastUpdateIn = BlocknumberLib.current();
380
530
 
381
- _updateTargetBalance(
382
- targetNftId,
383
- _stakeBalance[targetNftId],
384
- _rewardBalance[targetNftId] - claimedAmount);
531
+ // increase locked until if applicable
532
+ if (additionalLockingPeriod.gtz()) {
533
+ stakeInfo.lockedUntil = stakeInfo.lockedUntil.addSeconds(additionalLockingPeriod);
534
+ }
385
535
 
386
- emit LogStakingStoreRewardsDecreased(nftId, claimedAmount, _rewardBalance[nftId], lastUpdatedIn);
536
+ // set return values
537
+ stakeBalance = stakeInfo.stakedAmount;
538
+ rewardBalance = stakeInfo.rewardAmount;
539
+ lockedUntil = stakeInfo.lockedUntil;
387
540
  }
388
541
 
389
542
 
390
- function unstakeUpTo(
391
- NftId nftId,
392
- NftId targetNftId,
393
- Amount maxUnstakeAmount,
394
- Amount maxClaimAmount
543
+ /// @dev Decreases the staking and reward amounts.
544
+ /// The function attepmts to unstake up to the specified max amounts.
545
+ /// In case the specified amounts are higher than the current staked and reward amounts, the avaiable amounts are unstaked.
546
+ /// The method optionally restakes the rewards.
547
+ /// IMPORTANT: Function updateRewards must be called before this function in the same transaction.
548
+ function decreaseStakes(
549
+ NftId stakeNftId,
550
+ Amount maxUnstakedAmount,
551
+ Amount maxClaimAmount,
552
+ bool restakeRewards
395
553
  )
396
554
  external
397
555
  restricted()
398
556
  returns (
557
+ Amount restakedRewardAmount,
399
558
  Amount unstakedAmount,
400
- Amount claimedAmount
559
+ Amount claimedAmount,
560
+ Amount stakeBalance,
561
+ Amount rewardBalance,
562
+ Timestamp lockedUntil
401
563
  )
402
564
  {
403
- Blocknumber lastUpdatedIn = _checkBalanceExists(nftId);
565
+ // checks
566
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
567
+ NftId targetNftId = stakeInfo.targetNftId;
568
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(targetNftId);
404
569
 
405
- // determine amounts
406
- unstakedAmount = AmountLib.min(maxUnstakeAmount, _stakeBalance[nftId]);
407
- claimedAmount = AmountLib.min(maxClaimAmount, _rewardBalance[nftId]);
570
+ // restake rewards if applicable
571
+ if (restakeRewards && stakeInfo.rewardAmount.gtz()) {
572
+ restakedRewardAmount = stakeInfo.rewardAmount;
573
+ _checkMaxStakedAmount(targetNftId, targetInfo, restakedRewardAmount);
408
574
 
409
- // decrease stakes and rewards as determined
410
- _updateStakeBalance(
411
- nftId,
412
- _stakeBalance[nftId] - unstakedAmount, // unchanged stake balance
413
- _rewardBalance[nftId] - claimedAmount); // new reward balance
575
+ // reserves used for restaking
576
+ _spendRewardReserves(targetNftId, targetInfo, restakedRewardAmount);
414
577
 
415
- _updateTargetBalance(
416
- targetNftId,
417
- _stakeBalance[targetNftId] - unstakedAmount,
418
- _rewardBalance[targetNftId] - claimedAmount);
578
+ // update target
579
+ targetInfo.stakedAmount = targetInfo.stakedAmount + restakedRewardAmount;
580
+ targetInfo.rewardAmount = targetInfo.rewardAmount - restakedRewardAmount;
419
581
 
420
- emit LogStakingStoreStakesDecreased(nftId, unstakedAmount, _stakeBalance[nftId], lastUpdatedIn);
421
- emit LogStakingStoreRewardsDecreased(nftId, claimedAmount, _rewardBalance[nftId], lastUpdatedIn);
422
- }
582
+ // update stake
583
+ stakeInfo.stakedAmount = stakeInfo.stakedAmount + restakedRewardAmount;
584
+ stakeInfo.rewardAmount = AmountLib.zero();
423
585
 
424
- //--- view functions -----------------------------------------------//
425
-
426
- function getStakingReader() external view returns (StakingReader stakingReader){
427
- return _reader;
428
- }
586
+ } else {
587
+ restakedRewardAmount = AmountLib.zero();
588
+ }
589
+
590
+ // determine amounts
591
+ unstakedAmount = AmountLib.min(maxUnstakedAmount, stakeInfo.stakedAmount);
592
+ claimedAmount = AmountLib.min(maxClaimAmount, stakeInfo.rewardAmount);
593
+
594
+ // update reserves if rewards are claimed
595
+ if (!restakeRewards) {
596
+ // check if reserves are sufficient
597
+ if (claimedAmount > targetInfo.reserveAmount) {
598
+ revert ErrorStakingStoreRewardReservesInsufficient(
599
+ stakeInfo.targetNftId,
600
+ targetInfo.reserveAmount,
601
+ claimedAmount);
602
+ }
603
+
604
+ targetInfo.reserveAmount = targetInfo.reserveAmount - claimedAmount;
605
+ }
429
606
 
430
- // TODO rename
431
- function getTargetNftIdSet() external view returns (NftIdSet targetNftIdSet){
432
- return _targetNftIdSet;
607
+ // update target
608
+ targetInfo.stakedAmount = targetInfo.stakedAmount - unstakedAmount;
609
+ targetInfo.rewardAmount = targetInfo.rewardAmount - claimedAmount;
610
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
611
+
612
+ // update stake
613
+ stakeInfo.stakedAmount = stakeInfo.stakedAmount - unstakedAmount;
614
+ stakeInfo.rewardAmount = stakeInfo.rewardAmount - claimedAmount;
615
+ stakeInfo.lastUpdateAt = TimestampLib.current();
616
+ stakeInfo.lastUpdateIn = BlocknumberLib.current();
617
+
618
+ // set return values
619
+ stakeBalance = stakeInfo.stakedAmount;
620
+ rewardBalance = stakeInfo.rewardAmount;
621
+ lockedUntil = stakeInfo.lockedUntil;
433
622
  }
434
623
 
435
- function getStakingRate(uint256 chainId, address token) external view returns (UFixed stakingRate) { return _stakingRate[chainId][token]; }
436
624
 
437
- function exists(NftId stakeNftId) external view returns (bool) { return exists(stakeNftId.toKey32(STAKE())); }
438
-
439
- function getTotalValueLocked(NftId nftId, address token) external view returns (Amount tvlBalanceAmount) { return _tvlBalance[nftId][token]; }
440
- function getRequiredStakeBalance(NftId nftId) external view returns (Amount requiredAmount) { return _tvlRequiredDip[nftId]; }
441
-
442
- function getReserveBalance(NftId nftId) external view returns (Amount balanceAmount) { return _reserveBalance[nftId]; }
443
- function getStakeBalance(NftId nftId) external view returns (Amount balanceAmount) { return _stakeBalance[nftId]; }
444
- function getRewardBalance(NftId nftId) external view returns (Amount rewardAmount) { return _rewardBalance[nftId]; }
445
- function getBalanceUpdatedAt(NftId nftId) external view returns (Timestamp updatedAt) { return _lastUpdatedAt[nftId]; }
446
- function getBalanceUpdatedIn(NftId nftId) external view returns (Blocknumber blocknumber) { return _lastUpdatedIn[nftId]; }
447
-
448
-
449
- function getTargetBalances(NftId nftId)
625
+ function updateRewards(
626
+ NftId stakeNftId
627
+ )
450
628
  external
451
- view
629
+ restricted()
452
630
  returns (
631
+ Amount rewardIncreaseAmount,
632
+ Seconds targetLockingPeriod,
453
633
  Amount stakeBalance,
454
634
  Amount rewardBalance,
455
- Amount reserveBalance,
456
- Blocknumber lastUpdatedIn
635
+ Timestamp lockedUntil
457
636
  )
458
637
  {
459
- stakeBalance = _stakeBalance[nftId];
460
- rewardBalance = _rewardBalance[nftId];
461
- reserveBalance = _reserveBalance[nftId];
462
- lastUpdatedIn = _lastUpdatedIn[nftId];
638
+ // checks
639
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
640
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
641
+
642
+ // get seconds since last update on stake
643
+ Seconds duration = SecondsLib.toSeconds(
644
+ block.timestamp - stakeInfo.lastUpdateAt.toInt());
645
+
646
+ // calculate reward increase since
647
+ rewardIncreaseAmount = StakingLib.calculateRewardAmount(
648
+ targetInfo.rewardRate,
649
+ duration,
650
+ stakeInfo.stakedAmount);
651
+
652
+ // effects
653
+ if (rewardIncreaseAmount.gtz()) {
654
+ // update target
655
+ targetInfo.rewardAmount = targetInfo.rewardAmount + rewardIncreaseAmount;
656
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
657
+
658
+ // update stake
659
+ stakeInfo.rewardAmount = stakeInfo.rewardAmount + rewardIncreaseAmount;
660
+ stakeInfo.lastUpdateIn = BlocknumberLib.current();
661
+ stakeInfo.lastUpdateAt = TimestampLib.current();
662
+ }
663
+
664
+ // set remaining return values
665
+ targetLockingPeriod = targetInfo.lockingPeriod;
666
+ stakeBalance = stakeInfo.stakedAmount;
667
+ rewardBalance = stakeInfo.rewardAmount;
668
+ lockedUntil = stakeInfo.lockedUntil;
463
669
  }
464
670
 
465
671
 
466
- function getStakeBalances(NftId nftId)
672
+ function restakeRewards(
673
+ NftId stakeNftId,
674
+ Amount additionalRewardAmount,
675
+ Seconds additionalLockingPeriod // duration to increase locked until
676
+ )
467
677
  external
468
- view
678
+ restricted()
469
679
  returns (
470
- Amount stakeBalance,
471
- Amount rewardBalance,
472
- Timestamp lastUpdatedAt
680
+ Amount newstakedAmount
473
681
  )
474
682
  {
475
- stakeBalance = _stakeBalance[nftId];
476
- rewardBalance = _rewardBalance[nftId];
477
- lastUpdatedAt = _lastUpdatedAt[nftId];
683
+ // checks
684
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
685
+
686
+ Amount oldRewardAmount = stakeInfo.rewardAmount;
687
+ Amount updatedRewardAmount = stakeInfo.rewardAmount + additionalRewardAmount;
688
+
689
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
690
+ _checkMaxStakedAmount(stakeInfo.targetNftId, targetInfo, updatedRewardAmount);
691
+
692
+ // effects
693
+ // update target
694
+ targetInfo.stakedAmount = targetInfo.stakedAmount + updatedRewardAmount;
695
+ targetInfo.rewardAmount = targetInfo.rewardAmount - oldRewardAmount;
696
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
697
+
698
+ // update stake
699
+ stakeInfo.stakedAmount = stakeInfo.stakedAmount + updatedRewardAmount;
700
+ stakeInfo.rewardAmount = AmountLib.zero();
701
+ stakeInfo.lastUpdateAt = TimestampLib.current();
702
+ stakeInfo.lastUpdateIn = BlocknumberLib.current();
703
+
704
+ // increase locked until if applicable
705
+ if (additionalLockingPeriod.gtz()) {
706
+ stakeInfo.lockedUntil.addSeconds(additionalLockingPeriod);
707
+ }
478
708
  }
479
709
 
480
- //--- private functions -------------------------------------------//
481
710
 
482
- function _createTarget(
483
- NftId targetNftId,
484
- IStaking.TargetInfo memory targetInfo
485
- )
486
- private
487
- {
488
- _create(
489
- targetNftId.toKey32(TARGET()),
490
- abi.encode(targetInfo));
711
+ //--- view functions -----------------------------------------------//
491
712
 
492
- // initialize tvl and stake balance
493
- _tvlLastUpdatedIn[targetNftId]= BlocknumberLib.currentBlocknumber();
494
- _createTargetBalance(targetNftId);
713
+ function getStakingReader() external view returns (StakingReader stakingReader){
714
+ return _reader;
715
+ }
495
716
 
496
- _targetNftIdSet.add(targetNftId);
717
+
718
+ function exists(NftId stakeNftId) external view returns (bool) {
719
+ return _stakeInfo[stakeNftId].lastUpdateIn.gtz();
497
720
  }
498
721
 
499
- function _updateReserves(
500
- NftId targetNftId,
501
- Amount newRewardBalance
502
- )
503
- private
504
- returns (Blocknumber lastUpdatedIn)
722
+
723
+ function getRequiredStakeBalance(NftId targetNftId)
724
+ external
725
+ view
726
+ returns (Amount requiredStakedAmount)
505
727
  {
506
- if (_lastUpdatedIn[targetNftId].eqz()) {
507
- revert ErrorStakingStoreNotTarget(targetNftId);
728
+ address [] memory tokens = _targetToken[targetNftId];
729
+ if (tokens.length == 0) {
730
+ return AmountLib.zero();
508
731
  }
509
732
 
510
- lastUpdatedIn = _lastUpdatedIn[targetNftId];
733
+ requiredStakedAmount = AmountLib.zero();
734
+ ChainId targetChainId = _targetInfo[targetNftId].chainId;
735
+ address token;
736
+ Amount tvlAmount;
737
+ UFixed stakingRate;
511
738
 
512
- _reserveBalance[targetNftId] = newRewardBalance;
513
- _lastUpdatedIn[targetNftId] = BlocknumberLib.currentBlocknumber();
514
- }
739
+ for (uint256 i = 0; i < tokens.length; i++) {
740
+ token = tokens[i];
741
+ tvlAmount = _tvlInfo[targetNftId][token].tvlAmount;
742
+ if (tvlAmount.eqz()) { continue; }
515
743
 
744
+ stakingRate = _tokenInfo[targetChainId][token].stakingRate;
745
+ if (stakingRate.eqz()) { continue; }
516
746
 
517
- function _createTargetBalance(NftId nftId)
518
- private
519
- {
520
- if (_lastUpdatedIn[nftId].gtz()) {
521
- revert ErrorStakingStoreBalanceAlreadyInitialized(nftId);
747
+ requiredStakedAmount = requiredStakedAmount + tvlAmount.multiplyWith(stakingRate);
522
748
  }
749
+ }
750
+
751
+
752
+ /// @dev Returns true iff current stake amount is still locked
753
+ function isStakeLocked(NftId stakeNftId) external view returns (bool) {
754
+ return _stakeInfo[stakeNftId].lockedUntil > TimestampLib.current();
755
+ }
756
+
757
+
758
+ /// @dev Returns the stake infos for the specified stake.
759
+ function getStakeInfo(NftId stakeNftId) external view returns (IStaking.StakeInfo memory stakeInfo) {
760
+ return _stakeInfo[stakeNftId];
761
+ }
762
+
763
+
764
+ /// @dev Returns the stake infos for the specified stake.
765
+ function getStakeTarget(NftId stakeNftId) external view returns (NftId targetNftId) {
766
+ return _stakeInfo[stakeNftId].targetNftId;
767
+ }
768
+
769
+
770
+ /// @dev Returns the target infos for the specified target.
771
+ function getTargetInfo(NftId targetNftId) external view returns (IStaking.TargetInfo memory targetInfo) {
772
+ return _targetInfo[targetNftId];
773
+ }
774
+
775
+
776
+ /// @dev Returns the tvl infos for the specified target.
777
+ function getTvlInfo(NftId targetNftId, address token) external view returns (IStaking.TvlInfo memory tvlInfo) {
778
+ return _tvlInfo[targetNftId][token];
779
+ }
780
+
781
+
782
+ /// @dev Returns the tvl infos for the specified target.
783
+ function getTokenInfo(ChainId chainId, address token) external view returns (IStaking.TokenInfo memory tokenInfo) {
784
+ return _tokenInfo[chainId][token];
785
+ }
523
786
 
524
- // set target balances to 0
525
- _stakeBalance[nftId] = AmountLib.zero();
526
- _rewardBalance[nftId] = AmountLib.zero();
527
- _reserveBalance[nftId] = AmountLib.zero();
528
787
 
529
- // set last updated in to current block number
530
- // we don't need last updated at timestamp for targets
531
- _lastUpdatedIn[nftId] = BlocknumberLib.currentBlocknumber();
788
+ function getTargetSet() external view returns (NftIdSet targetNftIdSet) {
789
+ return _targetNftIdSet;
532
790
  }
533
791
 
534
792
 
535
- function _createStakeBalance(NftId nftId)
793
+ //--- private stake and target functions --------------------------------//
794
+
795
+
796
+ function _getAndVerifyStake(
797
+ NftId stakeNftId
798
+ )
536
799
  private
800
+ view
801
+ returns (
802
+ IStaking.StakeInfo storage stakeInfo
803
+ )
537
804
  {
538
- if (_lastUpdatedIn[nftId].gtz()) {
539
- revert ErrorStakingStoreBalanceAlreadyInitialized(nftId);
805
+ stakeInfo = _stakeInfo[stakeNftId];
806
+ if (stakeInfo.lastUpdateIn.eqz()) {
807
+ revert ErrorStakingStoreStakeNotInitialized(stakeNftId);
540
808
  }
541
-
542
- // set stake balances to 0
543
- _stakeBalance[nftId] = AmountLib.zero();
544
- _rewardBalance[nftId] = AmountLib.zero();
545
-
546
- // set last updated at/in to current timestamp/block number
547
- _lastUpdatedAt[nftId] = TimestampLib.blockTimestamp();
548
- _lastUpdatedIn[nftId] = BlocknumberLib.currentBlocknumber();
549
809
  }
550
810
 
551
811
 
552
- function _updateStakeBalance(
553
- NftId stakeNftId,
554
- Amount newStakeAmount,
555
- Amount newRewardAmount
812
+ function _checkMaxStakedAmount(
813
+ NftId targetNftId,
814
+ IStaking.TargetInfo storage targetInfo,
815
+ Amount additionalstakedAmount
556
816
  )
557
817
  private
558
818
  {
559
- _stakeBalance[stakeNftId] = newStakeAmount;
560
- _rewardBalance[stakeNftId] = newRewardAmount;
819
+ if (targetInfo.stakedAmount + additionalstakedAmount > targetInfo.maxStakedAmount) {
820
+ revert ErrorStakingStoreStakesExceedingTargetMaxAmount(
821
+ targetNftId,
822
+ targetInfo.maxStakedAmount,
823
+ targetInfo.stakedAmount + additionalstakedAmount);
824
+ }
561
825
 
562
- _lastUpdatedAt[stakeNftId] = TimestampLib.blockTimestamp();
563
- _lastUpdatedIn[stakeNftId] = BlocknumberLib.currentBlocknumber();
826
+ // TODO add check for tvl dependent maximum, see #628
564
827
  }
565
828
 
566
829
 
567
- function _updateTargetBalance(
568
- NftId targetNftId,
569
- Amount newStakeAmount,
570
- Amount newRewardAmount
830
+ function _getAndVerifyTarget(
831
+ NftId targetNftId
571
832
  )
572
833
  private
834
+ view
835
+ returns (
836
+ IStaking.TargetInfo storage targetInfo
837
+ )
573
838
  {
574
- _stakeBalance[targetNftId] = newStakeAmount;
575
- _rewardBalance[targetNftId] = newRewardAmount;
839
+ targetInfo = _targetInfo[targetNftId];
576
840
 
577
- // for targets we don't need the timestamp, just the blocknumber
578
- _lastUpdatedIn[targetNftId] = BlocknumberLib.currentBlocknumber();
841
+ if (targetInfo.lastUpdateIn.eqz()) {
842
+ revert ErrorStakingStoreTargetNotInitialized(targetNftId);
843
+ }
579
844
  }
580
845
 
581
- function _checkBalanceExists(NftId nftId)
846
+ //--- private tvl functions ------------------------------------------------//
847
+
848
+ /// @dev Initializes token balance handling for the specified target.
849
+ function _createTvlBalance(NftId targetNftId, address token)
582
850
  private
583
- view
584
- returns (Blocknumber lastUpdatedIn)
585
851
  {
586
- lastUpdatedIn = _lastUpdatedIn[nftId];
852
+ IStaking.TvlInfo storage info = _tvlInfo[targetNftId][token];
587
853
 
588
- if (lastUpdatedIn.eqz()) {
589
- revert ErrorStakingStoreBalanceNotInitialized(nftId);
854
+ if (info.lastUpdateIn.gtz()) {
855
+ revert ErrorStakingStoreTvlBalanceAlreadyInitialized(targetNftId, token);
590
856
  }
857
+
858
+ // set tvl balances to 0 and update last updated in
859
+ info.tvlAmount = AmountLib.zero();
860
+ info.lastUpdateIn = BlocknumberLib.current();
591
861
  }
592
862
 
593
863
 
594
- function _getAndVerifyTvl(
864
+ function _updateTvlBalance(
595
865
  NftId targetNftId,
596
- address token
866
+ address token,
867
+ Amount newTvlAmount
597
868
  )
598
869
  private
599
- view
600
870
  returns (
601
- Blocknumber tvlLastUpdatedIn,
602
- Amount oldBalance,
603
- Amount oldDipBalance
871
+ Amount oldTvlAmount,
872
+ Blocknumber lastUpdatedIn
604
873
  )
605
874
  {
606
- tvlLastUpdatedIn = _tvlLastUpdatedIn[targetNftId];
875
+ IStaking.TvlInfo storage tvlInfo = _getAndVerifyTvl(targetNftId, token);
876
+ oldTvlAmount = tvlInfo.tvlAmount;
877
+ lastUpdatedIn = tvlInfo.lastUpdateIn;
878
+
879
+ tvlInfo.tvlAmount = newTvlAmount;
880
+ tvlInfo.lastUpdateIn = BlocknumberLib.current();
881
+ }
607
882
 
608
- if (tvlLastUpdatedIn.eqz()) {
609
- revert ErrorStakingStoreTvlBalanceNotInitialized(targetNftId);
610
- }
611
883
 
612
- oldBalance = _tvlBalance[targetNftId][token];
613
- oldDipBalance = _tvlInDip[targetNftId][token];
884
+ function _getAndVerifyTvl(NftId targetNftId, address token)
885
+ private
886
+ view
887
+ returns (IStaking.TvlInfo storage tvlInfo)
888
+ {
889
+ tvlInfo = _tvlInfo[targetNftId][token];
890
+ if (tvlInfo.lastUpdateIn.eqz()) {
891
+ revert ErrorStakingStoreTvlBalanceNotInitialized(targetNftId, token);
892
+ }
614
893
  }
615
894
  }