@etherisc/gif-next 0.0.2-d8b116d-201 → 0.0.2-d8ddca8-422

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 (771) hide show
  1. package/README.md +160 -23
  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 +4 -0
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1664 -0
  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 +4 -0
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1403 -0
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +790 -0
  16. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  17. package/artifacts/contracts/{instance/module/ISetup.sol/ISetup.json → authorization/IAccess.sol/IAccess.json} +2 -2
  18. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +1372 -0
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  21. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +455 -0
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  23. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +397 -0
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  25. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +646 -0
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  27. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1244 -0
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  29. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +805 -0
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  31. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +949 -0
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  33. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1809 -0
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  35. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +930 -0
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  37. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +848 -0
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  39. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +1284 -0
  40. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  42. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1484 -0
  44. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  45. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +805 -0
  46. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  47. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2053 -0
  48. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  49. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +805 -0
  50. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  51. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1439 -0
  54. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  55. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +805 -0
  56. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  57. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1171 -0
  58. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  59. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1647 -0
  60. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  61. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +805 -0
  62. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  63. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2585 -0
  64. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  65. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +805 -0
  66. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  67. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +851 -0
  68. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  69. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +681 -1214
  70. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +741 -139
  72. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  73. package/artifacts/contracts/instance/Instance.sol/Instance.json +580 -2850
  74. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  75. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +2349 -0
  76. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  77. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +902 -0
  78. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  79. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1963 -739
  80. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +774 -377
  82. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  83. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +385 -121
  84. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  85. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +3792 -0
  86. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  87. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +866 -0
  88. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +4 -0
  89. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +318 -0
  90. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{Cloneable.sol → base/Cloneable.sol}/Cloneable.json +1 -49
  92. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  93. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  94. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  95. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +223 -0
  96. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  97. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +192 -0
  98. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
  99. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
  100. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  101. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  102. package/artifacts/contracts/instance/module/{ITreasury.sol/ITreasury.json → IComponents.sol/IComponents.json} +2 -2
  103. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  104. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  105. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  106. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  107. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  108. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  109. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +957 -0
  110. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  111. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +810 -0
  112. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  113. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +52 -0
  114. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  115. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +772 -0
  116. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  117. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +762 -0
  118. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  119. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +873 -0
  120. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  121. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +1042 -0
  122. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  123. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +810 -0
  124. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  125. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1242 -0
  126. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  127. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +805 -0
  128. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  129. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1438 -0
  130. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  131. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +866 -0
  132. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  133. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +1033 -0
  134. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  135. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +905 -0
  136. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  137. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1449 -0
  138. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  139. package/artifacts/contracts/pool/Pool.sol/Pool.json +1025 -0
  140. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  141. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +522 -0
  142. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  143. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1833 -0
  144. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  145. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +866 -0
  146. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  147. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +1036 -0
  148. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  149. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +790 -0
  150. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  151. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1159 -0
  152. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  153. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +805 -0
  154. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  155. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1536 -0
  156. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  157. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +886 -0
  158. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  159. package/artifacts/contracts/{instance/service/IProductService.sol/IProductService.json → product/IApplicationService.sol/IApplicationService.json} +394 -350
  160. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  161. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +1104 -0
  162. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  163. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +1036 -0
  164. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  165. package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → product/IPricingService.sol/IPricingService.json} +340 -357
  166. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  167. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +1016 -0
  168. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  169. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → product/IRiskService.sol/IRiskService.json} +372 -173
  170. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  171. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1404 -0
  172. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  173. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +783 -0
  174. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  175. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +854 -0
  176. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  177. package/artifacts/contracts/product/PricingService.sol/PricingService.json +932 -0
  178. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  179. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +814 -0
  180. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  181. package/artifacts/contracts/product/Product.sol/Product.json +1117 -0
  182. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  183. package/artifacts/contracts/product/RiskService.sol/RiskService.json +873 -0
  184. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  185. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +774 -0
  186. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  187. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +72 -16
  188. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  189. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +689 -113
  190. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  191. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +351 -226
  192. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
  193. package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
  194. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  195. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -0
  196. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  197. package/artifacts/contracts/registry/Registry.sol/Registry.json +1027 -149
  198. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  199. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +2160 -0
  200. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
  201. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1074 -0
  202. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  203. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +327 -322
  204. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  205. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +375 -119
  206. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  207. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +2152 -0
  208. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  209. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +205 -0
  210. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  211. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1389 -0
  212. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  213. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +683 -0
  214. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  215. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +391 -80
  216. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  217. package/artifacts/contracts/shared/Component.sol/Component.json +705 -0
  218. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  219. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +1551 -0
  220. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  221. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +862 -0
  222. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  223. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +632 -0
  224. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  225. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  226. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  227. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  228. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  229. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  230. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  231. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → shared/IComponent.sol/IComponent.json} +291 -201
  232. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  233. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +1175 -0
  234. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  235. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +707 -0
  236. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  237. package/artifacts/contracts/{instance/base → shared}/IKeyValueStore.sol/IKeyValueStore.json +101 -20
  238. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  239. package/artifacts/contracts/{instance/base → shared}/ILifecycle.sol/ILifecycle.json +35 -4
  240. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  241. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +61 -22
  242. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  243. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +175 -0
  244. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  245. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +162 -15
  246. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  247. package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
  248. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  249. package/artifacts/contracts/shared/IService.sol/IService.json +161 -154
  250. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  251. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  252. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  253. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +795 -0
  254. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  255. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +538 -0
  256. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  257. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +174 -0
  258. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  259. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  260. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  261. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +98 -28
  262. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  263. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +198 -0
  264. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  265. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +178 -55
  266. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  267. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +58 -0
  268. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  269. package/artifacts/contracts/shared/Service.sol/Service.json +177 -163
  270. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  271. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +635 -8
  272. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  273. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
  274. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  275. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
  276. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  277. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +2757 -0
  278. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  279. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +1147 -0
  280. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.dbg.json +4 -0
  281. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.json +50 -0
  282. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  283. package/artifacts/contracts/staking/Staking.sol/Staking.json +3201 -0
  284. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  285. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +470 -0
  286. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  287. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +855 -0
  288. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  289. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +704 -0
  290. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  291. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +1344 -0
  292. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  293. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +766 -0
  294. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  295. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +3065 -0
  296. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +4 -0
  297. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +309 -0
  298. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  299. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +679 -0
  300. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  301. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +10 -0
  302. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  303. package/artifacts/contracts/type/Amount.sol/AmountLib.json +398 -0
  304. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  305. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +251 -0
  306. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
  307. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +193 -0
  308. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  309. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +203 -0
  310. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  311. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +104 -0
  312. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  313. package/artifacts/contracts/type/Fee.sol/FeeLib.json +373 -0
  314. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  315. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +125 -0
  316. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  317. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  318. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  319. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +228 -0
  320. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  321. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +33 -0
  322. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  323. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +241 -0
  324. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  325. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  326. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  327. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  328. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  329. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  330. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  331. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +204 -0
  332. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  333. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +254 -0
  334. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  335. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +289 -0
  336. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  337. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +148 -0
  338. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  339. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  340. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  341. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +105 -0
  342. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  343. package/artifacts/contracts/type/String.sol/StrLib.json +180 -0
  344. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  345. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +312 -0
  346. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  347. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +572 -0
  348. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  349. package/artifacts/contracts/type/Version.sol/VersionLib.json +158 -0
  350. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  351. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +167 -0
  352. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  353. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.json +65 -0
  354. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  355. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +656 -0
  356. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  357. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +142 -0
  358. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  359. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.json +88 -0
  360. package/contracts/accounting/AccountingService.sol +274 -0
  361. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  362. package/contracts/accounting/IAccountingService.sol +47 -0
  363. package/contracts/authorization/AccessAdmin.sol +780 -0
  364. package/contracts/authorization/AccessAdminLib.sol +396 -0
  365. package/contracts/authorization/AccessManagerCloneable.sol +158 -0
  366. package/contracts/authorization/Authorization.sol +169 -0
  367. package/contracts/authorization/IAccess.sol +67 -0
  368. package/contracts/authorization/IAccessAdmin.sol +144 -0
  369. package/contracts/authorization/IAuthorization.sol +26 -0
  370. package/contracts/authorization/IServiceAuthorization.sol +78 -0
  371. package/contracts/authorization/ServiceAuthorization.sol +320 -0
  372. package/contracts/distribution/BasicDistribution.sol +141 -0
  373. package/contracts/distribution/BasicDistributionAuthorization.sol +67 -0
  374. package/contracts/distribution/Distribution.sol +247 -0
  375. package/contracts/distribution/DistributionService.sol +448 -0
  376. package/contracts/distribution/DistributionServiceManager.sol +39 -0
  377. package/contracts/distribution/IDistributionComponent.sol +45 -0
  378. package/contracts/distribution/IDistributionService.sol +115 -0
  379. package/contracts/examples/fire/DamageLevel.sol +59 -0
  380. package/contracts/examples/fire/FirePool.sol +86 -0
  381. package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
  382. package/contracts/examples/fire/FireProduct.sol +433 -0
  383. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  384. package/contracts/examples/fire/FireUSD.sol +26 -0
  385. package/contracts/examples/unpermissioned/SimpleDistribution.sol +81 -0
  386. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  387. package/contracts/examples/unpermissioned/SimpleOracle.sol +133 -0
  388. package/contracts/examples/unpermissioned/SimplePool.sol +102 -0
  389. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  390. package/contracts/examples/unpermissioned/SimpleProduct.sol +437 -0
  391. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  392. package/contracts/instance/BundleSet.sol +130 -0
  393. package/contracts/instance/IInstance.sol +127 -36
  394. package/contracts/instance/IInstanceService.sol +104 -17
  395. package/contracts/instance/Instance.sol +246 -342
  396. package/contracts/instance/InstanceAdmin.sol +383 -0
  397. package/contracts/instance/InstanceAuthorizationV3.sol +266 -0
  398. package/contracts/instance/InstanceReader.sol +525 -208
  399. package/contracts/instance/InstanceService.sol +462 -163
  400. package/contracts/instance/InstanceServiceManager.sol +14 -32
  401. package/contracts/instance/InstanceStore.sol +298 -0
  402. package/contracts/instance/RiskSet.sol +126 -0
  403. package/contracts/instance/base/BalanceStore.sol +121 -0
  404. package/contracts/instance/base/Cloneable.sol +28 -0
  405. package/contracts/instance/base/ObjectCounter.sol +20 -0
  406. package/contracts/instance/base/ObjectLifecycle.sol +109 -0
  407. package/contracts/instance/base/ObjectSet.sol +77 -0
  408. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  409. package/contracts/instance/module/IBundle.sol +10 -9
  410. package/contracts/instance/module/IComponents.sol +62 -0
  411. package/contracts/instance/module/IDistribution.sol +25 -10
  412. package/contracts/instance/module/IPolicy.sol +81 -21
  413. package/contracts/instance/module/IRisk.sol +6 -1
  414. package/contracts/{test/Usdc.sol → mock/Dip.sol} +6 -6
  415. package/contracts/oracle/BasicOracle.sol +45 -0
  416. package/contracts/oracle/BasicOracleAuthorization.sol +53 -0
  417. package/contracts/oracle/IOracle.sol +41 -0
  418. package/contracts/oracle/IOracleComponent.sol +33 -0
  419. package/contracts/oracle/IOracleService.sol +66 -0
  420. package/contracts/oracle/Oracle.sol +154 -0
  421. package/contracts/oracle/OracleService.sol +310 -0
  422. package/contracts/oracle/OracleServiceManager.sol +39 -0
  423. package/contracts/pool/BasicPool.sol +162 -0
  424. package/contracts/pool/BasicPoolAuthorization.sol +81 -0
  425. package/contracts/pool/BundleService.sol +386 -0
  426. package/contracts/pool/BundleServiceManager.sol +39 -0
  427. package/contracts/pool/IBundleService.sol +116 -0
  428. package/contracts/pool/IPoolComponent.sol +62 -0
  429. package/contracts/pool/IPoolService.sol +170 -0
  430. package/contracts/pool/Pool.sol +333 -0
  431. package/contracts/pool/PoolLib.sol +341 -0
  432. package/contracts/pool/PoolService.sol +614 -0
  433. package/contracts/pool/PoolServiceManager.sol +39 -0
  434. package/contracts/product/ApplicationService.sol +327 -0
  435. package/contracts/product/ApplicationServiceManager.sol +38 -0
  436. package/contracts/product/BasicProduct.sol +49 -0
  437. package/contracts/product/BasicProductAuthorization.sol +63 -0
  438. package/contracts/product/ClaimService.sol +630 -0
  439. package/contracts/product/ClaimServiceManager.sol +38 -0
  440. package/contracts/product/IApplicationService.sol +88 -0
  441. package/contracts/product/IClaimService.sol +136 -0
  442. package/contracts/product/IPolicyService.sol +102 -0
  443. package/contracts/product/IPricingService.sol +40 -0
  444. package/contracts/product/IProductComponent.sol +62 -0
  445. package/contracts/product/IRiskService.sol +48 -0
  446. package/contracts/product/PolicyService.sol +645 -0
  447. package/contracts/product/PolicyServiceLib.sol +139 -0
  448. package/contracts/product/PolicyServiceManager.sol +39 -0
  449. package/contracts/product/PricingService.sol +306 -0
  450. package/contracts/product/PricingServiceManager.sol +39 -0
  451. package/contracts/product/Product.sol +493 -0
  452. package/contracts/product/RiskService.sol +190 -0
  453. package/contracts/product/RiskServiceManager.sol +39 -0
  454. package/contracts/registry/ChainNft.sol +82 -35
  455. package/contracts/registry/IRegistry.sol +123 -32
  456. package/contracts/registry/IRegistryService.sol +40 -28
  457. package/contracts/registry/IRelease.sol +29 -0
  458. package/contracts/registry/ITransferInterceptor.sol +1 -1
  459. package/contracts/registry/Registry.sol +561 -273
  460. package/contracts/registry/RegistryAdmin.sol +191 -0
  461. package/contracts/registry/RegistryAuthorization.sol +336 -0
  462. package/contracts/registry/RegistryService.sol +116 -233
  463. package/contracts/registry/RegistryServiceManager.sol +26 -53
  464. package/contracts/registry/ReleaseAdmin.sol +195 -0
  465. package/contracts/registry/ReleaseLifecycle.sol +32 -0
  466. package/contracts/registry/ReleaseRegistry.sol +525 -0
  467. package/contracts/registry/ServiceAuthorizationV3.sol +342 -0
  468. package/contracts/registry/TokenRegistry.sol +265 -59
  469. package/contracts/shared/Component.sol +214 -0
  470. package/contracts/shared/ComponentService.sol +687 -0
  471. package/contracts/shared/ComponentServiceManager.sol +38 -0
  472. package/contracts/shared/ContractLib.sol +312 -0
  473. package/contracts/shared/IComponent.sol +58 -0
  474. package/contracts/shared/IComponentService.sol +111 -0
  475. package/contracts/shared/IInstanceLinkedComponent.sol +30 -0
  476. package/contracts/{instance/base → shared}/IKeyValueStore.sol +16 -11
  477. package/contracts/{instance/base → shared}/ILifecycle.sol +5 -4
  478. package/contracts/shared/INftOwnable.sol +17 -12
  479. package/contracts/shared/IPolicyHolder.sol +35 -0
  480. package/contracts/shared/IRegisterable.sol +24 -5
  481. package/contracts/shared/IRegistryLinked.sol +11 -0
  482. package/contracts/shared/IService.sol +13 -5
  483. package/contracts/shared/InitializableERC165.sol +35 -0
  484. package/contracts/shared/InstanceLinkedComponent.sol +194 -0
  485. package/contracts/shared/KeyValueStore.sol +131 -0
  486. package/contracts/shared/Lifecycle.sol +88 -0
  487. package/contracts/shared/NftIdSet.sol +65 -0
  488. package/contracts/shared/NftOwnable.sol +77 -82
  489. package/contracts/shared/PolicyHolder.sol +63 -0
  490. package/contracts/shared/Registerable.sol +54 -38
  491. package/contracts/shared/RegistryLinked.sol +38 -0
  492. package/contracts/shared/Service.sol +45 -33
  493. package/contracts/shared/TokenHandler.sol +327 -12
  494. package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
  495. package/contracts/staking/IStaking.sol +367 -0
  496. package/contracts/staking/IStakingService.sol +127 -0
  497. package/contracts/staking/ITargetLimitHandler.sol +17 -0
  498. package/contracts/staking/Staking.sol +797 -0
  499. package/contracts/staking/StakingLib.sol +195 -0
  500. package/contracts/staking/StakingManager.sol +53 -0
  501. package/contracts/staking/StakingReader.sol +171 -0
  502. package/contracts/staking/StakingService.sol +321 -0
  503. package/contracts/staking/StakingServiceManager.sol +46 -0
  504. package/contracts/staking/StakingStore.sol +1364 -0
  505. package/contracts/staking/TargetHandler.sol +132 -0
  506. package/contracts/staking/TargetManagerLib.sol +234 -0
  507. package/contracts/{types → type}/AddressSet.sol +1 -1
  508. package/contracts/type/Amount.sol +154 -0
  509. package/contracts/{types → type}/Blocknumber.sol +36 -12
  510. package/contracts/type/ChainId.sol +101 -0
  511. package/contracts/type/ClaimId.sol +80 -0
  512. package/contracts/{types → type}/DistributorType.sol +2 -2
  513. package/contracts/type/Fee.sol +66 -0
  514. package/contracts/{types → type}/Key32.sol +2 -2
  515. package/contracts/type/Key32Set.sol +62 -0
  516. package/contracts/{types → type}/NftId.sol +28 -15
  517. package/contracts/{types → type}/NftIdSet.sol +2 -2
  518. package/contracts/type/ObjectType.sol +307 -0
  519. package/contracts/type/PayoutId.sol +82 -0
  520. package/contracts/{types → type}/Referral.sol +6 -1
  521. package/contracts/type/RequestId.sol +75 -0
  522. package/contracts/type/RiskId.sol +75 -0
  523. package/contracts/type/RoleId.sol +180 -0
  524. package/contracts/type/Seconds.sol +120 -0
  525. package/contracts/type/Selector.sol +107 -0
  526. package/contracts/{types → type}/StateId.sol +48 -4
  527. package/contracts/type/String.sol +65 -0
  528. package/contracts/{types → type}/Timestamp.sol +36 -20
  529. package/contracts/type/UFixed.sol +263 -0
  530. package/contracts/{types → type}/Version.sol +59 -7
  531. package/contracts/{shared → upgradeability}/IVersionable.sol +7 -47
  532. package/contracts/upgradeability/ProxyManager.sol +246 -0
  533. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +24 -0
  534. package/contracts/upgradeability/Versionable.sol +62 -0
  535. package/package.json +12 -8
  536. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  537. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
  538. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  539. package/artifacts/contracts/components/Distribution.sol/Distribution.json +0 -618
  540. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  541. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
  542. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  543. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -152
  544. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  545. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -249
  546. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  547. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -157
  548. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  549. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -787
  550. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  551. package/artifacts/contracts/components/Product.sol/Product.json +0 -729
  552. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  553. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  554. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  555. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  556. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  557. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  558. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  559. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  560. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  561. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  562. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  563. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  564. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  565. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  566. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  567. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  568. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  569. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  570. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  571. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  572. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  573. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  574. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  575. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  576. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  577. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  578. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  579. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  580. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  581. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  582. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  583. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  584. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  585. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  586. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  587. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  588. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  589. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  590. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  591. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  592. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +0 -101
  593. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  594. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  595. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  596. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -750
  597. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
  598. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  599. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  600. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +0 -4
  601. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +0 -917
  602. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  603. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +0 -272
  604. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  605. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  606. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  607. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  608. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  609. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  610. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -502
  611. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
  612. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -169
  613. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  614. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -211
  615. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +0 -4
  616. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +0 -4
  617. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  618. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  619. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  620. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -716
  621. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  622. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -444
  623. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  624. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  625. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +0 -446
  626. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  627. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  628. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  629. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -971
  630. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  631. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -460
  632. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  633. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -1147
  634. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  635. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -488
  636. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  637. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  638. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  639. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -35
  640. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  641. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +0 -205
  642. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  643. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -349
  644. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  645. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  646. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  647. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  648. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  649. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +0 -228
  650. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  651. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  652. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  653. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -305
  654. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  655. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  656. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  657. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -600
  658. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  659. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  660. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  661. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  662. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  663. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -286
  664. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  665. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  666. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  667. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +0 -10
  668. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  669. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +0 -174
  670. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  671. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  672. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  673. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +0 -104
  674. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  675. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
  676. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  677. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +0 -125
  678. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  679. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
  680. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  681. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +0 -33
  682. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  683. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  684. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  685. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +0 -92
  686. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  687. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +0 -123
  688. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  689. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +0 -86
  690. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  691. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +0 -156
  692. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  693. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +0 -92
  694. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  695. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +0 -249
  696. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  697. package/artifacts/contracts/types/UFixed.sol/MathLib.json +0 -10
  698. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  699. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +0 -479
  700. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  701. package/artifacts/contracts/types/Version.sol/VersionLib.json +0 -177
  702. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  703. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +0 -49
  704. package/contracts/components/BaseComponent.sol +0 -91
  705. package/contracts/components/Distribution.sol +0 -163
  706. package/contracts/components/IBaseComponent.sol +0 -25
  707. package/contracts/components/IDistributionComponent.sol +0 -44
  708. package/contracts/components/IPoolComponent.sol +0 -62
  709. package/contracts/components/IProductComponent.sol +0 -35
  710. package/contracts/components/Pool.sol +0 -247
  711. package/contracts/components/Product.sol +0 -289
  712. package/contracts/experiment/cloning/Cloner.sol +0 -47
  713. package/contracts/experiment/errors/Require.sol +0 -38
  714. package/contracts/experiment/errors/Revert.sol +0 -44
  715. package/contracts/experiment/inheritance/A.sol +0 -53
  716. package/contracts/experiment/inheritance/B.sol +0 -28
  717. package/contracts/experiment/inheritance/C.sol +0 -34
  718. package/contracts/experiment/inheritance/IA.sol +0 -13
  719. package/contracts/experiment/inheritance/IB.sol +0 -10
  720. package/contracts/experiment/inheritance/IC.sol +0 -12
  721. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  722. package/contracts/experiment/statemachine/ISM.sol +0 -25
  723. package/contracts/experiment/statemachine/SM.sol +0 -57
  724. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  725. package/contracts/experiment/types/TypeA.sol +0 -47
  726. package/contracts/experiment/types/TypeB.sol +0 -29
  727. package/contracts/instance/AccessManagedSimple.sol +0 -115
  728. package/contracts/instance/AccessManagerSimple.sol +0 -692
  729. package/contracts/instance/BundleManager.sol +0 -143
  730. package/contracts/instance/Cloneable.sol +0 -47
  731. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  732. package/contracts/instance/InstanceAccessManager.sol +0 -288
  733. package/contracts/instance/ObjectManager.sol +0 -95
  734. package/contracts/instance/base/ComponentServiceBase.sol +0 -134
  735. package/contracts/instance/base/IInstanceBase.sol +0 -23
  736. package/contracts/instance/base/KeyValueStore.sol +0 -172
  737. package/contracts/instance/base/Lifecycle.sol +0 -100
  738. package/contracts/instance/module/IAccess.sol +0 -38
  739. package/contracts/instance/module/ISetup.sol +0 -46
  740. package/contracts/instance/module/ITreasury.sol +0 -23
  741. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  742. package/contracts/instance/service/DistributionService.sol +0 -88
  743. package/contracts/instance/service/DistributionServiceManager.sol +0 -54
  744. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  745. package/contracts/instance/service/IDistributionService.sol +0 -12
  746. package/contracts/instance/service/IPoolService.sol +0 -43
  747. package/contracts/instance/service/IProductService.sol +0 -110
  748. package/contracts/instance/service/PoolService.sol +0 -204
  749. package/contracts/instance/service/PoolServiceManager.sol +0 -54
  750. package/contracts/instance/service/ProductService.sol +0 -561
  751. package/contracts/instance/service/ProductServiceManager.sol +0 -54
  752. package/contracts/shared/ContractDeployerLib.sol +0 -72
  753. package/contracts/shared/ERC165.sol +0 -25
  754. package/contracts/shared/ProxyManager.sol +0 -94
  755. package/contracts/shared/RegisterableUpgradable.sol +0 -16
  756. package/contracts/shared/UpgradableProxyWithAdmin.sol +0 -16
  757. package/contracts/shared/Versionable.sol +0 -147
  758. package/contracts/test/TestFee.sol +0 -25
  759. package/contracts/test/TestRegisterable.sol +0 -18
  760. package/contracts/test/TestRoleId.sol +0 -14
  761. package/contracts/test/TestService.sol +0 -24
  762. package/contracts/test/TestToken.sol +0 -26
  763. package/contracts/test/TestVersion.sol +0 -44
  764. package/contracts/test/TestVersionable.sol +0 -17
  765. package/contracts/types/ChainId.sol +0 -38
  766. package/contracts/types/Fee.sol +0 -56
  767. package/contracts/types/NumberId.sol +0 -52
  768. package/contracts/types/ObjectType.sol +0 -152
  769. package/contracts/types/RiskId.sol +0 -43
  770. package/contracts/types/RoleId.sol +0 -90
  771. package/contracts/types/UFixed.sol +0 -325
