@etherisc/gif-next 0.0.2-804cdbf-724 → 0.0.2-8112a1f-745

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 (554) 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 +359 -48
  186. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  187. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +169 -37
  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 +565 -109
  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 +1086 -164
  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 +1230 -415
  277. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  278. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +470 -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 +201 -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 +999 -599
  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 +193 -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 +93 -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 +101 -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 -37
  362. package/contracts/authorization/IServiceAuthorization.sol +57 -17
  363. package/contracts/authorization/ServiceAuthorization.sol +255 -25
  364. package/contracts/distribution/BasicDistribution.sol +22 -30
  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 +70 -32
  447. package/contracts/registry/IRegistryService.sol +5 -12
  448. package/contracts/registry/IRelease.sol +29 -0
  449. package/contracts/registry/ITransferInterceptor.sol +1 -2
  450. package/contracts/registry/Registry.sol +367 -207
  451. package/contracts/registry/RegistryAdmin.sol +110 -287
  452. package/contracts/registry/RegistryAuthorization.sol +309 -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 +163 -66
  485. package/contracts/staking/IStakingService.sol +45 -78
  486. package/contracts/staking/Staking.sol +478 -243
  487. package/contracts/staking/StakingLib.sol +195 -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 +698 -340
  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 +101 -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 +73 -37
  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 +35 -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 +54 -5
  514. package/contracts/{shared → upgradeability}/IVersionable.sol +3 -0
  515. package/contracts/{shared → upgradeability}/ProxyManager.sol +96 -48
  516. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +12 -2
  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/staking/StakeManagerLib.sol +0 -231
@@ -3,31 +3,24 @@ 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
- import {KEEP_STATE} from "../type/StateId.sol";
17
13
  import {NftId, NftIdLib} from "../type/NftId.sol";
18
14
  import {NftIdSet} from "../shared/NftIdSet.sol";
19
- import {ObjectType, INSTANCE, PROTOCOL, STAKE, STAKING, TARGET} from "../type/ObjectType.sol";
15
+ import {ObjectType} from "../type/ObjectType.sol";
16
+ import {PROTOCOL} from "../type/ObjectType.sol";
20
17
  import {Seconds, SecondsLib} from "../type/Seconds.sol";
18
+ import {StakingLib} from "./StakingLib.sol";
19
+ import {StakingLifecycle} from "./StakingLifecycle.sol";
21
20
  import {StakingReader} from "./StakingReader.sol";
22
21
  import {TargetManagerLib} from "./TargetManagerLib.sol";
23
22
  import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
24
- import {TokenRegistry} from "../registry/TokenRegistry.sol";
25
23
  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
24
 
32
25
 
33
26
  contract StakingStore is
@@ -36,51 +29,44 @@ contract StakingStore is
36
29
  StakingLifecycle
37
30
  {
38
31
 
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);
32
+ // token
33
+ error ErrorStakingStoreTokenNotRegistered(ChainId chainId, address token);
34
+ error ErrorStakingStoreTokenAlreadyAdded(ChainId chainId, address token);
35
+ error ErrorStakingStoreTokenUnknown(ChainId chainId, address token);
44
36
 
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);
37
+ // target
38
+ error ErrorStakingStoreTargetNotInitialized(NftId targetNftId);
52
39
 
53
40
  // in/decreasing reward reserves
54
41
  error ErrorStakingStoreNotTarget(NftId targetNftId);
55
- error ErrorStakingStoreRewardReservesInsufficient(NftId targetNftId, Amount dipAmount, Amount reservesBalanceAmount);
42
+ error ErrorStakingStoreRewardReservesInsufficient(NftId targetNftId, Amount reserveAmount, Amount claimedAmount);
56
43
 
57
- // creating and updating of balance
58
- error ErrorStakingStoreBalanceAlreadyInitialized(NftId nftId);
59
- error ErrorStakingStoreBalanceNotInitialized(NftId nftId);
44
+ // stakes
45
+ error ErrorStakingStoreStakesExceedingTargetMaxAmount(NftId targetNftId, Amount maxStakedAmount, Amount newIStaking);
46
+ error ErrorStakingStoreStakeNotInitialized(NftId nftId);
60
47
 
61
- // update balance
62
- error ErrorStakingStoreTvlBalanceNotInitialized(NftId nftId);
48
+ // creating and updating of staking balance
49
+ error ErrorStakingStoreStakeBalanceAlreadyInitialized(NftId nftId);
50
+ error ErrorStakingStoreStakeBalanceNotInitialized(NftId nftI);
51
+
52
+ // creating and updating of tvl balance
53
+ error ErrorStakingStoreTvlBalanceAlreadyInitialized(NftId nftId, address token);
54
+ error ErrorStakingStoreTvlBalanceNotInitialized(NftId nftId, address token);
63
55
 
64
56
  IRegistry private _registry;
65
57
  NftIdSet private _targetNftIdSet;
66
58
  StakingReader private _reader;
67
59
 
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;
60
+ // stakes
61
+ mapping(NftId stakeNftId => IStaking.StakeInfo) private _stakeInfo;
75
62
 
76
- mapping(NftId nftId => Timestamp lastUpdatedAt) private _lastUpdatedAt;
77
- mapping(NftId nftId => Blocknumber lastUpdatedIn) private _lastUpdatedIn;
63
+ // targets
64
+ mapping(NftId targetNftId => IStaking.TargetInfo) private _targetInfo;
65
+ mapping(NftId targetNftId => mapping(address token => IStaking.TvlInfo)) private _tvlInfo;
66
+ mapping(NftId targetNftId => address [] token) private _targetToken;
78
67
 
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;
68
+ // staking rate
69
+ mapping(ChainId chainId => mapping(address token => IStaking.TokenInfo)) private _tokenInfo;
84
70
 
85
71
 
86
72
  constructor(IRegistry registry, StakingReader reader)
@@ -90,61 +76,183 @@ contract StakingStore is
90
76
  setAuthority(registry.getAuthority());
91
77
 
92
78
  // set internal variables
93
- _registry = registry; //TODO if keeps registry -> RegistryLinked and checks registry address
79
+ _registry = registry;
94
80
  _reader = reader;
95
81
  _targetNftIdSet = new NftIdSet();
96
82
 
97
83
  // register protocol target