@@ -0,0 +1,1364 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
5
+ import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
6
+
7
+ import {IRegistry} from "../registry/IRegistry.sol";
8
+ import {IStaking} from "./IStaking.sol";
9
+ import {ITargetLimitHandler} from "./ITargetLimitHandler.sol";
10
+
11
+ import {Amount, AmountLib} from "../type/Amount.sol";
12
+ import {ChainId, ChainIdLib} from "../type/ChainId.sol";
13
+ import {Blocknumber, BlocknumberLib} from "../type/Blocknumber.sol";
14
+ import {NftId, NftIdLib} from "../type/NftId.sol";
15
+ import {NftIdSet} from "../shared/NftIdSet.sol";
16
+ import {ObjectType} from "../type/ObjectType.sol";
17
+ import {PROTOCOL, INSTANCE} from "../type/ObjectType.sol";
18
+ import {Seconds, SecondsLib} from "../type/Seconds.sol";
19
+ import {StakingLib} from "./StakingLib.sol";
20
+ import {StakingReader} from "./StakingReader.sol";
21
+ import {TargetManagerLib} from "./TargetManagerLib.sol";
22
+ import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
23
+ import {UFixed, UFixedLib} from "../type/UFixed.sol";
24
+
25
+
26
+ contract StakingStore is
27
+ Initializable,
28
+ AccessManaged
29
+ {
30
+
31
+ // token
32
+ error ErrorStakingStoreTokenNotRegistered(ChainId chainId, address token);
33
+ error ErrorStakingStoreTokenAlreadyAdded(ChainId chainId, address token);
34
+ error ErrorStakingStoreTokenUnknown(ChainId chainId, address token);
35
+
36
+ // target
37
+ error ErrorStakingStoreTargetNotInitialized(NftId targetNftId);
38
+ error ErrorStakingStoreLimitNotInitialized(NftId targetNftId);
39
+
40
+ // in/decreasing reward reserves
41
+ error ErrorStakingStoreNotTarget(NftId targetNftId);
42
+ error ErrorStakingStoreRewardReservesInsufficient(NftId targetNftId, Amount reserveAmount, Amount claimedAmount);
43
+
44
+ // stakes
45
+ error ErrorStakingStoreStakesExceedingTargetMaxAmount(NftId targetNftId, Amount stakeLimitAmount, Amount newIStaking);
46
+ error ErrorStakingStoreStakeNotInitialized(NftId nftId);
47
+
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);
55
+
56
+ IRegistry private _registry;
57
+ ITargetLimitHandler private _targetLimitHandler;
58
+ StakingReader private _reader;
59
+ NftIdSet private _targetNftIdSet;
60
+
61
+ // target support
62
+ mapping(ObjectType targetType => IStaking.SupportInfo) private _supportInfo;
63
+
64
+ // targets
65
+ mapping(NftId targetNftId => IStaking.TargetInfo) private _targetInfo;
66
+ mapping(NftId targetNftId => IStaking.LimitInfo) private _limitInfo;
67
+ mapping(NftId targetNftId => mapping(address token => IStaking.TvlInfo)) private _tvlInfo;
68
+ mapping(NftId targetNftId => address [] token) private _targetToken;
69
+
70
+ // staking rate
71
+ mapping(ChainId chainId => mapping(address token => IStaking.TokenInfo)) private _tokenInfo;
72
+
73
+ // stakes
74
+ mapping(NftId stakeNftId => IStaking.StakeInfo) private _stakeInfo;
75
+
76
+
77
+ constructor(
78
+ IRegistry registry,
79
+ StakingReader reader
80
+ )
81
+ AccessManaged(msg.sender)
82
+ {
83
+ // set final authority
84
+ setAuthority(registry.getAuthority());
85
+
86
+ // set internal variables
87
+ _registry = registry;
88
+ _reader = reader;
89
+ _targetNftIdSet = new NftIdSet();
90
+
91
+ _createInitialSetup();
92
+ // register protocol target
93
+ }
94
+
95
+
96
+ function _createInitialSetup()
97
+ internal
98
+ {
99
+ // define support parameters for protocol target
100
+ _setSupportInfo(
101
+ PROTOCOL(),
102
+ true, // isSupported
103
+ false, // allowNewTargets,
104
+ true, // crossChainIsSupported
105
+ AmountLib.zero(), // minStakingAmount
106
+ AmountLib.max(), // maxStakingAmount,
107
+ SecondsLib.oneDay(), // minLockingPeriod,
108
+ SecondsLib.oneYear(), // maxLockingPeriod,
109
+ UFixedLib.zero(), // minRewardRate,
110
+ UFixedLib.toUFixed(15, -2)); // maxRewardRate
111
+
112
+ // create protocol target
113
+ _createTarget(
114
+ NftIdLib.toNftId(1101),
115
+ PROTOCOL(),
116
+ TargetManagerLib.getDefaultLockingPeriod(),
117
+ TargetManagerLib.getDefaultRewardRate(),
118
+ false); // no parameter check
119
+
120
+ // define support parameters for instance targets
121
+ _setSupportInfo(
122
+ INSTANCE(),
123
+ true, // isSupported
124
+ true, // allowNewTargets,
125
+ true, // allowCrossChain
126
+ AmountLib.toAmount(100000 * 10 ** 18), // minStakingAmount 100'000 DIP
127
+ AmountLib.max(), // maxStakingAmount,
128
+ SecondsLib.oneDay(), // minLockingPeriod,
129
+ SecondsLib.oneYear(), // maxLockingPeriod,
130
+ UFixedLib.zero(), // minRewardRate,
131
+ UFixedLib.toUFixed(3, -1)); // maxRewardRate 30%
132
+ }
133
+
134
+
135
+ function initialize(
136
+ address targetLimitHandler
137
+ )
138
+ external
139
+ initializer()
140
+ {
141
+ _targetLimitHandler = ITargetLimitHandler(targetLimitHandler);
142
+ }
143
+
144
+
145
+ //--- dependency management ---------------------------------------------//
146
+
147
+ function setStakingReader(address reader)
148
+ external
149
+ restricted()
150
+ {
151
+ address oldReader = address(_reader);
152
+ _reader = StakingReader(reader);
153
+
154
+ emit IStaking.LogStakingStakingReaderSet(reader, oldReader);
155
+ }
156
+
157
+
158
+ function setTargetLimitHandler(address targetLimitHandler )
159
+ external
160
+ restricted()
161
+ {
162
+ address oldTargetHandler = address(_targetLimitHandler);
163
+ _targetLimitHandler = ITargetLimitHandler(targetLimitHandler );
164
+
165
+ emit IStaking.LogStakingTargetHandlerSet(targetLimitHandler , oldTargetHandler);
166
+ }
167
+
168
+ //--- target support management -----------------------------------------//
169
+
170
+ /// @dev Generic setter for support info.
171
+ /// Any change in any of the parameters requires to set all parameters.
172
+ function setSupportInfo(
173
+ ObjectType targetType,
174
+ bool isSupported,
175
+ bool allowNewTargets,
176
+ bool allowCrossChain,
177
+ Amount minStakingAmount,
178
+ Amount maxStakingAmount,
179
+ Seconds minLockingPeriod,
180
+ Seconds maxLockingPeriod,
181
+ UFixed minRewardRate,
182
+ UFixed maxRewardRate
183
+ )
184
+ external
185
+ restricted()
186
+ {
187
+ _setSupportInfo(
188
+ targetType,
189
+ isSupported,
190
+ allowNewTargets,
191
+ allowCrossChain,
192
+ minStakingAmount,
193
+ maxStakingAmount,
194
+ minLockingPeriod,
195
+ maxLockingPeriod,
196
+ minRewardRate,
197
+ maxRewardRate);
198
+ }
199
+
200
+
201
+ function _setSupportInfo(
202
+ ObjectType targetType,
203
+ bool isSupported,
204
+ bool allowNewTargets,
205
+ bool allowCrossChain,
206
+ Amount minStakingAmount,
207
+ Amount maxStakingAmount,
208
+ Seconds minLockingPeriod,
209
+ Seconds maxLockingPeriod,
210
+ UFixed minRewardRate,
211
+ UFixed maxRewardRate
212
+ )
213
+ private
214
+ {
215
+ // checks
216
+ if (targetType.eqz()) {
217
+ revert IStaking.ErrorStakingSupportTypeInvalid(targetType);
218
+ }
219
+
220
+ // check staking amount limits
221
+ if (minStakingAmount > maxStakingAmount) {
222
+ revert IStaking.ErrorStakingStakingAmountsInvalid(minStakingAmount, maxStakingAmount);
223
+ }
224
+
225
+ // check locking period limits
226
+ if (minLockingPeriod > maxLockingPeriod) {
227
+ revert IStaking.ErrorStakingLockingPeriodsInvalid(minLockingPeriod, maxLockingPeriod);
228
+ }
229
+
230
+ // check reward rate limits
231
+ if (minRewardRate > maxRewardRate) {
232
+ revert IStaking.ErrorStakingRewardRatesInvalid(minRewardRate, maxRewardRate);
233
+ }
234
+
235
+ // effects
236
+ // remember previous last update
237
+ Blocknumber lastUpdateIn = _supportInfo[targetType].lastUpdateIn;
238
+
239
+ // set parameters to new values
240
+ _supportInfo[targetType].isSupported = isSupported;
241
+ _supportInfo[targetType].allowNewTargets = allowNewTargets;
242
+ _supportInfo[targetType].allowCrossChain = allowCrossChain;
243
+ _supportInfo[targetType].minStakingAmount = minStakingAmount;
244
+ _supportInfo[targetType].maxStakingAmount = maxStakingAmount;
245
+ _supportInfo[targetType].minLockingPeriod = minLockingPeriod;
246
+ _supportInfo[targetType].maxLockingPeriod = maxLockingPeriod;
247
+ _supportInfo[targetType].minRewardRate = minRewardRate;
248
+ _supportInfo[targetType].maxRewardRate = maxRewardRate;
249
+ // update last update
250
+ _supportInfo[targetType].lastUpdateIn = BlocknumberLib.current();
251
+
252
+ // logging
253
+ emit IStaking.LogStakingSupportInfoSet(
254
+ targetType,
255
+ isSupported,
256
+ allowNewTargets,
257
+ allowCrossChain,
258
+ minStakingAmount,
259
+ maxStakingAmount,
260
+ minLockingPeriod,
261
+ maxLockingPeriod,
262
+ minRewardRate,
263
+ maxRewardRate,
264
+ lastUpdateIn);
265
+ }
266
+
267
+ /// @dev Returns the support info for the specified target type.
268
+ function getSupportInfo(ObjectType targetType)
269
+ external
270
+ view
271
+ returns (IStaking.SupportInfo memory supportInfo)
272
+ {
273
+ return _supportInfo[targetType];
274
+ }
275
+
276
+ //--- token management --------------------------------------------------//
277
+
278
+ /// @dev Registers a token for tvl management.
279
+ function addToken(
280
+ ChainId chainId,
281
+ address token
282
+ )
283
+ external
284
+ restricted() // token registry via staking
285
+ {
286
+ // checks
287
+ IStaking.TokenInfo storage info = _tokenInfo[chainId][token];
288
+
289
+ // check token is not yet registered
290
+ if (info.lastUpdateIn.gtz()) {
291
+ revert ErrorStakingStoreTokenAlreadyAdded(chainId, token);
292
+ }
293
+
294
+ info.stakingRate = UFixedLib.zero();
295
+ info.lastUpdateIn = BlocknumberLib.current();
296
+
297
+ // logging
298
+ emit IStaking.LogStakingTokenAdded(chainId, token);
299
+ }
300
+
301
+
302
+ /// @dev Sets the staking rate for the token.
303
+ function setStakingRate(
304
+ ChainId chainId,
305
+ address token,
306
+ UFixed stakingRate
307
+ )
308
+ external
309
+ restricted() // staking
310
+ returns (
311
+ UFixed oldStakingRate,
312
+ Blocknumber lastUpdatedIn
313
+ )
314
+ {
315
+ IStaking.TokenInfo storage info = _tokenInfo[chainId][token];
316
+ if (info.lastUpdateIn.eqz()) {
317
+ revert ErrorStakingStoreTokenUnknown(chainId, token);
318
+ }
319
+
320
+ // get previous values
321
+ oldStakingRate = info.stakingRate;
322
+ lastUpdatedIn = info.lastUpdateIn;
323
+
324
+ // update values
325
+ info.stakingRate = stakingRate;
326
+ info.lastUpdateIn = BlocknumberLib.current();
327
+ }
328
+
329
+ //--- target management -------------------------------------------------//
330
+
331
+ function createTarget(
332
+ NftId targetNftId,
333
+ ObjectType objectType,
334
+ Seconds lockingPeriod,
335
+ UFixed rewardRate
336
+ )
337
+ external
338
+ restricted() // staking
339
+ {
340
+ _createTarget(targetNftId, objectType, lockingPeriod, rewardRate, true);
341
+ }
342
+
343
+
344
+ function setLockingPeriod(
345
+ NftId targetNftId,
346
+ Seconds lockingPeriod
347
+ )
348
+ external
349
+ restricted() // staking
350
+ {
351
+ // checks
352
+ (
353
+ IStaking.TargetInfo storage targetInfo,
354
+ Blocknumber lastUpdateIn
355
+ ) = _verifyAndUpdateTarget(targetNftId);
356
+
357
+ TargetManagerLib.checkLockingPeriod(_reader, targetNftId, targetInfo.objectType, lockingPeriod);
358
+
359
+ // effects
360
+ Seconds oldLockingPeriod = targetInfo.lockingPeriod;
361
+ targetInfo.lockingPeriod = lockingPeriod;
362
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
363
+
364
+ // logging
365
+ emit IStaking.LogStakingTargetLockingPeriodSet(targetNftId, lockingPeriod, oldLockingPeriod, lastUpdateIn);
366
+ }
367
+
368
+
369
+ function setRewardRate(
370
+ NftId targetNftId,
371
+ UFixed rewardRate
372
+ )
373
+ external
374
+ restricted() // staking
375
+ {
376
+ // checks
377
+ (
378
+ IStaking.TargetInfo storage targetInfo,
379
+ Blocknumber lastUpdateIn
380
+ ) = _verifyAndUpdateTarget(targetNftId);
381
+
382
+ TargetManagerLib.checkRewardRate(_reader, targetNftId, targetInfo.objectType, rewardRate);
383
+
384
+ // effects
385
+ UFixed oldRewardRate = targetInfo.rewardRate;
386
+ targetInfo.rewardRate = rewardRate;
387
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
388
+
389
+ // logging
390
+ emit IStaking.LogStakingTargetRewardRateSet(targetNftId, rewardRate, oldRewardRate, lastUpdateIn);
391
+ }
392
+
393
+
394
+ // TODO refactor to set limits functionality
395
+ function setMaxStakedAmount(
396
+ NftId targetNftId,
397
+ Amount stakeLimitAmount
398
+ )
399
+ external
400
+ restricted() // staking
401
+ returns (
402
+ Amount oldLimitAmount,
403
+ Blocknumber lastUpdatedIn
404
+ )
405
+ {
406
+ IStaking.TargetInfo storage targetInfo;
407
+ (targetInfo, lastUpdatedIn) = _verifyAndUpdateTarget(targetNftId);
408
+
409
+ oldLimitAmount = targetInfo.limitAmount;
410
+ targetInfo.limitAmount = stakeLimitAmount;
411
+
412
+ emit IStaking.LogStakingTargetMaxStakedAmountSet(targetNftId, stakeLimitAmount, lastUpdatedIn);
413
+
414
+ }
415
+
416
+
417
+ function setTargetLimits(
418
+ NftId targetNftId,
419
+ Amount marginAmount,
420
+ Amount hardLimitAmount
421
+ )
422
+ external
423
+ virtual
424
+ restricted()
425
+ {
426
+ // checks
427
+ IStaking.LimitInfo storage limitInfo = _getAndVerifyLimit(targetNftId);
428
+ Blocknumber lastUpdateIn = limitInfo.lastUpdateIn;
429
+
430
+ // effects
431
+ limitInfo.marginAmount = marginAmount;
432
+ limitInfo.hardLimitAmount = hardLimitAmount;
433
+ limitInfo.lastUpdateIn = BlocknumberLib.current();
434
+
435
+ // logging
436
+ emit IStaking.LogStakingTargetLimitsUpdated(
437
+ targetNftId,
438
+ marginAmount,
439
+ hardLimitAmount,
440
+ lastUpdateIn);
441
+ }
442
+
443
+
444
+ function addTargetToken(
445
+ NftId targetNftId,
446
+ address token
447
+ )
448
+ external
449
+ restricted()
450
+ {
451
+ // checks
452
+
453
+ // skip registering if tvl balance has already been initialized
454
+ IStaking.TvlInfo storage tvlInfo = _tvlInfo[targetNftId][token];
455
+ if (tvlInfo.lastUpdateIn.gtz()) {
456
+ return;
457
+ }
458
+
459
+ // check target exists
460
+ _getAndVerifyTarget(targetNftId);
461
+
462
+ // check token is known for chain id of target
463
+ ChainId chainId = ChainIdLib.fromNftId(targetNftId);
464
+ if (_tokenInfo[chainId][token].lastUpdateIn.eqz()) {
465
+ revert ErrorStakingStoreTokenUnknown(chainId, token);
466
+ }
467
+
468
+ // effects
469
+ tvlInfo.tvlAmount = AmountLib.zero();
470
+ tvlInfo.lastUpdateIn = BlocknumberLib.current();
471
+
472
+ // add token to list of know tokens for target
473
+ _targetToken[targetNftId].push(token);
474
+ }
475
+
476
+
477
+ function refillRewardReserves(
478
+ NftId targetNftId,
479
+ Amount dipAmount
480
+ )
481
+ external
482
+ restricted()
483
+ returns (Amount newReserveBalance)
484
+ {
485
+ // checks
486
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(targetNftId);
487
+ Blocknumber lastUpdateIn = targetInfo.lastUpdateIn;
488
+
489
+ // effects
490
+ targetInfo.reserveAmount = targetInfo.reserveAmount + dipAmount;
491
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
492
+
493
+ // logging
494
+ newReserveBalance = targetInfo.reserveAmount;
495
+ emit IStaking.LogStakingRewardReservesRefilled(
496
+ targetNftId,
497
+ dipAmount,
498
+ _registry.ownerOf(targetNftId),
499
+ newReserveBalance,
500
+ lastUpdateIn);
501
+ }
502
+
503
+
504
+ function withdrawRewardReserves(
505
+ NftId targetNftId,
506
+ Amount dipAmount
507
+ )
508
+ external
509
+ restricted()
510
+ returns (Amount newReserveBalance)
511
+ {
512
+ // checks
513
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(targetNftId);
514
+
515
+ // effects
516
+ Blocknumber lastUpdateIn = _decreaseReserves(targetNftId, targetInfo, dipAmount);
517
+
518
+ // logging
519
+ newReserveBalance = targetInfo.reserveAmount;
520
+ emit IStaking.LogStakingRewardReservesWithdrawn(
521
+ targetNftId,
522
+ dipAmount,
523
+ _registry.ownerOf(targetNftId),
524
+ newReserveBalance,
525
+ lastUpdateIn);
526
+ }
527
+
528
+
529
+ //--- tvl specific functions -------------------------------------//
530
+
531
+ function increaseTotalValueLocked(
532
+ NftId targetNftId,
533
+ address token,
534
+ Amount amount
535
+ )
536
+ external
537
+ restricted()
538
+ returns (Amount newBalance)
539
+ {
540
+ // checks
541
+ IStaking.TvlInfo storage tvlInfo = _getAndVerifyTvl(targetNftId, token);
542
+ Blocknumber lastUpdateIn = tvlInfo.lastUpdateIn;
543
+
544
+ // effects
545
+ // update tvl balance and adapts required stakes if necessary
546
+ tvlInfo.tvlAmount = tvlInfo.tvlAmount + amount;
547
+ _checkAndUpdateTargetLimit(targetNftId, token, tvlInfo);
548
+ tvlInfo.lastUpdateIn = BlocknumberLib.current();
549
+ newBalance = tvlInfo.tvlAmount;
550
+
551
+ // logging
552
+ emit IStaking.LogStakingTvlIncreased(targetNftId, token, amount, newBalance, lastUpdateIn);
553
+ }
554
+
555
+
556
+ function decreaseTotalValueLocked(
557
+ NftId targetNftId,
558
+ address token,
559
+ Amount amount
560
+ )
561
+ external
562
+ restricted()
563
+ returns (Amount newBalance)
564
+ {
565
+ // checks
566
+ IStaking.TvlInfo storage tvlInfo = _getAndVerifyTvl(targetNftId, token);
567
+ Blocknumber lastUpdateIn = tvlInfo.lastUpdateIn;
568
+
569
+ // effects
570
+ // update tvl balance and adapts required stakes if necessary
571
+ tvlInfo.tvlAmount = tvlInfo.tvlAmount - amount;
572
+ _checkAndUpdateTargetLimit(targetNftId, token, tvlInfo);
573
+ tvlInfo.lastUpdateIn = BlocknumberLib.current();
574
+ newBalance = tvlInfo.tvlAmount;
575
+
576
+ // logging
577
+ emit IStaking.LogStakingTvlDecreased(targetNftId, token, amount, newBalance, lastUpdateIn);
578
+ }
579
+
580
+
581
+ function updateTargetLimit(NftId targetNftId)
582
+ external
583
+ restricted()
584
+ returns (Amount stakeLimitAmount)
585
+ {
586
+ return _updateTargetLimit(targetNftId);
587
+ }
588
+
589
+
590
+ function _checkAndUpdateTargetLimit(
591
+ NftId targetNftId,
592
+ address token,
593
+ IStaking.TvlInfo storage tvlInfo
594
+ )
595
+ internal
596
+ {
597
+ // update counter
598
+ tvlInfo.updatesCounter++;
599
+
600
+ // check if upgrade is necessary
601
+ bool updateRequired = _targetLimitHandler.isLimitUpdateRequired(
602
+ targetNftId,
603
+ token,
604
+ tvlInfo.updatesCounter,
605
+ tvlInfo.tvlBaselineAmount,
606
+ tvlInfo.tvlAmount);
607
+
608
+ if (updateRequired) {
609
+ // reset baseline and counter
610
+ tvlInfo.tvlBaselineAmount = tvlInfo.tvlAmount;
611
+ tvlInfo.updatesCounter = 0;
612
+
613
+ // update limit
614
+ _updateTargetLimit(targetNftId);
615
+ }
616
+ }
617
+
618
+
619
+ function _updateTargetLimit(NftId targetNftId)
620
+ internal
621
+ returns (Amount limitAmount)
622
+ {
623
+ // checks
624
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(targetNftId);
625
+ IStaking.LimitInfo storage limitInfo = _getAndVerifyLimit(targetNftId);
626
+ Blocknumber lastUpdateIn = limitInfo.lastUpdateIn;
627
+
628
+ // calculate max stake amount
629
+ Amount requiredStakeAmount = getRequiredStakeBalance(targetNftId, false);
630
+ // limitAmount = AmountLib.min(
631
+ // targetInfo.limitAmount,
632
+ // requiredStakeAmount + limitInfo.marginAmount);
633
+
634
+ // add margin to required stakes
635
+ limitAmount = requiredStakeAmount + limitInfo.marginAmount;
636
+ // cap at hard limit
637
+ limitAmount = AmountLib.min(limitAmount, limitInfo.hardLimitAmount);
638
+
639
+ // effects
640
+ targetInfo.limitAmount = limitAmount;
641
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
642
+
643
+ // logging
644
+ emit IStaking.LogStakingTargetLimitUpdated(
645
+ targetNftId,
646
+ targetInfo.limitAmount,
647
+ limitInfo.hardLimitAmount,
648
+ requiredStakeAmount,
649
+ targetInfo.stakedAmount,
650
+ lastUpdateIn);
651
+ }
652
+
653
+ //--- stake specific functions -------------------------------------//
654
+
655
+ function createStake(
656
+ NftId stakeNftId,
657
+ NftId targetNftId,
658
+ address stakeOwner,
659
+ Amount stakeAmount
660
+ )
661
+ external
662
+ restricted()
663
+ returns (Timestamp lockedUntil)
664
+ {
665
+ // checks
666
+ IStaking.StakeInfo storage stakeInfo = _stakeInfo[stakeNftId];
667
+ if (stakeInfo.lastUpdateIn.gtz()) {
668
+ revert ErrorStakingStoreStakeBalanceAlreadyInitialized(stakeNftId);
669
+ }
670
+
671
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(targetNftId);
672
+ _checkMaxStakedAmount(targetNftId, targetInfo, stakeAmount);
673
+
674
+ // effects
675
+ stakeInfo.targetNftId = targetNftId;
676
+ stakeInfo.stakedAmount = AmountLib.zero();
677
+ stakeInfo.rewardAmount = AmountLib.zero();
678
+ stakeInfo.lockedUntil = TimestampLib.current();
679
+ _setStakeLastUpdatesToCurrent(stakeInfo);
680
+
681
+ // logging for creation of empty stake
682
+ emit IStaking.LogStakingStakeCreated(stakeNftId, stakeInfo.targetNftId, stakeInfo.stakedAmount, stakeInfo.lockedUntil, stakeOwner);
683
+
684
+ // process stake amount
685
+ _stake(stakeNftId, stakeInfo, targetInfo, targetInfo.lockingPeriod, stakeAmount);
686
+
687
+ return stakeInfo.lockedUntil;
688
+ }
689
+
690
+
691
+ function stake(
692
+ NftId stakeNftId,
693
+ bool updateRewards,
694
+ bool restakeRewards,
695
+ Seconds additionalLockingPeriod,
696
+ Amount stakeAmount
697
+ )
698
+ external
699
+ restricted()
700
+ {
701
+ // checks
702
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
703
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
704
+
705
+ if (updateRewards) {
706
+ _updateRewards(stakeNftId, stakeInfo, targetInfo);
707
+ }
708
+
709
+ if (restakeRewards) {
710
+ _restakeRewards(stakeNftId, stakeInfo, targetInfo);
711
+ }
712
+
713
+ _stake(stakeNftId, stakeInfo, targetInfo, additionalLockingPeriod, stakeAmount);
714
+ }
715
+
716
+
717
+ function unstake(
718
+ NftId stakeNftId,
719
+ bool updateRewards,
720
+ bool restakeRewards,
721
+ Amount maxUnstakeAmount
722
+ )
723
+ external
724
+ restricted()
725
+ returns (Amount unstakedAmount)
726
+ {
727
+ // checks
728
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
729
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
730
+
731
+ if (updateRewards) {
732
+ _updateRewards(stakeNftId, stakeInfo, targetInfo);
733
+ }
734
+
735
+ if (restakeRewards) {
736
+ _restakeRewards(stakeNftId, stakeInfo, targetInfo);
737
+ }
738
+
739
+ return _unstake(stakeNftId, stakeInfo, targetInfo, maxUnstakeAmount);
740
+ }
741
+
742
+
743
+ function updateRewards(NftId stakeNftId)
744
+ external
745
+ restricted()
746
+ {
747
+ // checks
748
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
749
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
750
+ _updateRewards(stakeNftId, stakeInfo, targetInfo);
751
+ }
752
+
753
+
754
+ function restakeRewards(
755
+ NftId stakeNftId,
756
+ bool updateRewards
757
+ )
758
+ external
759
+ restricted()
760
+ {
761
+ // checks
762
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
763
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
764
+
765
+ if (updateRewards) {
766
+ _updateRewards(stakeNftId, stakeInfo, targetInfo);
767
+ }
768
+
769
+ _restakeRewards(stakeNftId, stakeInfo, targetInfo);
770
+ }
771
+
772
+
773
+ function claimRewards(
774
+ NftId stakeNftId,
775
+ bool updateRewards,
776
+ Amount maxClaimAmount
777
+ )
778
+ external
779
+ restricted()
780
+ returns (Amount claimedAmount)
781
+ {
782
+ // checks
783
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
784
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
785
+
786
+ if (updateRewards) {
787
+ _updateRewards(stakeNftId, stakeInfo, targetInfo);
788
+ }
789
+
790
+ claimedAmount = _claimRewards(stakeNftId, stakeInfo, targetInfo, maxClaimAmount);
791
+ }
792
+
793
+ //--- view functions -----------------------------------------------//
794
+
795
+ function getStakingReader() external view returns (StakingReader stakingReader){
796
+ return _reader;
797
+ }
798
+
799
+ function getTargetManager() external view returns (ITargetLimitHandler targetLimitHandler ){
800
+ return _targetLimitHandler;
801
+ }
802
+
803
+
804
+ function exists(NftId stakeNftId) external view returns (bool) {
805
+ return _stakeInfo[stakeNftId].lastUpdateIn.gtz();
806
+ }
807
+
808
+
809
+ function getRequiredStakeBalance(
810
+ NftId targetNftId,
811
+ bool includeTargetTypeRequirements
812
+ )
813
+ public
814
+ view
815
+ returns (Amount requiredStakeAmount)
816
+ {
817
+ address [] memory tokens = _targetToken[targetNftId];
818
+ if (tokens.length == 0) {
819
+ return AmountLib.zero();
820
+ }
821
+
822
+ // calculate tvl based required stake amount
823
+ requiredStakeAmount = AmountLib.zero();
824
+ ChainId targetChainId = _targetInfo[targetNftId].chainId;
825
+ address token;
826
+ Amount tvlAmount;
827
+ UFixed stakingRate;
828
+
829
+ for (uint256 i = 0; i < tokens.length; i++) {
830
+ token = tokens[i];
831
+ tvlAmount = _tvlInfo[targetNftId][token].tvlAmount;
832
+ if (tvlAmount.eqz()) { continue; }
833
+
834
+ stakingRate = _tokenInfo[targetChainId][token].stakingRate;
835
+ if (stakingRate.eqz()) { continue; }
836
+
837
+ requiredStakeAmount = requiredStakeAmount + tvlAmount.multiplyWith(stakingRate);
838
+ }
839
+
840
+ // update required amount based on target type
841
+ if (includeTargetTypeRequirements) {
842
+ ObjectType targetType = _targetInfo[targetNftId].objectType;
843
+ IStaking.SupportInfo storage supportInfo = _supportInfo[targetType];
844
+
845
+ if (requiredStakeAmount < supportInfo.minStakingAmount) {
846
+ requiredStakeAmount = supportInfo.minStakingAmount;
847
+ } else if (requiredStakeAmount > supportInfo.maxStakingAmount) {
848
+ requiredStakeAmount = supportInfo.maxStakingAmount;
849
+ }
850
+ }
851
+ }
852
+
853
+
854
+ /// @dev Returns true iff current stake amount is still locked
855
+ function isStakeLocked(NftId stakeNftId) public view returns (bool) {
856
+ return _stakeInfo[stakeNftId].lockedUntil > TimestampLib.current();
857
+ }
858
+
859
+
860
+ /// @dev Returns the stake infos for the specified stake.
861
+ function getStakeInfo(NftId stakeNftId) external view returns (IStaking.StakeInfo memory stakeInfo) {
862
+ return _stakeInfo[stakeNftId];
863
+ }
864
+
865
+
866
+ /// @dev Returns the stake infos for the specified stake.
867
+ function getStakeTarget(NftId stakeNftId) external view returns (NftId targetNftId) {
868
+ return _stakeInfo[stakeNftId].targetNftId;
869
+ }
870
+
871
+
872
+ /// @dev Returns the target infos for the specified target.
873
+ function getTargetInfo(NftId targetNftId) external view returns (IStaking.TargetInfo memory targetInfo) {
874
+ return _targetInfo[targetNftId];
875
+ }
876
+
877
+
878
+ /// @dev Returns the target limit infos for the specified target.
879
+ function getLimitInfo(NftId targetNftId) external view returns (IStaking.LimitInfo memory limitInfo) {
880
+ return _limitInfo[targetNftId];
881
+ }
882
+
883
+
884
+ /// @dev Returns the tvl infos for the specified target.
885
+ function getTvlInfo(NftId targetNftId, address token) external view returns (IStaking.TvlInfo memory tvlInfo) {
886
+ return _tvlInfo[targetNftId][token];
887
+ }
888
+
889
+
890
+ /// @dev Returns the tvl infos for the specified target.
891
+ function getTokenInfo(ChainId chainId, address token) external view returns (IStaking.TokenInfo memory tokenInfo) {
892
+ return _tokenInfo[chainId][token];
893
+ }
894
+
895
+
896
+ function getTargetSet() external view returns (NftIdSet targetNftIdSet) {
897
+ return _targetNftIdSet;
898
+ }
899
+
900
+ //--- internal functions -----------------------------------------------//
901
+
902
+ function _verifyAndUpdateTarget(NftId targetNftId)
903
+ private
904
+ returns (
905
+ IStaking.TargetInfo storage targetInfo,
906
+ Blocknumber lastUpdatedIn
907
+ )
908
+ {
909
+ // checks
910
+ targetInfo = _getAndVerifyTarget(targetNftId);
911
+ lastUpdatedIn = targetInfo.lastUpdateIn;
912
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
913
+ }
914
+
915
+
916
+ function _createTarget(
917
+ NftId targetNftId,
918
+ ObjectType objectType,
919
+ Seconds lockingPeriod,
920
+ UFixed rewardRate,
921
+ bool checkParameters
922
+ )
923
+ private
924
+ {
925
+ // checks
926
+ if (checkParameters) {
927
+ TargetManagerLib.checkTargetParameters(
928
+ _registry,
929
+ _reader,
930
+ targetNftId,
931
+ objectType,
932
+ lockingPeriod,
933
+ rewardRate);
934
+ }
935
+
936
+ // effects
937
+
938
+ // target info
939
+ IStaking.TargetInfo storage targetInfo = _targetInfo[targetNftId];
940
+ targetInfo.stakedAmount = AmountLib.zero();
941
+ targetInfo.rewardAmount = AmountLib.zero();
942
+ targetInfo.reserveAmount = AmountLib.zero();
943
+ targetInfo.limitAmount = AmountLib.max();
944
+
945
+ targetInfo.objectType = objectType;
946
+ targetInfo.lockingPeriod = lockingPeriod;
947
+ targetInfo.rewardRate = rewardRate;
948
+ targetInfo.chainId = ChainIdLib.fromNftId(targetNftId);
949
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
950
+
951
+ // create limit info
952
+ _setLimits(
953
+ _limitInfo[targetNftId],
954
+ targetNftId,
955
+ AmountLib.toAmount(AmountLib.max().toInt() / 2), // margin limit
956
+ AmountLib.max()); // hard limit
957
+
958
+ // add new target to target set
959
+ _targetNftIdSet.add(targetNftId);
960
+
961
+ // logging
962
+ emit IStaking.LogStakingTargetCreated(targetNftId, objectType, lockingPeriod, rewardRate);
963
+ }
964
+
965
+
966
+ function _setLimits(
967
+ IStaking.LimitInfo storage limitInfo,
968
+ NftId targetNftId,
969
+ Amount marginAmount,
970
+ Amount hardLimitAmount
971
+ )
972
+ private
973
+ {
974
+ // effects
975
+ Blocknumber lastUpdateIn = limitInfo.lastUpdateIn;
976
+ limitInfo.marginAmount = marginAmount;
977
+ limitInfo.hardLimitAmount = hardLimitAmount;
978
+ limitInfo.lastUpdateIn = BlocknumberLib.current();
979
+
980
+ // logging
981
+ emit IStaking.LogStakingLimitsSet(targetNftId, limitInfo.marginAmount , limitInfo.hardLimitAmount, lastUpdateIn);
982
+ }
983
+
984
+
985
+ function _spendRewardReserves(
986
+ NftId targetNftId,
987
+ IStaking.TargetInfo storage targetInfo,
988
+ Amount dipAmount
989
+ )
990
+ private
991
+ {
992
+ Blocknumber lastUpdateIn = _decreaseReserves(targetNftId, targetInfo, dipAmount);
993
+
994
+ // logging
995
+ emit IStaking.LogStakingRewardReservesSpent(
996
+ targetNftId,
997
+ dipAmount,
998
+ targetInfo.reserveAmount,
999
+ lastUpdateIn);
1000
+ }
1001
+
1002
+
1003
+ function _decreaseReserves(
1004
+ NftId targetNftId,
1005
+ IStaking.TargetInfo storage targetInfo,
1006
+ Amount dipAmount
1007
+ )
1008
+ private
1009
+ returns ( Blocknumber lastUpdateIn)
1010
+ {
1011
+ lastUpdateIn = targetInfo.lastUpdateIn;
1012
+
1013
+ // check if reserves are sufficient
1014
+ if (dipAmount > targetInfo.reserveAmount) {
1015
+ revert ErrorStakingStoreRewardReservesInsufficient(
1016
+ targetNftId,
1017
+ targetInfo.reserveAmount,
1018
+ dipAmount);
1019
+ }
1020
+
1021
+ // effects
1022
+ targetInfo.reserveAmount = targetInfo.reserveAmount - dipAmount;
1023
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
1024
+ }
1025
+
1026
+
1027
+ function _updateRewards(
1028
+ NftId stakeNftId,
1029
+ IStaking.StakeInfo storage stakeInfo,
1030
+ IStaking.TargetInfo storage targetInfo
1031
+ )
1032
+ internal
1033
+ returns (Amount rewardIncreaseAmount)
1034
+ {
1035
+ // return if reward rate is zero
1036
+ if (targetInfo.rewardRate.eqz()) {
1037
+ return rewardIncreaseAmount;
1038
+ }
1039
+
1040
+ // get seconds since last update on stake
1041
+ Seconds duration = SecondsLib.toSeconds(
1042
+ block.timestamp - stakeInfo.lastUpdateAt.toInt());
1043
+
1044
+ // return if duration is zero
1045
+ if (duration.eqz()) {
1046
+ return AmountLib.zero();
1047
+ }
1048
+
1049
+ // calculate reward increase since
1050
+ rewardIncreaseAmount = StakingLib.calculateRewardAmount(
1051
+ targetInfo.rewardRate,
1052
+ duration,
1053
+ stakeInfo.stakedAmount);
1054
+
1055
+ // update target + stake
1056
+ targetInfo.rewardAmount = targetInfo.rewardAmount + rewardIncreaseAmount;
1057
+ stakeInfo.rewardAmount = stakeInfo.rewardAmount + rewardIncreaseAmount;
1058
+ Blocknumber lastUpdateIn = _setLastUpdatesToCurrent(stakeInfo, targetInfo);
1059
+
1060
+ // logging
1061
+ emit IStaking.LogStakingStakeRewardsUpdated(
1062
+ stakeNftId,
1063
+ rewardIncreaseAmount,
1064
+ stakeInfo.stakedAmount,
1065
+ stakeInfo.rewardAmount,
1066
+ stakeInfo.lockedUntil,
1067
+ lastUpdateIn);
1068
+ }
1069
+
1070
+
1071
+ function _restakeRewards(
1072
+ NftId stakeNftId,
1073
+ IStaking.StakeInfo storage stakeInfo,
1074
+ IStaking.TargetInfo storage targetInfo
1075
+ )
1076
+ internal
1077
+ returns (Amount restakeAmount)
1078
+ {
1079
+ restakeAmount = stakeInfo.rewardAmount;
1080
+
1081
+ // return if reward amount is zero
1082
+ if (restakeAmount.eqz()) {
1083
+ return restakeAmount;
1084
+ }
1085
+
1086
+ // check restaking amount does not exceed target max staked amount
1087
+ _checkMaxStakedAmount(stakeInfo.targetNftId, targetInfo, restakeAmount);
1088
+
1089
+ // use up reserves for newly staked dips
1090
+ _spendRewardReserves(stakeInfo.targetNftId, targetInfo, restakeAmount);
1091
+
1092
+ // update target + stake
1093
+ targetInfo.stakedAmount = targetInfo.stakedAmount + restakeAmount;
1094
+ targetInfo.rewardAmount = targetInfo.rewardAmount - restakeAmount;
1095
+ stakeInfo.stakedAmount = stakeInfo.stakedAmount + restakeAmount;
1096
+ stakeInfo.rewardAmount = AmountLib.zero();
1097
+ Blocknumber lastUpdateIn = _setLastUpdatesToCurrent(stakeInfo, targetInfo);
1098
+
1099
+ // logging
1100
+ emit IStaking.LogStakingRewardsRestaked(
1101
+ stakeNftId,
1102
+ restakeAmount,
1103
+ stakeInfo.stakedAmount,
1104
+ AmountLib.zero(),
1105
+ stakeInfo.lockedUntil,
1106
+ lastUpdateIn);
1107
+ }
1108
+
1109
+
1110
+ function _stake(
1111
+ NftId stakeNftId,
1112
+ IStaking.StakeInfo storage stakeInfo,
1113
+ IStaking.TargetInfo storage targetInfo,
1114
+ Seconds maxAdditionalLockingPeriod,
1115
+ Amount stakeAmount
1116
+ )
1117
+ internal
1118
+ {
1119
+ // return if reward amount is zero
1120
+ if (stakeAmount.eqz()) {
1121
+ return;
1122
+ }
1123
+
1124
+ // check restaking amount does not exceed target max staked amount
1125
+ _checkMaxStakedAmount(stakeInfo.targetNftId, targetInfo, stakeAmount);
1126
+
1127
+ // update target + stake
1128
+ targetInfo.stakedAmount = targetInfo.stakedAmount + stakeAmount;
1129
+ stakeInfo.stakedAmount = stakeInfo.stakedAmount + stakeAmount;
1130
+
1131
+ // increase locked until if applicable
1132
+ Seconds additionalLockingPeriod = SecondsLib.min(maxAdditionalLockingPeriod, targetInfo.lockingPeriod);
1133
+ if (stakeAmount.gtz() && additionalLockingPeriod.gtz()) {
1134
+ stakeInfo.lockedUntil = stakeInfo.lockedUntil.addSeconds(additionalLockingPeriod);
1135
+ }
1136
+
1137
+ Blocknumber lastUpdateIn = _setLastUpdatesToCurrent(stakeInfo, targetInfo);
1138
+
1139
+ // logging
1140
+ emit IStaking.LogStakingStaked(
1141
+ stakeNftId,
1142
+ stakeAmount,
1143
+ stakeInfo.stakedAmount,
1144
+ stakeInfo.rewardAmount,
1145
+ stakeInfo.lockedUntil,
1146
+ lastUpdateIn);
1147
+ }
1148
+
1149
+
1150
+ function _claimRewards(
1151
+ NftId stakeNftId,
1152
+ IStaking.StakeInfo storage stakeInfo,
1153
+ IStaking.TargetInfo storage targetInfo,
1154
+ Amount maxClaimAmount
1155
+ )
1156
+ internal
1157
+ returns (Amount claimAmount)
1158
+ {
1159
+ claimAmount = AmountLib.min(maxClaimAmount, stakeInfo.rewardAmount);
1160
+
1161
+ // return if no rewards to claim
1162
+ if (claimAmount.eqz()) {
1163
+ return claimAmount;
1164
+ }
1165
+
1166
+ // effects
1167
+ // use up reserves for claimed rewards
1168
+ _spendRewardReserves(stakeInfo.targetNftId, targetInfo, claimAmount);
1169
+
1170
+ // update target + stake
1171
+ targetInfo.rewardAmount = targetInfo.rewardAmount - claimAmount;
1172
+ stakeInfo.rewardAmount = stakeInfo.rewardAmount - claimAmount;
1173
+ Blocknumber lastUpdateIn = _setLastUpdatesToCurrent(stakeInfo, targetInfo);
1174
+
1175
+ // logging
1176
+ emit IStaking.LogStakingRewardsClaimed(
1177
+ stakeNftId,
1178
+ claimAmount,
1179
+ stakeInfo.stakedAmount,
1180
+ stakeInfo.rewardAmount,
1181
+ stakeInfo.lockedUntil,
1182
+ lastUpdateIn);
1183
+ }
1184
+
1185
+
1186
+ function _unstake(
1187
+ NftId stakeNftId,
1188
+ IStaking.StakeInfo storage stakeInfo,
1189
+ IStaking.TargetInfo storage targetInfo,
1190
+ Amount maxUnstakeAmount
1191
+ )
1192
+ internal
1193
+ returns (Amount unstakedAmount)
1194
+ {
1195
+ unstakedAmount = AmountLib.min(maxUnstakeAmount, stakeInfo.stakedAmount);
1196
+
1197
+ // return if no stakes to claim
1198
+ if (unstakedAmount.eqz()) {
1199
+ return unstakedAmount;
1200
+ }
1201
+
1202
+ // check if stake is still locked
1203
+ if (isStakeLocked(stakeNftId)) {
1204
+ revert IStaking.ErrorStakingStakeLocked(stakeNftId, stakeInfo.lockedUntil);
1205
+ }
1206
+
1207
+ // update target + stake
1208
+ targetInfo.stakedAmount = targetInfo.stakedAmount - unstakedAmount;
1209
+ stakeInfo.stakedAmount = stakeInfo.stakedAmount - unstakedAmount;
1210
+ Blocknumber lastUpdateIn = _setLastUpdatesToCurrent(stakeInfo, targetInfo);
1211
+
1212
+ // logging
1213
+ emit IStaking.LogStakingUnstaked(
1214
+ stakeNftId,
1215
+ unstakedAmount,
1216
+ stakeInfo.stakedAmount,
1217
+ stakeInfo.rewardAmount,
1218
+ stakeInfo.lockedUntil,
1219
+ lastUpdateIn);
1220
+ }
1221
+
1222
+
1223
+ function _setLastUpdatesToCurrent(
1224
+ IStaking.StakeInfo storage stakeInfo,
1225
+ IStaking.TargetInfo storage targetInfo
1226
+ )
1227
+ internal
1228
+ returns (Blocknumber lastUpdateIn)
1229
+ {
1230
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
1231
+ lastUpdateIn = _setStakeLastUpdatesToCurrent(stakeInfo);
1232
+ }
1233
+
1234
+
1235
+ function _setStakeLastUpdatesToCurrent(
1236
+ IStaking.StakeInfo storage stakeInfo
1237
+ )
1238
+ internal
1239
+ returns (Blocknumber lastUpdateIn)
1240
+ {
1241
+ lastUpdateIn = stakeInfo.lastUpdateIn;
1242
+ stakeInfo.lastUpdateIn = BlocknumberLib.current();
1243
+ stakeInfo.lastUpdateAt = TimestampLib.current();
1244
+ }
1245
+
1246
+ //--- private stake and target functions --------------------------------//
1247
+
1248
+
1249
+ function _getAndVerifyStake(
1250
+ NftId stakeNftId
1251
+ )
1252
+ private
1253
+ view
1254
+ returns (
1255
+ IStaking.StakeInfo storage stakeInfo
1256
+ )
1257
+ {
1258
+ stakeInfo = _stakeInfo[stakeNftId];
1259
+ if (stakeInfo.lastUpdateIn.eqz()) {
1260
+ revert ErrorStakingStoreStakeNotInitialized(stakeNftId);
1261
+ }
1262
+ }
1263
+
1264
+
1265
+ function _checkMaxStakedAmount(
1266
+ NftId targetNftId,
1267
+ IStaking.TargetInfo storage targetInfo,
1268
+ Amount additionalstakedAmount
1269
+ )
1270
+ private
1271
+ {
1272
+ if (targetInfo.stakedAmount + additionalstakedAmount > targetInfo.limitAmount) {
1273
+ revert IStaking.ErrorStakingTargetMaxStakedAmountExceeded(
1274
+ targetNftId,
1275
+ targetInfo.limitAmount,
1276
+ targetInfo.stakedAmount + additionalstakedAmount);
1277
+ }
1278
+
1279
+ // TODO add check for tvl dependent maximum, see #628
1280
+ }
1281
+
1282
+
1283
+ function _getAndVerifyTarget(
1284
+ NftId targetNftId
1285
+ )
1286
+ private
1287
+ view
1288
+ returns (
1289
+ IStaking.TargetInfo storage targetInfo
1290
+ )
1291
+ {
1292
+ targetInfo = _targetInfo[targetNftId];
1293
+
1294
+ if (targetInfo.lastUpdateIn.eqz()) {
1295
+ revert ErrorStakingStoreTargetNotInitialized(targetNftId);
1296
+ }
1297
+ }
1298
+
1299
+
1300
+ function _getAndVerifyLimit(
1301
+ NftId targetNftId
1302
+ )
1303
+ private
1304
+ view
1305
+ returns (
1306
+ IStaking.LimitInfo storage limitInfo
1307
+ )
1308
+ {
1309
+ limitInfo = _limitInfo[targetNftId];
1310
+
1311
+ if (limitInfo.lastUpdateIn.eqz()) {
1312
+ revert ErrorStakingStoreLimitNotInitialized(targetNftId);
1313
+ }
1314
+ }
1315
+
1316
+ //--- private tvl functions ------------------------------------------------//
1317
+
1318
+ /// @dev Initializes token balance handling for the specified target.
1319
+ function _createTvlBalance(NftId targetNftId, address token)
1320
+ private
1321
+ {
1322
+ IStaking.TvlInfo storage info = _tvlInfo[targetNftId][token];
1323
+
1324
+ if (info.lastUpdateIn.gtz()) {
1325
+ revert ErrorStakingStoreTvlBalanceAlreadyInitialized(targetNftId, token);
1326
+ }
1327
+
1328
+ // set tvl balances to 0 and update last updated in
1329
+ info.tvlAmount = AmountLib.zero();
1330
+ info.lastUpdateIn = BlocknumberLib.current();
1331
+ }
1332
+
1333
+
1334
+ function _updateTvlBalance(
1335
+ NftId targetNftId,
1336
+ address token,
1337
+ Amount newTvlAmount
1338
+ )
1339
+ private
1340
+ returns (
1341
+ Amount oldTvlAmount,
1342
+ Blocknumber lastUpdatedIn
1343
+ )
1344
+ {
1345
+ IStaking.TvlInfo storage tvlInfo = _getAndVerifyTvl(targetNftId, token);
1346
+ oldTvlAmount = tvlInfo.tvlAmount;
1347
+ lastUpdatedIn = tvlInfo.lastUpdateIn;
1348
+
1349
+ tvlInfo.tvlAmount = newTvlAmount;
1350
+ tvlInfo.lastUpdateIn = BlocknumberLib.current();
1351
+ }
1352
+
1353
+
1354
+ function _getAndVerifyTvl(NftId targetNftId, address token)
1355
+ private
1356
+ view
1357
+ returns (IStaking.TvlInfo storage tvlInfo)
1358
+ {
1359
+ tvlInfo = _tvlInfo[targetNftId][token];
1360
+ if (tvlInfo.lastUpdateIn.eqz()) {
1361
+ revert ErrorStakingStoreTvlBalanceNotInitialized(targetNftId, token);
1362
+ }
1363
+ }
1364
+ }