98
84
  _createTarget(
99
85
  NftIdLib.toNftId(1101),
100
- IStaking.TargetInfo({
101
- objectType: PROTOCOL(),
102
- chainId: 1,
103
- lockingPeriod: TargetManagerLib.getDefaultLockingPeriod(),
104
- rewardRate: TargetManagerLib.getDefaultRewardRate()}));
86
+ PROTOCOL(),
87
+ TargetManagerLib.getDefaultLockingPeriod(),
88
+ TargetManagerLib.getDefaultRewardRate(),
89
+ false); // no parameter check
105
90
  }
106
91
 
107
92
 
108
- //--- staking rate specific functions -----------------------------------//
93
+ //--- token management --------------------------------------------------//
94
+
95
+ /// @dev Registers a token for tvl management.
96
+ function addToken(
97
+ ChainId chainId,
98
+ address token
99
+ )
100
+ external
101
+ restricted() // token registry via staking
102
+ {
103
+ // checks
104
+ IStaking.TokenInfo storage info = _tokenInfo[chainId][token];
105
+
106
+ // check token is not yet registered
107
+ if (info.lastUpdateIn.gtz()) {
108
+ revert ErrorStakingStoreTokenAlreadyAdded(chainId, token);
109
+ }
110
+
111
+ info.stakingRate = UFixedLib.zero();
112
+ info.lastUpdateIn = BlocknumberLib.current();
113
+
114
+ // logging
115
+ emit IStaking.LogStakingTokenAdded(chainId, token);
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
164
+ )
165
+ external
166
+ restricted() // staking
167
+ returns (
168
+ Seconds oldLockingPeriod,
169
+ Blocknumber lastUpdatedIn
170
+ )
171
+ {
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;
179
+ }
180
+
181
+
182
+ function setRewardRate(
183
+ NftId targetNftId,
184
+ UFixed rewardRate
185
+ )
186
+ external
187
+ restricted() // staking
188
+ returns (
189
+ UFixed oldRewardRate,
190
+ Blocknumber lastUpdatedIn
191
+ )
192
+ {
193
+ TargetManagerLib.checkRewardRate(targetNftId, rewardRate);
194
+
195
+ IStaking.TargetInfo storage targetInfo;
196
+ (targetInfo, lastUpdatedIn) = _verifyAndUpdateTarget(targetNftId);
197
+
198
+ oldRewardRate = targetInfo.rewardRate;
199
+ targetInfo.rewardRate = rewardRate;
200
+ }
201
+
202
+
203
+ function setMaxStakedAmount(
204
+ NftId targetNftId,
205
+ Amount maxStakedAmount
206
+ )
207
+ external
208
+ restricted() // staking
209
+ returns (
210
+ Amount oldMaxStakedAmount,
211
+ Blocknumber lastUpdatedIn
212
+ )
213
+ {
214
+ IStaking.TargetInfo storage targetInfo;
215
+ (targetInfo, lastUpdatedIn) = _verifyAndUpdateTarget(targetNftId);
216
+
217
+ oldMaxStakedAmount = targetInfo.maxStakedAmount;
218
+ targetInfo.maxStakedAmount = maxStakedAmount;
219
+ }
220
+
221
+
222
+ function addTargetToken(
223
+ NftId targetNftId,
224
+ address token
137
225
  )
138
226
  external
139
227
  restricted()
140
228
  {
141
- _update(
142
- targetNftId.toKey32(TARGET()),
143
- abi.encode(targetInfo), KEEP_STATE());
229
+ // checks
230
+
231
+ // skip registering if tvl balance has already been initialized
232
+ IStaking.TvlInfo storage tvlInfo = _tvlInfo[targetNftId][token];
233
+ if (tvlInfo.lastUpdateIn.gtz()) {
234
+ return;
235
+ }
236
+
237
+ // check target exists
238
+ _getAndVerifyTarget(targetNftId);
239
+
240
+ // check token is known for chain id of target
241
+ ChainId chainId = ChainIdLib.fromNftId(targetNftId);
242
+ if (_tokenInfo[chainId][token].lastUpdateIn.eqz()) {
243
+ revert ErrorStakingStoreTokenUnknown(chainId, token);
244
+ }
245
+
246
+ // effects
247
+ tvlInfo.tvlAmount = AmountLib.zero();
248
+ tvlInfo.lastUpdateIn = BlocknumberLib.current();
249
+
250
+ // add token to list of know tokens for target
251
+ _targetToken[targetNftId].push(token);
144
252
  }
145
253
 
146
254
 
147
- function increaseReserves(
255
+ function refillRewardReserves(
148
256
  NftId targetNftId,
149
257
  Amount dipAmount
150
258
  )
@@ -152,14 +260,26 @@ contract StakingStore is
152
260
  restricted()
153
261
  returns (Amount newReserveBalance)
154
262
  {
155
- newReserveBalance = _reserveBalance[targetNftId] + dipAmount;
156
- Blocknumber lastUpdatedIn = _updateReserves(targetNftId, newReserveBalance);
263
+ // checks
264
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(targetNftId);
265
+ Blocknumber lastUpdateIn = targetInfo.lastUpdateIn;
157
266
 
158
- emit LogStakingStoreReserveBalanceIncreased(targetNftId, dipAmount, newReserveBalance, lastUpdatedIn);
267
+ // effects
268
+ targetInfo.reserveAmount = targetInfo.reserveAmount + dipAmount;
269
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
270
+
271
+ // logging
272
+ newReserveBalance = targetInfo.reserveAmount;
273
+ emit IStaking.LogStakingRewardReservesRefilled(
274
+ targetNftId,
275
+ dipAmount,
276
+ _registry.ownerOf(targetNftId),
277
+ newReserveBalance,
278
+ lastUpdateIn);
159
279
  }
160
280
 
161
281
 
162
- function decreaseReserves(
282
+ function withdrawRewardReserves(
163
283
  NftId targetNftId,
164
284
  Amount dipAmount
165
285
  )
@@ -167,18 +287,20 @@ contract StakingStore is
167
287
  restricted()
168
288
  returns (Amount newReserveBalance)
169
289
  {
170
- Amount reserveAmount = _reserveBalance[targetNftId];
171
- if (dipAmount > reserveAmount) {
172
- revert ErrorStakingStoreRewardReservesInsufficient(
173
- targetNftId,
174
- dipAmount,
175
- reserveAmount);
176
- }
290
+ // checks
291
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(targetNftId);
177
292
 
178
- newReserveBalance = _reserveBalance[targetNftId] - dipAmount;
179
- Blocknumber lastUpdatedIn = _updateReserves(targetNftId, newReserveBalance);
293
+ // effects
294
+ Blocknumber lastUpdateIn = _decreaseReserves(targetNftId, targetInfo, dipAmount);
180
295
 
181
- emit LogStakingStoreReserveBalanceDecreased(targetNftId, dipAmount, newReserveBalance, lastUpdatedIn);
296
+ // logging
297
+ newReserveBalance = targetInfo.reserveAmount;
298
+ emit IStaking.LogStakingRewardReservesWithdrawn(
299
+ targetNftId,
300
+ dipAmount,
301
+ _registry.ownerOf(targetNftId),
302
+ newReserveBalance,
303
+ lastUpdateIn);
182
304
  }
183
305
 
184
306
 
@@ -186,7 +308,6 @@ contract StakingStore is
186
308
 
187
309
  function increaseTotalValueLocked(
188
310
  NftId targetNftId,
189
- UFixed stakingRate,
190
311
  address token,
191
312
  Amount amount
192
313
  )
@@ -194,32 +315,18 @@ contract StakingStore is
194
315
  restricted()
195
316
  returns (Amount newBalance)
196
317
  {
197
- (
198
- Blocknumber tvlLastUpdatedIn,
199
- Amount oldBalance,
200
- Amount oldDipBalance
201
- ) = _getAndVerifyTvl(targetNftId, token);
318
+ // checks
319
+ IStaking.TvlInfo storage tvlInfo = _getAndVerifyTvl(targetNftId, token);
202
320
 
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;
209
-
210
- // update new amount of required dip
211
- _tvlRequiredDip[targetNftId] = _tvlRequiredDip[targetNftId] - oldDipBalance + newDipBalance;
212
-
213
- // update last updated in
214
- _tvlLastUpdatedIn[targetNftId] = BlocknumberLib.currentBlocknumber();
215
-
216
- emit LogStakingStoreTotalValueLockedIncreased(targetNftId, token, amount, newBalance, tvlLastUpdatedIn);
321
+ // effects
322
+ tvlInfo.tvlAmount = tvlInfo.tvlAmount + amount;
323
+ tvlInfo.lastUpdateIn = BlocknumberLib.current();
324
+ newBalance = tvlInfo.tvlAmount;
217
325
  }
218
326
 
219
327
 
220
328
  function decreaseTotalValueLocked(
221
329
  NftId targetNftId,
222
- UFixed stakingRate,
223
330
  address token,
224
331
  Amount amount
225
332
  )
@@ -227,389 +334,640 @@ contract StakingStore is
227
334
  restricted()
228
335
  returns (Amount newBalance)
229
336
  {
230
- (
231
- Blocknumber tvlLastUpdatedIn,
232
- Amount oldBalance,
233
- Amount oldDipBalance
234
- ) = _getAndVerifyTvl(targetNftId, token);
235
-
236
- newBalance = oldBalance - amount;
237
- Amount newDipBalance = AmountLib.toAmount((
238
- stakingRate * newBalance.toUFixed()).toInt());
337
+ // checks
338
+ IStaking.TvlInfo storage tvlInfo = _getAndVerifyTvl(targetNftId, token);
239
339
 
240
- // update new tvl balances
241
- _tvlBalance[targetNftId][token] = newBalance;
242
- _tvlInDip[targetNftId][token] = newDipBalance;
243
-
244
- // update new amount of required dip
245
- _tvlRequiredDip[targetNftId] = _tvlRequiredDip[targetNftId] - oldDipBalance + newDipBalance;
246
-
247
- // update last updated in
248
- _tvlLastUpdatedIn[targetNftId] = BlocknumberLib.currentBlocknumber();
249
-
250
- emit LogStakingStoreTotalValueLockedDecreased(targetNftId, token, amount, newBalance, tvlLastUpdatedIn);
340
+ // effects
341
+ tvlInfo.tvlAmount = tvlInfo.tvlAmount - amount;
342
+ tvlInfo.lastUpdateIn = BlocknumberLib.current();
343
+ newBalance = tvlInfo.tvlAmount;
251
344
  }
252
345
 
253
346
  //--- stake specific functions -------------------------------------//
254
347
 
255
- function create(
348
+ function createStake(
256
349
  NftId stakeNftId,
257
- IStaking.StakeInfo memory stakeInfo
350
+ NftId targetNftId,
351
+ address stakeOwner,
352
+ Amount stakeAmount
258
353
  )
259
354
  external
260
355
  restricted()
356
+ returns (Timestamp lockedUntil)
261
357
  {
262
- _create(
263
- stakeNftId.toKey32(STAKE()),
264
- abi.encode(stakeInfo));
358
+ // checks
359
+ IStaking.StakeInfo storage stakeInfo = _stakeInfo[stakeNftId];
360
+ if (stakeInfo.lastUpdateIn.gtz()) {
361
+ revert ErrorStakingStoreStakeBalanceAlreadyInitialized(stakeNftId);
362
+ }
363
+
364
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(targetNftId);
365
+ _checkMaxStakedAmount(targetNftId, targetInfo, stakeAmount);
366
+
367
+ // effects
368
+ stakeInfo.targetNftId = targetNftId;
369
+ stakeInfo.stakedAmount = AmountLib.zero();
370
+ stakeInfo.rewardAmount = AmountLib.zero();
371
+ stakeInfo.lockedUntil = TimestampLib.current();
372
+ _setStakeLastUpdatesToCurrent(stakeInfo);
373
+
374
+ // logging for creation of empty stake
375
+ emit IStaking.LogStakingStakeCreated(stakeNftId, stakeInfo.targetNftId, stakeInfo.stakedAmount, stakeInfo.lockedUntil, stakeOwner);
265
376
 
266
- _createStakeBalance(stakeNftId);
377
+ // process stake amount
378
+ _stake(stakeNftId, stakeInfo, targetInfo, targetInfo.lockingPeriod, stakeAmount);
267
379
  }
268
380
 
269
- function update(
270
- NftId stakeNftId,
271
- IStaking.StakeInfo memory stakeInfo
381
+
382
+ function stake(
383
+ NftId stakeNftId,
384
+ bool updateRewards,
385
+ bool restakeRewards,
386
+ Seconds additionalLockingPeriod,
387
+ Amount stakeAmount
272
388
  )
273
389
  external
274
390
  restricted()
275
391
  {
276
- _update(
277
- stakeNftId.toKey32(STAKE()),
278
- abi.encode(stakeInfo),
279
- KEEP_STATE());
280
- }
392
+ // checks
393
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
394
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
281
395
 
282
- //--- general functions --------------------------------------------//
396
+ if (updateRewards) {
397
+ _updateRewards(stakeNftId, stakeInfo, targetInfo);
398
+ }
283
399
 
400
+ if (restakeRewards) {
401
+ _restakeRewards(stakeNftId, stakeInfo, targetInfo);
402
+ }
284
403
 
285
- function increaseStake(
286
- NftId nftId,
287
- NftId targetNftId,
288
- Amount amount
404
+ _stake(stakeNftId, stakeInfo, targetInfo, additionalLockingPeriod, stakeAmount);
405
+ }
406
+
407
+
408
+ function unstake(
409
+ NftId stakeNftId,
410
+ bool updateRewards,
411
+ bool restakeRewards,
412
+ Amount maxUnstakeAmount
289
413
  )
290
414
  external
291
415
  restricted()
416
+ returns (Amount unstakedAmount)
292
417
  {
293
- Blocknumber lastUpdatedIn = _checkBalanceExists(nftId);
418
+ // checks
419
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
420
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
294
421
 
295
- _updateStakeBalance(
296
- nftId,
297
- _stakeBalance[nftId] + amount, // new stake balance
298
- _rewardBalance[nftId]); // unchanged reward balance
422
+ if (updateRewards) {
423
+ _updateRewards(stakeNftId, stakeInfo, targetInfo);
424
+ }
299
425
 
300
- _updateTargetBalance(
301
- targetNftId,
302
- _stakeBalance[targetNftId] + amount,
303
- _rewardBalance[targetNftId]);
426
+ if (restakeRewards) {
427
+ _restakeRewards(stakeNftId, stakeInfo, targetInfo);
428
+ }
304
429
 
305
- emit LogStakingStoreStakesIncreased(nftId, amount, _stakeBalance[nftId], lastUpdatedIn);
430
+ return _unstake(stakeNftId, stakeInfo, targetInfo, maxUnstakeAmount);
306
431
  }
307
432
 
308
433
 
309
- function restakeRewards(
310
- NftId nftId,
311
- NftId targetNftId,
312
- Amount rewardIncrementAmount
313
- )
434
+ function updateRewards(NftId stakeNftId)
314
435
  external
315
436
  restricted()
316
437
  {
317
- Blocknumber lastUpdatedIn = _checkBalanceExists(nftId);
318
- Amount stakeAmount = _stakeBalance[nftId];
319
- Amount rewardAmount = _rewardBalance[nftId];
320
-
321
- // move all rewards to stake balance
322
- _updateStakeBalance(
323
- nftId,
324
- stakeAmount + rewardAmount + rewardIncrementAmount, // new stake balance
325
- AmountLib.zero()); // new reward balance
326
-
327
- _updateTargetBalance(
328
- targetNftId,
329
- _stakeBalance[targetNftId] + rewardAmount + rewardIncrementAmount,
330
- _rewardBalance[targetNftId] - rewardAmount);
331
-
332
- emit LogStakingStoreRewardsRestaked(nftId, stakeAmount, rewardAmount, rewardIncrementAmount, _stakeBalance[nftId], lastUpdatedIn);
438
+ // checks
439
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
440
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
441
+ _updateRewards(stakeNftId, stakeInfo, targetInfo);
333
442
  }
334
443
 
335
444
 
336
- function updateRewards(
337
- NftId nftId,
338
- NftId targetNftId,
339
- Amount rewardIncrementAmount
445
+ function restakeRewards(
446
+ NftId stakeNftId,
447
+ bool updateRewards
340
448
  )
341
449
  external
342
450
  restricted()
343
451
  {
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
452
+ // checks
453
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
454
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
351
455
 
352
- _updateTargetBalance(
353
- targetNftId,
354
- _stakeBalance[targetNftId],
355
- _rewardBalance[targetNftId] + rewardIncrementAmount);
456
+ if (updateRewards) {
457
+ _updateRewards(stakeNftId, stakeInfo, targetInfo);
458
+ }
356
459
 
357
- emit LogStakingStoreRewardsIncreased(nftId, rewardIncrementAmount, _rewardBalance[nftId], lastUpdatedIn);
460
+ _restakeRewards(stakeNftId, stakeInfo, targetInfo);
358
461
  }
359
462
 
360
463
 
361
- function claimUpTo(
362
- NftId nftId,
363
- NftId targetNftId,
464
+ function claimRewards(
465
+ NftId stakeNftId,
466
+ bool updateRewards,
364
467
  Amount maxClaimAmount
365
468
  )
366
469
  external
367
470
  restricted()
368
471
  returns (Amount claimedAmount)
369
472
  {
370
- Blocknumber lastUpdatedIn = _checkBalanceExists(nftId);
473
+ // checks
474
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
475
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
371
476
 
372
- // determine the claimable rewards amount
373
- claimedAmount = AmountLib.min(maxClaimAmount, _rewardBalance[nftId]);
477
+ if (updateRewards) {
478
+ _updateRewards(stakeNftId, stakeInfo, targetInfo);
479
+ }
374
480
 
375
- // decrease rewards by claimed amount
376
- _updateStakeBalance(
377
- nftId,
378
- _stakeBalance[nftId], // unchanged stake balance
379
- _rewardBalance[nftId] - claimedAmount); // new reward balance
481
+ claimedAmount = _claimRewards(stakeNftId, stakeInfo, targetInfo, maxClaimAmount);
482
+ }
380
483
 
381
- _updateTargetBalance(
382
- targetNftId,
383
- _stakeBalance[targetNftId],
384
- _rewardBalance[targetNftId] - claimedAmount);
484
+ //--- view functions -----------------------------------------------//
385
485
 
386
- emit LogStakingStoreRewardsDecreased(nftId, claimedAmount, _rewardBalance[nftId], lastUpdatedIn);
486
+ function getStakingReader() external view returns (StakingReader stakingReader){
487
+ return _reader;
387
488
  }
388
489
 
389
490
 
390
- function unstakeUpTo(
391
- NftId nftId,
392
- NftId targetNftId,
393
- Amount maxUnstakeAmount,
394
- Amount maxClaimAmount
395
- )
491
+ function exists(NftId stakeNftId) external view returns (bool) {
492
+ return _stakeInfo[stakeNftId].lastUpdateIn.gtz();
493
+ }
494
+
495
+
496
+ function getRequiredStakeBalance(NftId targetNftId)
396
497
  external
397
- restricted()
398
- returns (
399
- Amount unstakedAmount,
400
- Amount claimedAmount
401
- )
498
+ view
499
+ returns (Amount requiredStakedAmount)
402
500
  {
403
- Blocknumber lastUpdatedIn = _checkBalanceExists(nftId);
501
+ address [] memory tokens = _targetToken[targetNftId];
502
+ if (tokens.length == 0) {
503
+ return AmountLib.zero();
504
+ }
404
505
 
405
- // determine amounts
406
- unstakedAmount = AmountLib.min(maxUnstakeAmount, _stakeBalance[nftId]);
407
- claimedAmount = AmountLib.min(maxClaimAmount, _rewardBalance[nftId]);
506
+ requiredStakedAmount = AmountLib.zero();
507
+ ChainId targetChainId = _targetInfo[targetNftId].chainId;
508
+ address token;
509
+ Amount tvlAmount;
510
+ UFixed stakingRate;
408
511
 
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
512
+ for (uint256 i = 0; i < tokens.length; i++) {
513
+ token = tokens[i];
514
+ tvlAmount = _tvlInfo[targetNftId][token].tvlAmount;
515
+ if (tvlAmount.eqz()) { continue; }
414
516
 
415
- _updateTargetBalance(
416
- targetNftId,
417
- _stakeBalance[targetNftId] - unstakedAmount,
418
- _rewardBalance[targetNftId] - claimedAmount);
517
+ stakingRate = _tokenInfo[targetChainId][token].stakingRate;
518
+ if (stakingRate.eqz()) { continue; }
419
519
 
420
- emit LogStakingStoreStakesDecreased(nftId, unstakedAmount, _stakeBalance[nftId], lastUpdatedIn);
421
- emit LogStakingStoreRewardsDecreased(nftId, claimedAmount, _rewardBalance[nftId], lastUpdatedIn);
520
+ requiredStakedAmount = requiredStakedAmount + tvlAmount.multiplyWith(stakingRate);
521
+ }
422
522
  }
423
523
 
424
- //--- view functions -----------------------------------------------//
425
524
 
426
- function getStakingReader() external view returns (StakingReader stakingReader){
427
- return _reader;
525
+ /// @dev Returns true iff current stake amount is still locked
526
+ function isStakeLocked(NftId stakeNftId) public view returns (bool) {
527
+ return _stakeInfo[stakeNftId].lockedUntil > TimestampLib.current();
428
528
  }
429
529
 
430
- // TODO rename
431
- function getTargetNftIdSet() external view returns (NftIdSet targetNftIdSet){
432
- return _targetNftIdSet;
530
+
531
+ /// @dev Returns the stake infos for the specified stake.
532
+ function getStakeInfo(NftId stakeNftId) external view returns (IStaking.StakeInfo memory stakeInfo) {
533
+ return _stakeInfo[stakeNftId];
534
+ }
535
+
536
+
537
+ /// @dev Returns the stake infos for the specified stake.
538
+ function getStakeTarget(NftId stakeNftId) external view returns (NftId targetNftId) {
539
+ return _stakeInfo[stakeNftId].targetNftId;
433
540
  }
434
541
 
435
- function getStakingRate(uint256 chainId, address token) external view returns (UFixed stakingRate) { return _stakingRate[chainId][token]; }
436
542
 
437
- function exists(NftId stakeNftId) external view returns (bool) { return exists(stakeNftId.toKey32(STAKE())); }
543
+ /// @dev Returns the target infos for the specified target.
544
+ function getTargetInfo(NftId targetNftId) external view returns (IStaking.TargetInfo memory targetInfo) {
545
+ return _targetInfo[targetNftId];
546
+ }
438
547
 
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
548
 
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]; }
549
+ /// @dev Returns the tvl infos for the specified target.
550
+ function getTvlInfo(NftId targetNftId, address token) external view returns (IStaking.TvlInfo memory tvlInfo) {
551
+ return _tvlInfo[targetNftId][token];
552
+ }
447
553
 
448
554
 
449
- function getTargetBalances(NftId nftId)
450
- external
451
- view
452
- returns (
453
- Amount stakeBalance,
454
- Amount rewardBalance,
455
- Amount reserveBalance,
456
- Blocknumber lastUpdatedIn
457
- )
458
- {
459
- stakeBalance = _stakeBalance[nftId];
460
- rewardBalance = _rewardBalance[nftId];
461
- reserveBalance = _reserveBalance[nftId];
462
- lastUpdatedIn = _lastUpdatedIn[nftId];
555
+ /// @dev Returns the tvl infos for the specified target.
556
+ function getTokenInfo(ChainId chainId, address token) external view returns (IStaking.TokenInfo memory tokenInfo) {
557
+ return _tokenInfo[chainId][token];
463
558
  }
464
559
 
465
560
 
466
- function getStakeBalances(NftId nftId)
467
- external
468
- view
561
+ function getTargetSet() external view returns (NftIdSet targetNftIdSet) {
562
+ return _targetNftIdSet;
563
+ }
564
+
565
+ //--- internal functions -----------------------------------------------//
566
+
567
+ function _verifyAndUpdateTarget(NftId targetNftId)
568
+ private
469
569
  returns (
470
- Amount stakeBalance,
471
- Amount rewardBalance,
472
- Timestamp lastUpdatedAt
570
+ IStaking.TargetInfo storage targetInfo,
571
+ Blocknumber lastUpdatedIn
473
572
  )
474
573
  {
475
- stakeBalance = _stakeBalance[nftId];
476
- rewardBalance = _rewardBalance[nftId];
477
- lastUpdatedAt = _lastUpdatedAt[nftId];
574
+ // checks
575
+ targetInfo = _getAndVerifyTarget(targetNftId);
576
+ lastUpdatedIn = targetInfo.lastUpdateIn;
577
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
478
578
  }
479
579
 
480
- //--- private functions -------------------------------------------//
481
580
 
482
581
  function _createTarget(
483
582
  NftId targetNftId,
484
- IStaking.TargetInfo memory targetInfo
583
+ ObjectType objectType,
584
+ Seconds lockingPeriod,
585
+ UFixed rewardRate,
586
+ bool checkParameters
485
587
  )
486
588
  private
487
589
  {
488
- _create(
489
- targetNftId.toKey32(TARGET()),
490
- abi.encode(targetInfo));
590
+ // checks
591
+ if (checkParameters) {
592
+ TargetManagerLib.checkTargetParameters(
593
+ _registry,
594
+ _reader,
595
+ targetNftId,
596
+ objectType,
597
+ lockingPeriod,
598
+ rewardRate);
599
+ }
600
+
601
+ // effects
602
+ IStaking.TargetInfo storage targetInfo = _targetInfo[targetNftId];
603
+ targetInfo.stakedAmount = AmountLib.zero();
604
+ targetInfo.rewardAmount = AmountLib.zero();
605
+ targetInfo.reserveAmount = AmountLib.zero();
606
+ targetInfo.maxStakedAmount = AmountLib.max();
491
607
 
492
- // initialize tvl and stake balance
493
- _tvlLastUpdatedIn[targetNftId]= BlocknumberLib.currentBlocknumber();
494
- _createTargetBalance(targetNftId);
608
+ targetInfo.objectType = objectType;
609
+ targetInfo.lockingPeriod = lockingPeriod;
610
+ targetInfo.rewardRate = rewardRate;
611
+ targetInfo.chainId = ChainIdLib.fromNftId(targetNftId);
612
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
495
613
 
614
+ // add new target to target set
496
615
  _targetNftIdSet.add(targetNftId);
497
616
  }
498
617
 
499
- function _updateReserves(
618
+
619
+ function _spendRewardReserves(
500
620
  NftId targetNftId,
501
- Amount newRewardBalance
621
+ IStaking.TargetInfo storage targetInfo,
622
+ Amount dipAmount
502
623
  )
503
624
  private
504
- returns (Blocknumber lastUpdatedIn)
505
625
  {
506
- if (_lastUpdatedIn[targetNftId].eqz()) {
507
- revert ErrorStakingStoreNotTarget(targetNftId);
508
- }
509
-
510
- lastUpdatedIn = _lastUpdatedIn[targetNftId];
626
+ Blocknumber lastUpdateIn = _decreaseReserves(targetNftId, targetInfo, dipAmount);
511
627
 
512
- _reserveBalance[targetNftId] = newRewardBalance;
513
- _lastUpdatedIn[targetNftId] = BlocknumberLib.currentBlocknumber();
628
+ // logging
629
+ emit IStaking.LogStakingRewardReservesSpent(
630
+ targetNftId,
631
+ dipAmount,
632
+ targetInfo.reserveAmount,
633
+ lastUpdateIn);
514
634
  }
515
635
 
516
636
 
517
- function _createTargetBalance(NftId nftId)
637
+ function _decreaseReserves(
638
+ NftId targetNftId,
639
+ IStaking.TargetInfo storage targetInfo,
640
+ Amount dipAmount
641
+ )
518
642
  private
643
+ returns ( Blocknumber lastUpdateIn)
644
+ {
645
+ lastUpdateIn = targetInfo.lastUpdateIn;
646
+
647
+ // check if reserves are sufficient
648
+ if (dipAmount > targetInfo.reserveAmount) {
649
+ revert ErrorStakingStoreRewardReservesInsufficient(
650
+ targetNftId,
651
+ targetInfo.reserveAmount,
652
+ dipAmount);
653
+ }
654
+
655
+ // effects
656
+ targetInfo.reserveAmount = targetInfo.reserveAmount - dipAmount;
657
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
658
+ }
659
+
660
+
661
+ function _updateRewards(
662
+ NftId stakeNftId,
663
+ IStaking.StakeInfo storage stakeInfo,
664
+ IStaking.TargetInfo storage targetInfo
665
+ )
666
+ internal
667
+ returns (Amount rewardIncreaseAmount)
519
668
  {
520
- if (_lastUpdatedIn[nftId].gtz()) {
521
- revert ErrorStakingStoreBalanceAlreadyInitialized(nftId);
669
+ // return if reward rate is zero
670
+ if (targetInfo.rewardRate.eqz()) {
671
+ return rewardIncreaseAmount;
522
672
  }
523
673
 
524
- // set target balances to 0
525
- _stakeBalance[nftId] = AmountLib.zero();
526
- _rewardBalance[nftId] = AmountLib.zero();
527
- _reserveBalance[nftId] = AmountLib.zero();
674
+ // get seconds since last update on stake
675
+ Seconds duration = SecondsLib.toSeconds(
676
+ block.timestamp - stakeInfo.lastUpdateAt.toInt());
528
677
 
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();
678
+ // return if duration is zero
679
+ if (duration.eqz()) {
680
+ return AmountLib.zero();
681
+ }
682
+
683
+ // calculate reward increase since
684
+ rewardIncreaseAmount = StakingLib.calculateRewardAmount(
685
+ targetInfo.rewardRate,
686
+ duration,
687
+ stakeInfo.stakedAmount);
688
+
689
+ // update target + stake
690
+ targetInfo.rewardAmount = targetInfo.rewardAmount + rewardIncreaseAmount;
691
+ stakeInfo.rewardAmount = stakeInfo.rewardAmount + rewardIncreaseAmount;
692
+ _setLastUpdatesToCurrent(stakeInfo, targetInfo);
693
+
694
+ // logging
695
+ emit IStaking.LogStakingStakeRewardsUpdated(
696
+ stakeNftId,
697
+ rewardIncreaseAmount,
698
+ stakeInfo.stakedAmount,
699
+ stakeInfo.rewardAmount,
700
+ stakeInfo.lockedUntil);
532
701
  }
533
702
 
534
703
 
535
- function _createStakeBalance(NftId nftId)
536
- private
704
+ function _restakeRewards(
705
+ NftId stakeNftId,
706
+ IStaking.StakeInfo storage stakeInfo,
707
+ IStaking.TargetInfo storage targetInfo
708
+ )
709
+ internal
710
+ returns (Amount restakeAmount)
711
+ {
712
+ restakeAmount = stakeInfo.rewardAmount;
713
+
714
+ // return if reward amount is zero
715
+ if (restakeAmount.eqz()) {
716
+ return restakeAmount;
717
+ }
718
+
719
+ // check restaking amount does not exceed target max staked amount
720
+ _checkMaxStakedAmount(stakeInfo.targetNftId, targetInfo, restakeAmount);
721
+
722
+ // use up reserves for newly staked dips
723
+ _spendRewardReserves(stakeInfo.targetNftId, targetInfo, restakeAmount);
724
+
725
+ // update target + stake
726
+ targetInfo.stakedAmount = targetInfo.stakedAmount + restakeAmount;
727
+ targetInfo.rewardAmount = targetInfo.rewardAmount - restakeAmount;
728
+ stakeInfo.stakedAmount = stakeInfo.stakedAmount + restakeAmount;
729
+ stakeInfo.rewardAmount = AmountLib.zero();
730
+ _setLastUpdatesToCurrent(stakeInfo, targetInfo);
731
+
732
+ // logging
733
+ emit IStaking.LogStakingRewardsRestaked(
734
+ stakeNftId,
735
+ restakeAmount,
736
+ stakeInfo.stakedAmount,
737
+ AmountLib.zero(),
738
+ stakeInfo.lockedUntil);
739
+ }
740
+
741
+
742
+ function _stake(
743
+ NftId stakeNftId,
744
+ IStaking.StakeInfo storage stakeInfo,
745
+ IStaking.TargetInfo storage targetInfo,
746
+ Seconds maxAdditionalLockingPeriod,
747
+ Amount stakeAmount
748
+ )
749
+ internal
537
750
  {
538
- if (_lastUpdatedIn[nftId].gtz()) {
539
- revert ErrorStakingStoreBalanceAlreadyInitialized(nftId);
751
+ // return if reward amount is zero
752
+ if (stakeAmount.eqz()) {
753
+ return;
754
+ }
755
+
756
+ // check restaking amount does not exceed target max staked amount
757
+ _checkMaxStakedAmount(stakeInfo.targetNftId, targetInfo, stakeAmount);
758
+
759
+ // update target + stake
760
+ targetInfo.stakedAmount = targetInfo.stakedAmount + stakeAmount;
761
+ stakeInfo.stakedAmount = stakeInfo.stakedAmount + stakeAmount;
762
+
763
+ // increase locked until if applicable
764
+ Seconds additionalLockingPeriod = SecondsLib.min(maxAdditionalLockingPeriod, targetInfo.lockingPeriod);
765
+ if (stakeAmount.gtz() && additionalLockingPeriod.gtz()) {
766
+ stakeInfo.lockedUntil = stakeInfo.lockedUntil.addSeconds(additionalLockingPeriod);
540
767
  }
541
768
 
542
- // set stake balances to 0
543
- _stakeBalance[nftId] = AmountLib.zero();
544
- _rewardBalance[nftId] = AmountLib.zero();
769
+ _setLastUpdatesToCurrent(stakeInfo, targetInfo);
545
770
 
546
- // set last updated at/in to current timestamp/block number
547
- _lastUpdatedAt[nftId] = TimestampLib.blockTimestamp();
548
- _lastUpdatedIn[nftId] = BlocknumberLib.currentBlocknumber();
771
+ // logging
772
+ emit IStaking.LogStakingStaked(
773
+ stakeNftId,
774
+ stakeAmount,
775
+ stakeInfo.stakedAmount,
776
+ stakeInfo.rewardAmount,
777
+ stakeInfo.lockedUntil);
549
778
  }
550
779
 
551
780
 
552
- function _updateStakeBalance(
781
+ function _claimRewards(
553
782
  NftId stakeNftId,
554
- Amount newStakeAmount,
555
- Amount newRewardAmount
783
+ IStaking.StakeInfo storage stakeInfo,
784
+ IStaking.TargetInfo storage targetInfo,
785
+ Amount maxClaimAmount
556
786
  )
557
- private
787
+ internal
788
+ returns (Amount claimAmount)
558
789
  {
559
- _stakeBalance[stakeNftId] = newStakeAmount;
560
- _rewardBalance[stakeNftId] = newRewardAmount;
790
+ claimAmount = AmountLib.min(maxClaimAmount, stakeInfo.rewardAmount);
791
+
792
+ // return if no rewards to claim
793
+ if (claimAmount.eqz()) {
794
+ return claimAmount;
795
+ }
561
796
 
562
- _lastUpdatedAt[stakeNftId] = TimestampLib.blockTimestamp();
563
- _lastUpdatedIn[stakeNftId] = BlocknumberLib.currentBlocknumber();
797
+ // effects
798
+ // use up reserves for claimed rewards
799
+ _spendRewardReserves(stakeInfo.targetNftId, targetInfo, claimAmount);
800
+
801
+ // update target + stake
802
+ targetInfo.rewardAmount = targetInfo.rewardAmount - claimAmount;
803
+ stakeInfo.rewardAmount = stakeInfo.rewardAmount - claimAmount;
804
+ _setLastUpdatesToCurrent(stakeInfo, targetInfo);
805
+
806
+ // logging
807
+ emit IStaking.LogStakingRewardsClaimed(
808
+ stakeNftId,
809
+ claimAmount,
810
+ stakeInfo.stakedAmount,
811
+ stakeInfo.rewardAmount,
812
+ stakeInfo.lockedUntil);
564
813
  }
565
814
 
566
815
 
567
- function _updateTargetBalance(
568
- NftId targetNftId,
569
- Amount newStakeAmount,
570
- Amount newRewardAmount
816
+ function _unstake(
817
+ NftId stakeNftId,
818
+ IStaking.StakeInfo storage stakeInfo,
819
+ IStaking.TargetInfo storage targetInfo,
820
+ Amount maxUnstakeAmount
571
821
  )
572
- private
822
+ internal
823
+ returns (Amount unstakedAmount)
824
+ {
825
+ unstakedAmount = AmountLib.min(maxUnstakeAmount, stakeInfo.stakedAmount);
826
+
827
+ // return if no stakes to claim
828
+ if (unstakedAmount.eqz()) {
829
+ return unstakedAmount;
830
+ }
831
+
832
+ // check if stake is still locked
833
+ if (isStakeLocked(stakeNftId)) {
834
+ revert IStaking.ErrorStakingStakeLocked(stakeNftId, stakeInfo.lockedUntil);
835
+ }
836
+
837
+ // update target + stake
838
+ targetInfo.stakedAmount = targetInfo.stakedAmount - unstakedAmount;
839
+ stakeInfo.stakedAmount = stakeInfo.stakedAmount - unstakedAmount;
840
+ _setLastUpdatesToCurrent(stakeInfo, targetInfo);
841
+
842
+ // logging
843
+ emit IStaking.LogStakingUnstaked(
844
+ stakeNftId,
845
+ unstakedAmount,
846
+ stakeInfo.stakedAmount,
847
+ stakeInfo.rewardAmount,
848
+ stakeInfo.lockedUntil);
849
+ }
850
+
851
+
852
+ function _setLastUpdatesToCurrent(
853
+ IStaking.StakeInfo storage stakeInfo,
854
+ IStaking.TargetInfo storage targetInfo
855
+ )
856
+ internal
573
857
  {
574
- _stakeBalance[targetNftId] = newStakeAmount;
575
- _rewardBalance[targetNftId] = newRewardAmount;
858
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
859
+ _setStakeLastUpdatesToCurrent(stakeInfo);
860
+ }
861
+
576
862
 
577
- // for targets we don't need the timestamp, just the blocknumber
578
- _lastUpdatedIn[targetNftId] = BlocknumberLib.currentBlocknumber();
863
+ function _setStakeLastUpdatesToCurrent(
864
+ IStaking.StakeInfo storage stakeInfo
865
+ )
866
+ internal
867
+ {
868
+ stakeInfo.lastUpdateIn = BlocknumberLib.current();
869
+ stakeInfo.lastUpdateAt = TimestampLib.current();
579
870
  }
580
871
 
581
- function _checkBalanceExists(NftId nftId)
872
+ //--- private stake and target functions --------------------------------//
873
+
874
+
875
+ function _getAndVerifyStake(
876
+ NftId stakeNftId
877
+ )
582
878
  private
583
879
  view
584
- returns (Blocknumber lastUpdatedIn)
880
+ returns (
881
+ IStaking.StakeInfo storage stakeInfo
882
+ )
585
883
  {
586
- lastUpdatedIn = _lastUpdatedIn[nftId];
884
+ stakeInfo = _stakeInfo[stakeNftId];
885
+ if (stakeInfo.lastUpdateIn.eqz()) {
886
+ revert ErrorStakingStoreStakeNotInitialized(stakeNftId);
887
+ }
888
+ }
889
+
587
890
 
588
- if (lastUpdatedIn.eqz()) {
589
- revert ErrorStakingStoreBalanceNotInitialized(nftId);
891
+ function _checkMaxStakedAmount(
892
+ NftId targetNftId,
893
+ IStaking.TargetInfo storage targetInfo,
894
+ Amount additionalstakedAmount
895
+ )
896
+ private
897
+ {
898
+ if (targetInfo.stakedAmount + additionalstakedAmount > targetInfo.maxStakedAmount) {
899
+ revert IStaking.ErrorStakingTargetMaxStakedAmountExceeded(
900
+ targetNftId,
901
+ targetInfo.maxStakedAmount,
902
+ targetInfo.stakedAmount + additionalstakedAmount);
590
903
  }
904
+
905
+ // TODO add check for tvl dependent maximum, see #628
591
906
  }
592
907
 
593
908
 
594
- function _getAndVerifyTvl(
595
- NftId targetNftId,
596
- address token
909
+ function _getAndVerifyTarget(
910
+ NftId targetNftId
597
911
  )
598
912
  private
599
913
  view
600
914
  returns (
601
- Blocknumber tvlLastUpdatedIn,
602
- Amount oldBalance,
603
- Amount oldDipBalance
915
+ IStaking.TargetInfo storage targetInfo
604
916
  )
605
917
  {
606
- tvlLastUpdatedIn = _tvlLastUpdatedIn[targetNftId];
918
+ targetInfo = _targetInfo[targetNftId];
607
919
 
608
- if (tvlLastUpdatedIn.eqz()) {
609
- revert ErrorStakingStoreTvlBalanceNotInitialized(targetNftId);
920
+ if (targetInfo.lastUpdateIn.eqz()) {
921
+ revert ErrorStakingStoreTargetNotInitialized(targetNftId);
610
922
  }
923
+ }
924
+
925
+ //--- private tvl functions ------------------------------------------------//
926
+
927
+ /// @dev Initializes token balance handling for the specified target.
928
+ function _createTvlBalance(NftId targetNftId, address token)
929
+ private
930
+ {
931
+ IStaking.TvlInfo storage info = _tvlInfo[targetNftId][token];
932
+
933
+ if (info.lastUpdateIn.gtz()) {
934
+ revert ErrorStakingStoreTvlBalanceAlreadyInitialized(targetNftId, token);
935
+ }
936
+
937
+ // set tvl balances to 0 and update last updated in
938
+ info.tvlAmount = AmountLib.zero();
939
+ info.lastUpdateIn = BlocknumberLib.current();
940
+ }
611
941
 
612
- oldBalance = _tvlBalance[targetNftId][token];
613
- oldDipBalance = _tvlInDip[targetNftId][token];
942
+
943
+ function _updateTvlBalance(
944
+ NftId targetNftId,
945
+ address token,
946
+ Amount newTvlAmount
947
+ )
948
+ private
949
+ returns (
950
+ Amount oldTvlAmount,
951
+ Blocknumber lastUpdatedIn
952
+ )
953
+ {
954
+ IStaking.TvlInfo storage tvlInfo = _getAndVerifyTvl(targetNftId, token);
955
+ oldTvlAmount = tvlInfo.tvlAmount;
956
+ lastUpdatedIn = tvlInfo.lastUpdateIn;
957
+
958
+ tvlInfo.tvlAmount = newTvlAmount;
959
+ tvlInfo.lastUpdateIn = BlocknumberLib.current();
960
+ }
961
+
962
+
963
+ function _getAndVerifyTvl(NftId targetNftId, address token)
964
+ private
965
+ view
966
+ returns (IStaking.TvlInfo storage tvlInfo)
967
+ {
968
+ tvlInfo = _tvlInfo[targetNftId][token];
969
+ if (tvlInfo.lastUpdateIn.eqz()) {
970
+ revert ErrorStakingStoreTvlBalanceNotInitialized(targetNftId, token);
971
+ }
614
972
  }
615
973
  }