@etherisc/gif-next 0.0.2-da2c7dd-538 → 0.0.2-da87b00-860

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 (469) hide show
  1. package/README.md +57 -1
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +1 -1
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +106 -38
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +1 -1
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +91 -45
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +1 -1
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +58 -6
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +573 -288
  10. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +1289 -0
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +8 -39
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +295 -47
  16. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  18. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +452 -210
  19. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +119 -14
  21. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +246 -16
  23. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +420 -27
  25. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +64 -142
  27. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +275 -59
  29. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +21 -88
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +448 -148
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +143 -77
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +20 -87
  37. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +296 -20
  39. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
  40. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
  41. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +109 -100
  42. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
  43. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +274 -58
  44. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
  45. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +145 -124
  46. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
  47. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +274 -58
  48. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
  49. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
  50. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +126 -166
  51. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +1 -1
  52. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +274 -58
  53. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  54. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +39 -63
  55. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  56. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +130 -138
  57. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +1 -1
  58. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +274 -58
  59. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  60. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +333 -180
  61. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +1 -1
  62. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +274 -58
  63. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  64. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  65. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  66. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +427 -28
  67. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  68. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +335 -12
  69. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  70. package/artifacts/contracts/instance/Instance.sol/Instance.json +430 -62
  71. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  72. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +822 -402
  73. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  74. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +299 -58
  75. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  76. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +619 -402
  77. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  78. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +367 -64
  79. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  80. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +83 -55
  81. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  82. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +448 -374
  83. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +1 -1
  84. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +101 -88
  85. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  86. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +8 -8
  87. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  88. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  89. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  90. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  91. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  92. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  93. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  94. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +1 -1
  95. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +20 -20
  96. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  97. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  98. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  99. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  100. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  101. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  102. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  103. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +33 -35
  104. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  105. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +294 -53
  106. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  107. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  108. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +19 -21
  109. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  110. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +29 -0
  111. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  112. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +19 -21
  113. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  114. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +87 -42
  115. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  116. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +96 -50
  117. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  118. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +59 -69
  119. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  120. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +274 -58
  121. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  122. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +300 -123
  123. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  124. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +124 -58
  125. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  126. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +186 -33
  127. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  128. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +29 -31
  129. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  130. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +238 -19
  131. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  132. package/artifacts/contracts/pool/Pool.sol/Pool.json +29 -31
  133. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +1 -1
  134. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +100 -34
  135. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  136. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +346 -87
  137. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  138. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +121 -63
  139. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  140. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +273 -50
  141. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  142. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +103 -41
  143. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  144. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +46 -48
  145. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  146. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +274 -58
  147. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  148. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +142 -102
  149. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  150. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +113 -75
  151. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  152. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +208 -1
  153. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  154. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +50 -10
  155. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  156. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +55 -0
  157. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  158. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +50 -0
  159. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  160. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +40 -42
  161. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  162. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +224 -18
  163. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  164. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +157 -86
  165. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +1 -1
  166. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +511 -21
  167. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  168. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +118 -72
  169. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  170. package/artifacts/contracts/product/PricingService.sol/PricingService.json +116 -114
  171. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  172. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +100 -70
  173. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  174. package/artifacts/contracts/product/Product.sol/Product.json +40 -42
  175. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  176. package/artifacts/contracts/product/RiskService.sol/RiskService.json +258 -44
  177. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  178. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +84 -42
  179. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  180. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  181. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +33 -22
  182. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  183. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +29 -0
  184. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +1 -1
  185. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  186. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  187. package/artifacts/contracts/registry/Registry.sol/Registry.json +71 -60
  188. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  189. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +704 -472
  190. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
  191. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1074 -0
  192. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  193. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +47 -18
  194. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  195. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +76 -38
  196. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +1 -1
  197. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +710 -407
  198. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  199. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  200. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  201. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +184 -128
  202. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  203. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +437 -26
  204. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  205. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +119 -59
  206. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  207. package/artifacts/contracts/shared/Component.sol/Component.json +19 -21
  208. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  209. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +212 -232
  210. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  211. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +113 -71
  212. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  213. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +130 -39
  214. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +1 -1
  215. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +1 -1
  216. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +1 -1
  217. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +2 -2
  218. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  219. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +19 -21
  220. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  221. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +119 -147
  222. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  223. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -21
  224. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  225. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +6 -6
  226. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  227. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  228. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +19 -0
  229. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  230. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  231. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +19 -0
  232. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  233. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  234. package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
  235. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  236. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -2
  237. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  238. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -21
  239. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  240. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +6 -6
  241. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  242. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  243. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  244. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  245. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +21 -2
  246. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  247. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  248. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  249. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -0
  250. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  251. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  252. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  253. package/artifacts/contracts/shared/Service.sol/Service.json +29 -0
  254. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  255. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  256. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
  257. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +2 -2
  258. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  259. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +2 -2
  260. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  261. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1450 -140
  262. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  263. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +161 -110
  264. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.dbg.json +4 -0
  265. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.json +50 -0
  266. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  267. package/artifacts/contracts/staking/Staking.sol/Staking.json +1624 -272
  268. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  269. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +470 -0
  270. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  271. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +135 -68
  272. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  273. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +294 -177
  274. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  275. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +200 -157
  276. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  277. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +86 -52
  278. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  279. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +1600 -818
  280. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +4 -0
  281. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +309 -0
  282. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  283. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +159 -87
  284. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  285. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  286. package/artifacts/contracts/type/Amount.sol/AmountLib.json +10 -10
  287. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +45 -19
  289. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
  290. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +193 -0
  291. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  293. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  295. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/Fee.sol/FeeLib.json +93 -37
  297. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  298. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  299. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +1 -1
  300. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +2 -2
  301. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  302. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  303. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  304. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  305. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  306. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +33 -31
  307. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  308. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  309. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  310. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  311. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  312. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  313. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  314. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
  315. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  316. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +39 -218
  317. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  318. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +45 -2
  319. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  320. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  321. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  322. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/String.sol/StrLib.json +50 -2
  324. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  325. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +3 -3
  326. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  327. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +60 -36
  328. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  329. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  330. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  331. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +56 -2
  332. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  333. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.json +10 -0
  334. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  335. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +65 -27
  336. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  337. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +15 -2
  338. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  339. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.json +10 -0
  340. package/contracts/accounting/AccountingService.sol +15 -3
  341. package/contracts/accounting/IAccountingService.sol +4 -2
  342. package/contracts/authorization/AccessAdmin.sol +389 -298
  343. package/contracts/authorization/AccessAdminLib.sol +396 -0
  344. package/contracts/authorization/AccessManagerCloneable.sol +40 -31
  345. package/contracts/authorization/Authorization.sol +60 -228
  346. package/contracts/authorization/IAccess.sol +25 -7
  347. package/contracts/authorization/IAccessAdmin.sol +81 -80
  348. package/contracts/authorization/IAuthorization.sol +3 -51
  349. package/contracts/authorization/IServiceAuthorization.sol +55 -17
  350. package/contracts/authorization/ServiceAuthorization.sol +248 -34
  351. package/contracts/distribution/BasicDistribution.sol +6 -6
  352. package/contracts/distribution/BasicDistributionAuthorization.sol +11 -4
  353. package/contracts/distribution/Distribution.sol +10 -52
  354. package/contracts/distribution/DistributionService.sol +154 -64
  355. package/contracts/distribution/IDistributionComponent.sol +3 -10
  356. package/contracts/distribution/IDistributionService.sol +24 -10
  357. package/contracts/examples/fire/FirePool.sol +0 -4
  358. package/contracts/examples/fire/FireProduct.sol +6 -10
  359. package/contracts/examples/unpermissioned/SimpleDistribution.sol +32 -8
  360. package/contracts/examples/unpermissioned/SimpleOracle.sol +4 -8
  361. package/contracts/examples/unpermissioned/SimplePool.sol +0 -4
  362. package/contracts/examples/unpermissioned/SimpleProduct.sol +83 -23
  363. package/contracts/instance/IInstance.sol +87 -12
  364. package/contracts/instance/IInstanceService.sol +52 -7
  365. package/contracts/instance/Instance.sol +148 -48
  366. package/contracts/instance/InstanceAdmin.sol +227 -281
  367. package/contracts/instance/InstanceAuthorizationV3.sol +79 -26
  368. package/contracts/instance/InstanceReader.sol +375 -380
  369. package/contracts/instance/InstanceService.sol +230 -134
  370. package/contracts/instance/RiskSet.sol +10 -2
  371. package/contracts/instance/base/BalanceStore.sol +4 -6
  372. package/contracts/instance/base/ObjectLifecycle.sol +2 -6
  373. package/contracts/instance/module/IBundle.sol +6 -5
  374. package/contracts/instance/module/IComponents.sol +16 -5
  375. package/contracts/instance/module/IDistribution.sol +19 -7
  376. package/contracts/instance/module/IPolicy.sol +28 -8
  377. package/contracts/instance/module/IRisk.sol +2 -0
  378. package/contracts/oracle/BasicOracle.sol +2 -4
  379. package/contracts/oracle/BasicOracleAuthorization.sol +18 -2
  380. package/contracts/oracle/IOracle.sol +9 -4
  381. package/contracts/oracle/Oracle.sol +2 -4
  382. package/contracts/oracle/OracleService.sol +8 -8
  383. package/contracts/pool/BasicPool.sol +3 -16
  384. package/contracts/pool/BasicPoolAuthorization.sol +10 -5
  385. package/contracts/pool/BundleService.sol +34 -43
  386. package/contracts/pool/IBundleService.sol +14 -13
  387. package/contracts/pool/IPoolService.sol +7 -2
  388. package/contracts/pool/Pool.sol +4 -16
  389. package/contracts/pool/PoolLib.sol +127 -2
  390. package/contracts/pool/PoolService.sol +41 -184
  391. package/contracts/product/ApplicationService.sol +83 -15
  392. package/contracts/product/BasicProduct.sol +1 -3
  393. package/contracts/product/BasicProductAuthorization.sol +11 -4
  394. package/contracts/product/ClaimService.sol +56 -58
  395. package/contracts/product/IApplicationService.sol +24 -2
  396. package/contracts/product/IClaimService.sol +5 -4
  397. package/contracts/product/IPolicyService.sol +9 -2
  398. package/contracts/product/IPricingService.sol +1 -0
  399. package/contracts/product/IRiskService.sol +21 -3
  400. package/contracts/product/PolicyService.sol +31 -68
  401. package/contracts/product/PolicyServiceLib.sol +79 -5
  402. package/contracts/product/PricingService.sol +33 -31
  403. package/contracts/product/Product.sol +38 -14
  404. package/contracts/product/RiskService.sol +55 -9
  405. package/contracts/registry/IRegistry.sol +15 -9
  406. package/contracts/registry/IRelease.sol +6 -3
  407. package/contracts/registry/Registry.sol +15 -9
  408. package/contracts/registry/RegistryAdmin.sol +100 -263
  409. package/contracts/registry/RegistryAuthorization.sol +336 -0
  410. package/contracts/registry/RegistryService.sol +1 -1
  411. package/contracts/registry/ReleaseAdmin.sol +62 -112
  412. package/contracts/registry/ReleaseRegistry.sol +57 -43
  413. package/contracts/registry/ServiceAuthorizationV3.sol +128 -33
  414. package/contracts/registry/TokenRegistry.sol +56 -52
  415. package/contracts/shared/Component.sol +18 -31
  416. package/contracts/shared/ComponentService.sol +239 -244
  417. package/contracts/shared/ContractLib.sol +134 -75
  418. package/contracts/shared/IComponent.sol +1 -4
  419. package/contracts/shared/IComponentService.sol +21 -22
  420. package/contracts/shared/IKeyValueStore.sol +1 -1
  421. package/contracts/shared/INftOwnable.sol +2 -0
  422. package/contracts/shared/IRegisterable.sol +0 -1
  423. package/contracts/shared/InitializableERC165.sol +9 -1
  424. package/contracts/shared/InstanceLinkedComponent.sol +4 -7
  425. package/contracts/shared/KeyValueStore.sol +3 -3
  426. package/contracts/shared/NftOwnable.sol +4 -2
  427. package/contracts/shared/PolicyHolder.sol +3 -2
  428. package/contracts/shared/Registerable.sol +1 -4
  429. package/contracts/shared/Service.sol +6 -4
  430. package/contracts/shared/TokenHandler.sol +5 -4
  431. package/contracts/staking/IStaking.sol +266 -64
  432. package/contracts/staking/IStakingService.sol +44 -82
  433. package/contracts/staking/ITargetLimitHandler.sol +17 -0
  434. package/contracts/staking/Staking.sol +473 -202
  435. package/contracts/staking/{StakeManagerLib.sol → StakingLib.sol} +55 -84
  436. package/contracts/staking/StakingManager.sol +4 -3
  437. package/contracts/staking/StakingReader.sol +58 -77
  438. package/contracts/staking/StakingService.sol +49 -158
  439. package/contracts/staking/StakingServiceManager.sol +1 -0
  440. package/contracts/staking/StakingStore.sol +1089 -330
  441. package/contracts/staking/TargetHandler.sol +132 -0
  442. package/contracts/staking/TargetManagerLib.sol +69 -46
  443. package/contracts/type/Amount.sol +4 -0
  444. package/contracts/type/Blocknumber.sol +15 -15
  445. package/contracts/type/ChainId.sol +101 -0
  446. package/contracts/type/Fee.sol +8 -8
  447. package/contracts/type/NftId.sol +3 -3
  448. package/contracts/type/ObjectType.sol +21 -17
  449. package/contracts/type/RoleId.sol +57 -59
  450. package/contracts/type/Seconds.sol +19 -0
  451. package/contracts/type/String.sol +12 -0
  452. package/contracts/type/Timestamp.sol +4 -2
  453. package/contracts/type/UFixed.sol +28 -10
  454. package/contracts/type/Version.sol +39 -0
  455. package/contracts/upgradeability/IVersionable.sol +3 -0
  456. package/contracts/upgradeability/ProxyManager.sol +25 -11
  457. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +12 -2
  458. package/contracts/upgradeability/Versionable.sol +6 -3
  459. package/package.json +2 -2
  460. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +0 -4
  461. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +0 -24
  462. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
  463. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +0 -485
  464. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
  465. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -440
  466. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +0 -4
  467. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +0 -205
  468. package/contracts/shared/ComponentVerifyingService.sol +0 -128
  469. package/contracts/staking/StakingLifecycle.sol +0 -23
@@ -4,31 +4,33 @@ pragma solidity ^0.8.20;
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
6
  import {IRegistry} from "../registry/IRegistry.sol";
7
- import {IRegistryService} from "../registry/IRegistryService.sol";
8
7
  import {IRelease} from "../registry/IRelease.sol";
9
8
  import {IStaking} from "./IStaking.sol";
9
+ import {IStakingService} from "./IStakingService.sol";
10
+ import {ITargetLimitHandler} from "./ITargetLimitHandler.sol";
10
11
  import {IVersionable} from "../upgradeability/IVersionable.sol";
11
12
 
12
13
  import {Amount, AmountLib} from "../type/Amount.sol";
14
+ import {Blocknumber} from "../type/Blocknumber.sol";
15
+ import {ChainId, ChainIdLib} from "../type/ChainId.sol";
13
16
  import {Component} from "../shared/Component.sol";
14
17
  import {IComponent} from "../shared/IComponent.sol";
15
- import {IComponentService} from "../shared/IComponentService.sol";
16
18
  import {NftId} from "../type/NftId.sol";
17
- import {ObjectType, COMPONENT, STAKING} from "../type/ObjectType.sol";
18
- import {Seconds} from "../type/Seconds.sol";
19
+ import {ObjectType, PROTOCOL, INSTANCE, STAKE, STAKING, TARGET} from "../type/ObjectType.sol";
20
+ import {Seconds, SecondsLib} from "../type/Seconds.sol";
19
21
  import {Registerable} from "../shared/Registerable.sol";
20
- import {StakeManagerLib} from "./StakeManagerLib.sol";
22
+ import {StakingLib} from "./StakingLib.sol";
21
23
  import {StakingReader} from "./StakingReader.sol";
22
24
  import {StakingStore} from "./StakingStore.sol";
23
- import {TargetManagerLib} from "./TargetManagerLib.sol";
24
- import {Timestamp} from "../type/Timestamp.sol";
25
+ import {TargetHandler} from "./TargetHandler.sol";
25
26
  import {TokenHandler} from "../shared/TokenHandler.sol";
26
27
  import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
27
28
  import {TokenRegistry} from "../registry/TokenRegistry.sol";
28
- import {UFixed} from "../type/UFixed.sol";
29
+ import {UFixed, UFixedLib} from "../type/UFixed.sol";
29
30
  import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
30
31
  import {Versionable} from "../upgradeability/Versionable.sol";
31
32
 
33
+
32
34
  contract Staking is
33
35
  Component,
34
36
  Versionable,
@@ -42,115 +44,317 @@ contract Staking is
42
44
  struct StakingStorage {
43
45
  TokenRegistry _tokenRegistry;
44
46
  TokenHandler _tokenHandler;
47
+ IStakingService _stakingService;
48
+ TargetHandler _targetHandler;
45
49
  StakingStore _store;
46
50
  StakingReader _reader;
47
51
  NftId _protocolNftId;
48
52
  }
49
53
 
50
54
 
51
- modifier onlyStake(NftId stakeNftId) {
52
- if (!_getStakingStorage()._store.exists(stakeNftId)) {
53
- revert ErrorStakingNotStake(stakeNftId);
54
- }
55
+ modifier onlyStakeOwner(NftId stakeNftId) {
56
+ _checkTypeAndOwner(stakeNftId, STAKE(), true);
55
57
  _;
56
58
  }
57
59
 
58
60
 
59
61
  modifier onlyTarget(NftId targetNftId) {
60
- if (!_getStakingStorage()._store.getTargetNftIdSet().exists(targetNftId)) {
61
- revert ErrorStakingNotTarget(targetNftId);
62
- }
62
+ _checkTypeAndOwner(targetNftId, TARGET(), false);
63
+ _;
64
+ }
65
+
66
+
67
+ modifier onlyTargetOwner(NftId targetNftId) {
68
+ _checkTypeAndOwner(targetNftId, TARGET(), true);
63
69
  _;
64
70
  }
65
71
 
72
+ //--- contract intitialization -------------------------------------------
73
+
66
74
  function initializeTokenHandler()
67
75
  external
76
+ virtual
68
77
  {
69
78
  if (msg.sender != address(getRegistry())) {
70
79
  revert ErrorStakingNotRegistry(msg.sender);
71
80
  }
72
81
 
73
82
  StakingStorage storage $ = _getStakingStorage();
83
+ address dipToken = _getStakingStorage()._tokenRegistry.getDipTokenAddress();
74
84
  $._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
75
85
  address(getRegistry()),
76
86
  address(this),
77
- address(getToken()),
87
+ dipToken,
78
88
  getRegistry().getAuthority());
79
89
  }
80
90
 
81
91
 
82
- function approveTokenHandler(IERC20Metadata token, Amount amount)
83
- public
92
+ //--- staking owner functions -------------------------------------------//
93
+
94
+ function setSupportInfo(
95
+ ObjectType targetType,
96
+ bool isSupported,
97
+ bool allowNewTargets,
98
+ bool allowCrossChain,
99
+ Amount minStakingAmount,
100
+ Amount maxStakingAmount,
101
+ Seconds minLockingPeriod,
102
+ Seconds maxLockingPeriod,
103
+ UFixed minRewardRate,
104
+ UFixed maxRewardRate
105
+ )
106
+ external
107
+ virtual
108
+ restricted()
109
+ onlyOwner()
110
+ {
111
+ StakingStorage storage $ = _getStakingStorage();
112
+ $._store.setSupportInfo(
113
+ targetType,
114
+ isSupported,
115
+ allowNewTargets,
116
+ allowCrossChain,
117
+ minStakingAmount,
118
+ maxStakingAmount,
119
+ minLockingPeriod,
120
+ maxLockingPeriod,
121
+ minRewardRate,
122
+ maxRewardRate);
123
+ }
124
+
125
+
126
+ /// @inheritdoc IStaking
127
+ function setUpdateTriggers(
128
+ uint16 tvlUpdatesTrigger,
129
+ UFixed minTvlRatioTrigger
130
+ )
131
+ external
132
+ restricted()
133
+ {
134
+ StakingStorage storage $ = _getStakingStorage();
135
+ $._targetHandler.setUpdateTriggers(tvlUpdatesTrigger, minTvlRatioTrigger);
136
+ }
137
+
138
+
139
+ /// @inheritdoc IStaking
140
+ function setProtocolLockingPeriod(Seconds newLockingPeriod)
141
+ external
142
+ virtual
84
143
  restricted()
85
144
  onlyOwner()
86
145
  {
87
- _approveTokenHandler(token, amount);
146
+ StakingStorage storage $ = _getStakingStorage();
147
+ $._store.setLockingPeriod($._protocolNftId, newLockingPeriod);
88
148
  }
89
149
 
90
150
 
91
- // set/update staking reader
92
- function setStakingReader(StakingReader stakingReader)
151
+ /// @inheritdoc IStaking
152
+ function setProtocolRewardRate(UFixed newRewardRate)
93
153
  external
94
154
  virtual
155
+ restricted()
95
156
  onlyOwner()
96
157
  {
158
+ StakingStorage storage $ = _getStakingStorage();
159
+ $._store.setRewardRate($._protocolNftId, newRewardRate);
160
+ }
161
+
162
+
163
+ /// @inheritdoc IStaking
164
+ function setStakingRate(
165
+ ChainId chainId,
166
+ address token,
167
+ UFixed stakingRate
168
+ )
169
+ external
170
+ virtual
171
+ restricted()
172
+ onlyOwner()
173
+ {
174
+ (
175
+ UFixed oldStakingRate,
176
+ Blocknumber lastUpdateIn
177
+ ) = _getStakingStorage()._store.setStakingRate(chainId, token, stakingRate);
178
+
179
+ emit LogStakingStakingRateSet(chainId, token, stakingRate, oldStakingRate, lastUpdateIn);
180
+ }
181
+
182
+
183
+ /// @inheritdoc IStaking
184
+ function setStakingService(VersionPart release)
185
+ external
186
+ virtual
187
+ restricted()
188
+ onlyOwner()
189
+ {
190
+ // effects
191
+ StakingStorage storage $ = _getStakingStorage();
192
+ address oldStakingService = address($._stakingService);
193
+ $._stakingService = StakingLib.checkAndGetStakingService(getRegistry(), release);
194
+
195
+ emit LogStakingStakingServiceSet(address($._stakingService), release, oldStakingService);
196
+ }
197
+
198
+
199
+ /// @inheritdoc IStaking
200
+ function setStakingReader(address reader)
201
+ external
202
+ virtual
203
+ restricted()
204
+ onlyOwner()
205
+ {
206
+ StakingReader stakingReader = StakingReader(reader);
207
+
97
208
  if(stakingReader.getStaking() != IStaking(this)) {
98
209
  revert ErrorStakingStakingReaderStakingMismatch(address(stakingReader.getStaking()));
99
210
  }
100
211
 
101
- _getStakingStorage()._reader = stakingReader;
212
+ StakingStorage storage $ = _getStakingStorage();
213
+ $._reader = stakingReader;
214
+ $._store.setStakingReader(reader);
102
215
  }
103
216
 
104
217
 
105
- // rate management
106
- function setStakingRate(uint256 chainId, address token, UFixed stakingRate)
218
+ // TODO move to TargetHandler?
219
+ /// @inheritdoc IStaking
220
+ function addToken(
221
+ ChainId chainId,
222
+ address token
223
+ )
107
224
  external
108
225
  virtual
226
+ restricted()
227
+ onlyOwner()
228
+ {
229
+ _addToken(
230
+ _getStakingStorage(), chainId, token);
231
+ }
232
+
233
+
234
+ /// @inheritdoc IStaking
235
+ function approveTokenHandler(IERC20Metadata token, Amount amount)
236
+ public
237
+ virtual
238
+ restricted()
109
239
  onlyOwner()
110
240
  {
111
241
  StakingStorage storage $ = _getStakingStorage();
112
-
113
- if (!$._tokenRegistry.isRegistered(chainId, token)) {
114
- revert ErrorStakingTokenNotRegistered(chainId, token);
242
+ Amount oldAllowanceAmount = AmountLib.toAmount(
243
+ token.allowance(
244
+ address(this),
245
+ address($._tokenHandler)));
246
+
247
+ // staking token handler approval via its own implementation in staking service
248
+ $._stakingService.approveTokenHandler(
249
+ token,
250
+ amount);
251
+
252
+ emit LogStakingTokenHandlerApproved(address(token), amount, oldAllowanceAmount);
253
+ }
254
+
255
+ //--- target management -------------------------------------------------//
256
+
257
+
258
+ /// @inheritdoc IStaking
259
+ function refillRewardReserves(NftId targetNftId, Amount dipAmount)
260
+ external
261
+ virtual
262
+ restricted()
263
+ onlyTarget(targetNftId)
264
+ returns (Amount newBalance)
265
+ {
266
+ address transferFrom = msg.sender;
267
+ _refillRewardReserves(targetNftId, dipAmount, transferFrom);
268
+ }
269
+
270
+
271
+ /// @inheritdoc IStaking
272
+ function withdrawRewardReserves(NftId targetNftId, Amount dipAmount)
273
+ external
274
+ virtual
275
+ restricted()
276
+ onlyTarget(targetNftId)
277
+ returns (Amount newBalance)
278
+ {
279
+ address transferTo;
280
+
281
+ // case 1: protocol target: staking owner is recipient
282
+ if (targetNftId == getRegistry().getProtocolNftId()) {
283
+ // verify that the caller is the staking owner
284
+ transferTo = getOwner();
285
+ if (msg.sender != transferTo) {
286
+ revert ErrorStakingNotStakingOwner();
287
+ }
288
+
289
+ // case 2: same chain target: target owner is recipient
290
+ } else if (ChainIdLib.isCurrentChain(targetNftId)) {
291
+ // verify that the caller is the target owner
292
+ transferTo = getRegistry().ownerOf(targetNftId);
293
+ if (msg.sender != transferTo) {
294
+ revert ErrorStakingNotNftOwner(targetNftId);
295
+ }
296
+
297
+ // case 3: cross-chain target: TODO decide how to handle and implement
298
+ } else {
299
+ revert("Cross-chain target not supported");
115
300
  }
116
301
 
117
- UFixed oldStakingRate = $._store.getStakingRate(chainId, token);
118
- $._store.setStakingRate(chainId, token, stakingRate);
302
+ newBalance = _withdrawRewardReserves(targetNftId, dipAmount, transferTo);
303
+ }
304
+
119
305
 
120
- emit LogStakingStakingRateSet(chainId, token, oldStakingRate, stakingRate);
306
+ /// @inheritdoc IStaking
307
+ function refillRewardReservesByService(NftId targetNftId, Amount dipAmount, address transferFrom)
308
+ external
309
+ virtual
310
+ restricted()
311
+ onlyTarget(targetNftId)
312
+ returns (Amount newBalance)
313
+ {
314
+ _refillRewardReserves(targetNftId, dipAmount, transferFrom);
121
315
  }
122
316
 
123
- // target management
124
317
 
318
+ /// @inheritdoc IStaking
319
+ function withdrawRewardReservesByService(NftId targetNftId, Amount dipAmount, address transferTo)
320
+ external
321
+ virtual
322
+ restricted()
323
+ onlyTarget(targetNftId)
324
+ returns (Amount newBalance)
325
+ {
326
+ // check that service does not withdraw from protocol target
327
+ if (targetNftId == getRegistry().getProtocolNftId()) {
328
+ revert ErrorStakingTargetTypeNotSupported(targetNftId, PROTOCOL());
329
+ }
330
+
331
+ // default: on-chain target owner is recipient
332
+ address targetOwner = getRegistry().ownerOf(targetNftId);
333
+ return _withdrawRewardReserves(targetNftId, dipAmount, targetOwner);
334
+ }
335
+
336
+
337
+ /// @inheritdoc IStaking
125
338
  function registerTarget(
126
339
  NftId targetNftId,
127
340
  ObjectType expectedObjectType,
128
- uint256 chainId,
129
341
  Seconds initialLockingPeriod,
130
342
  UFixed initialRewardRate
131
343
  )
132
344
  external
133
345
  virtual
134
- restricted()
346
+ restricted() // staking service
135
347
  {
136
- TargetManagerLib.checkTargetParameters(
137
- getRegistry(),
138
- _getStakingStorage()._reader,
139
- targetNftId,
140
- expectedObjectType,
141
- initialLockingPeriod,
142
- initialRewardRate);
143
-
348
+ // checks done by staking store
144
349
  _getStakingStorage()._store.createTarget(
145
350
  targetNftId,
146
- TargetInfo({
147
- objectType: expectedObjectType,
148
- chainId: chainId,
149
- lockingPeriod: initialLockingPeriod,
150
- rewardRate: initialRewardRate}));
351
+ expectedObjectType,
352
+ initialLockingPeriod,
353
+ initialRewardRate);
151
354
  }
152
355
 
153
356
 
357
+ /// @inheritdoc IStaking
154
358
  function setLockingPeriod(
155
359
  NftId targetNftId,
156
360
  Seconds lockingPeriod
@@ -160,92 +364,88 @@ contract Staking is
160
364
  restricted()
161
365
  onlyTarget(targetNftId)
162
366
  {
163
- (
164
- Seconds oldLockingPeriod,
165
- TargetInfo memory targetInfo
166
- ) = TargetManagerLib.updateLockingPeriod(
167
- this,
168
- targetNftId,
169
- lockingPeriod);
170
-
171
- _getStakingStorage()._store.updateTarget(targetNftId, targetInfo);
172
-
173
- emit LogStakingLockingPeriodSet(targetNftId, oldLockingPeriod, lockingPeriod);
367
+ _getStakingStorage()._store.setLockingPeriod(targetNftId, lockingPeriod);
174
368
  }
175
369
 
176
- // TODO add function to set protocol reward rate: onlyOwner
177
- // get protocol nft id (from where)
178
370
 
371
+ /// @inheritdoc IStaking
179
372
  function setRewardRate(NftId targetNftId, UFixed rewardRate)
180
373
  external
181
374
  virtual
182
375
  restricted()
183
376
  onlyTarget(targetNftId)
184
377
  {
185
- (
186
- UFixed oldRewardRate,
187
- TargetInfo memory targetInfo
188
- ) = TargetManagerLib.updateRewardRate(
189
- this,
190
- targetNftId,
191
- rewardRate);
192
-
193
- _getStakingStorage()._store.updateTarget(targetNftId, targetInfo);
378
+ _getStakingStorage()._store.setRewardRate(targetNftId, rewardRate);
379
+ }
194
380
 
195
- emit LogStakingRewardRateSet(targetNftId, oldRewardRate, rewardRate);
381
+
382
+ // TODO refactor into setTargetLimits
383
+ /// @inheritdoc IStaking
384
+ function setMaxStakedAmount(NftId targetNftId, Amount stakeLimitAmount)
385
+ external
386
+ virtual
387
+ restricted()
388
+ onlyTarget(targetNftId)
389
+ {
390
+ StakingStorage storage $ = _getStakingStorage();
391
+ $._store.setMaxStakedAmount(targetNftId, stakeLimitAmount);
196
392
  }
197
393
 
198
394
 
199
- function refillRewardReserves(NftId targetNftId, Amount dipAmount)
395
+ /// @inheritdoc IStaking
396
+ function setTargetLimits(NftId targetNftId, Amount marginAmount, Amount limitAmount)
200
397
  external
201
398
  virtual
202
399
  restricted()
203
- returns (Amount newBalance)
400
+ onlyTargetOwner(targetNftId)
204
401
  {
205
- // update book keeping of reward reserves
206
402
  StakingStorage storage $ = _getStakingStorage();
207
- newBalance = $._store.increaseReserves(targetNftId, dipAmount);
403
+ $._store.setTargetLimits(targetNftId, marginAmount, limitAmount);
208
404
  }
209
405
 
210
406
 
211
- function withdrawRewardReserves(NftId targetNftId, Amount dipAmount)
407
+ /// @inheritdoc IStaking
408
+ function addTargetToken(NftId targetNftId, address token)
212
409
  external
213
410
  virtual
214
411
  restricted()
215
- returns (Amount newBalance)
412
+ onlyTarget(targetNftId)
216
413
  {
217
- // update book keeping of reward reserves
218
414
  StakingStorage storage $ = _getStakingStorage();
219
- newBalance = $._store.decreaseReserves(targetNftId, dipAmount);
415
+ ChainId chainId = ChainIdLib.fromNftId(targetNftId);
416
+ _addToken($, chainId, token);
417
+
418
+ $._store.addTargetToken(targetNftId, token);
419
+
420
+ // TODO move logging to store
421
+ emit LogStakingTargetTokenAdded(targetNftId, chainId, token);
220
422
  }
221
423
 
222
424
 
425
+ /// @inheritdoc IStaking
223
426
  function increaseTotalValueLocked(NftId targetNftId, address token, Amount amount)
224
427
  external
225
428
  virtual
226
429
  restricted() // only pool service
227
- returns (Amount newBalance)
228
430
  {
229
431
  StakingStorage storage $ = _getStakingStorage();
230
- uint chainId = $._reader.getTargetInfo(targetNftId).chainId;
231
- UFixed stakingRate = $._reader.getStakingRate(chainId, token);
232
- newBalance = $._store.increaseTotalValueLocked(targetNftId, stakingRate, token, amount);
432
+ $._store.increaseTotalValueLocked(targetNftId, token, amount);
233
433
  }
234
434
 
235
435
 
436
+ /// @inheritdoc IStaking
236
437
  function decreaseTotalValueLocked(NftId targetNftId, address token, Amount amount)
237
438
  external
238
439
  virtual
239
440
  restricted() // only pool service
240
- returns (Amount newBalance)
241
441
  {
242
442
  StakingStorage storage $ = _getStakingStorage();
243
- uint chainId = $._reader.getTargetInfo(targetNftId).chainId;
244
- UFixed stakingRate = $._reader.getStakingRate(chainId, token);
245
- newBalance = $._store.decreaseTotalValueLocked(targetNftId, stakingRate, token, amount);
443
+ $._store.decreaseTotalValueLocked(targetNftId, token, amount);
246
444
  }
247
445
 
248
446
 
447
+ // TODO add to interface and implement
448
+ /// inheritdoc IStaking
249
449
  function registerRemoteTarget(NftId targetNftId, TargetInfo memory targetInfo)
250
450
  external
251
451
  virtual
@@ -255,6 +455,8 @@ contract Staking is
255
455
 
256
456
  }
257
457
 
458
+ // TODO add to interface and implement
459
+ /// @inheritdoc IStaking
258
460
  function updateRemoteTvl(NftId targetNftId, address token, Amount amount)
259
461
  external
260
462
  virtual
@@ -264,57 +466,95 @@ contract Staking is
264
466
 
265
467
  }
266
468
 
267
- //--- staking functions -------------------------------------------------//
469
+ //--- public functions --------------------------------------------------//
268
470
 
471
+ /// @inheritdoc IStaking
472
+ function updateTargetLimit(NftId targetNftId)
473
+ external
474
+ restricted()
475
+ {
476
+ StakingStorage storage $ = _getStakingStorage();
477
+ $._store.updateTargetLimit(targetNftId);
478
+ }
479
+
480
+
481
+ /// @inheritdoc IStaking
269
482
  function createStake(
270
- NftId stakeNftId,
271
483
  NftId targetNftId,
272
- Amount stakeAmount
484
+ Amount stakeAmount,
485
+ address stakeOwner
273
486
  )
274
487
  external
275
488
  virtual
276
- restricted() // only staking service
489
+ restricted()
490
+ onlyTarget(targetNftId)
491
+ returns (NftId stakeNftId)
277
492
  {
493
+ // effects (includes further checks in service)
278
494
  StakingStorage storage $ = _getStakingStorage();
279
- Timestamp lockedUntil = StakeManagerLib.checkCreateParameters(
280
- $._reader,
281
- targetNftId,
282
- stakeAmount);
495
+ stakeNftId = $._stakingService.createStakeObject(targetNftId, stakeOwner);
496
+ $._store.createStake(stakeNftId, targetNftId, stakeOwner, stakeAmount);
283
497
 
284
- // create new stake
285
- $._store.create(
286
- stakeNftId,
287
- StakeInfo({
288
- lockedUntil: lockedUntil}));
289
-
290
- // update target stake balance
291
- $._store.increaseStake(
292
- stakeNftId,
293
- targetNftId,
294
- stakeAmount);
498
+ // interactions
499
+ if (stakeAmount.gtz()) {
500
+ $._stakingService.pullDipToken(stakeAmount, stakeOwner);
501
+ }
295
502
  }
296
503
 
504
+ //--- stake owner functions ---------------------------------------------//
505
+
297
506
 
507
+ /// @inheritdoc IStaking
298
508
  function stake(
299
509
  NftId stakeNftId,
300
510
  Amount stakeAmount
301
511
  )
302
512
  external
303
513
  virtual
304
- restricted() // only staking service
305
- onlyStake(stakeNftId)
306
- returns (Amount stakeBalance)
514
+ restricted()
515
+ onlyStakeOwner(stakeNftId)
516
+ returns (Amount newStakeBalance)
307
517
  {
308
518
  StakingStorage storage $ = _getStakingStorage();
309
- stakeBalance = StakeManagerLib.stake(
310
- getRegistry(),
311
- $._reader,
312
- $._store,
313
- stakeNftId,
519
+ $._store.stake(
520
+ stakeNftId,
521
+ true, // update rewards
522
+ true, // restake rewards
523
+ SecondsLib.max(), // max additional locking duration
314
524
  stakeAmount);
525
+
526
+ // collect staked DIP token via staking service
527
+ if (stakeAmount.gtz()) {
528
+ address stakeOwner = getRegistry().ownerOf(stakeNftId);
529
+ $._stakingService.pullDipToken(stakeAmount, stakeOwner);
530
+ }
315
531
  }
316
532
 
317
533
 
534
+ /// @inheritdoc IStaking
535
+ function unstake(NftId stakeNftId)
536
+ external
537
+ virtual
538
+ restricted()
539
+ onlyStakeOwner(stakeNftId)
540
+ returns (Amount unstakedAmount)
541
+ {
542
+ StakingStorage storage $ = _getStakingStorage();
543
+ unstakedAmount = $._store.unstake(
544
+ stakeNftId,
545
+ true, // update rewards
546
+ true, // restake rewards
547
+ AmountLib.max()); // unstake up to this amount
548
+
549
+ // transfer unstaked DIP token via staking service
550
+ if (unstakedAmount.gtz()) {
551
+ address stakeOwner = getRegistry().ownerOf(stakeNftId);
552
+ $._stakingService.pushDipToken(unstakedAmount, stakeOwner);
553
+ }
554
+ }
555
+
556
+
557
+ /// @inheritdoc IStaking
318
558
  function restake(
319
559
  NftId stakeNftId,
320
560
  NftId newTargetNftId
@@ -322,95 +562,83 @@ contract Staking is
322
562
  external
323
563
  virtual
324
564
  restricted() // only staking service
325
- onlyStake(stakeNftId)
326
- returns (NftId newStakeNftId)
565
+ onlyStakeOwner(stakeNftId)
566
+ onlyTarget(newTargetNftId)
567
+ returns (
568
+ NftId newStakeNftId,
569
+ Amount newStakedAmount
570
+ )
327
571
  {
328
- // TODO add check that allows additional staking amount
329
572
  StakingStorage storage $ = _getStakingStorage();
330
573
 
331
- // TODO implement
574
+ // step 1: unstake as much as possible
575
+ newStakedAmount = $._store.unstake(
576
+ stakeNftId,
577
+ true, // update rewards
578
+ true, // restake rewards
579
+ AmountLib.max()); // unstake up to this amount
580
+
581
+ // step 2: create new stake with full unstaked amount
582
+ address stakeOwner = getRegistry().ownerOf(stakeNftId);
583
+ newStakeNftId = $._stakingService.createStakeObject(newTargetNftId, stakeOwner);
584
+ $._store.createStake(newStakeNftId, newTargetNftId, stakeOwner, newStakedAmount);
585
+
586
+ // logging
587
+ emit LogStakingStakeRestaked(newStakeNftId, newTargetNftId, newStakedAmount, stakeOwner, stakeNftId);
332
588
  }
333
589
 
334
590
 
335
591
  function updateRewards(NftId stakeNftId)
336
592
  external
337
593
  virtual
338
- restricted() // only staking service
339
- onlyStake(stakeNftId)
594
+ restricted()
595
+ onlyStakeOwner(stakeNftId)
596
+ returns (Amount newRewardAmount)
340
597
  {
341
598
  StakingStorage storage $ = _getStakingStorage();
342
- _updateRewards($._reader, $._store, stakeNftId);
599
+ $._store.updateRewards(stakeNftId);
343
600
  }
344
601
 
345
602
 
346
603
  function claimRewards(NftId stakeNftId)
347
604
  external
348
605
  virtual
349
- restricted() // only staking service
350
- onlyStake(stakeNftId)
606
+ restricted()
607
+ onlyStakeOwner(stakeNftId)
351
608
  returns (
352
- Amount rewardsClaimedAmount
609
+ Amount claimedAmount
353
610
  )
354
611
  {
355
612
  StakingStorage storage $ = _getStakingStorage();
356
-
357
- // update rewards since last update
358
- NftId targetNftId = _updateRewards($._reader, $._store, stakeNftId);
359
-
360
- // unstake all available rewards
361
- rewardsClaimedAmount = $._store.claimUpTo(
362
- stakeNftId,
363
- targetNftId,
613
+ claimedAmount = $._store.claimRewards(
614
+ stakeNftId,
615
+ true,
364
616
  AmountLib.max());
365
617
 
366
- // update reward reserves
367
- $._store.decreaseReserves(targetNftId, rewardsClaimedAmount);
368
- }
369
-
370
-
371
- function unstake(NftId stakeNftId)
372
- external
373
- virtual
374
- restricted() // only staking service
375
- onlyStake(stakeNftId)
376
- returns (
377
- Amount unstakedAmount,
378
- Amount rewardsClaimedAmount
379
- )
380
- {
381
- StakingStorage storage $ = _getStakingStorage();
382
-
383
- StakeManagerLib.checkUnstakeParameters($._reader, stakeNftId);
384
-
385
- // update rewards since last update
386
- NftId targetNftId = _updateRewards($._reader, $._store, stakeNftId);
387
-
388
- // unstake all available dips
389
- (
390
- unstakedAmount,
391
- rewardsClaimedAmount
392
- ) = $._store.unstakeUpTo(
393
- stakeNftId,
394
- targetNftId,
395
- AmountLib.max(), // unstake all stakes
396
- AmountLib.max()); // claim all rewards
397
-
398
- // update reward reserves
399
- $._store.decreaseReserves(targetNftId, rewardsClaimedAmount);
618
+ // collect staked DIP token by staking service
619
+ if (claimedAmount.gtz()) {
620
+ // interactions
621
+ address stakeOwner = getRegistry().ownerOf(stakeNftId);
622
+ $._stakingService.pushDipToken(claimedAmount, stakeOwner);
623
+ }
400
624
  }
401
625
 
402
626
 
403
627
  //--- view functions ----------------------------------------------------//
404
628
 
405
- function getStakingReader() public view returns (StakingReader reader) {
629
+ function getStakingReader() public virtual view returns (StakingReader reader) {
406
630
  return _getStakingStorage()._reader;
407
631
  }
408
632
 
409
- function getStakingStore() external view returns (StakingStore stakingStore) {
633
+ function getTargetHandler() external virtual view returns (TargetHandler targetHandler) {
634
+ return _getStakingStorage()._targetHandler;
635
+ }
636
+
637
+ function getStakingStore() external virtual view returns (StakingStore stakingStore) {
410
638
  return _getStakingStorage()._store;
411
639
  }
412
640
 
413
- function getTokenRegistryAddress() external view returns (address tokenRegistry) {
641
+ function getTokenRegistryAddress() external virtual view returns (address tokenRegistry) {
414
642
  return address(_getStakingStorage()._tokenRegistry);
415
643
  }
416
644
 
@@ -440,84 +668,127 @@ contract Staking is
440
668
 
441
669
  //--- internal functions ------------------------------------------------//
442
670
 
443
- function _updateRewards(
444
- StakingReader reader,
445
- StakingStore store,
446
- NftId stakeNftId
447
- )
671
+
672
+ function _refillRewardReserves(NftId targetNftId, Amount dipAmount, address transferFrom)
448
673
  internal
449
674
  virtual
450
- returns (NftId targetNftId)
675
+ returns (Amount newBalance)
451
676
  {
452
- UFixed rewardRate;
677
+ // checks + effects
678
+ StakingStorage storage $ = _getStakingStorage();
679
+ newBalance = $._store.refillRewardReserves(targetNftId, dipAmount);
453
680
 
454
- (targetNftId, rewardRate) = reader.getTargetRewardRate(stakeNftId);
455
- (Amount rewardIncrement, ) = StakeManagerLib.calculateRewardIncrease(
456
- reader,
457
- stakeNftId,
458
- rewardRate);
681
+ // interactions
682
+ // collect DIP token from target owner
683
+ if (dipAmount.gtz()) {
684
+ $._stakingService.pullDipToken(dipAmount, transferFrom);
685
+ }
686
+ }
459
687
 
460
- store.updateRewards(
461
- stakeNftId,
462
- targetNftId,
463
- rewardIncrement);
688
+
689
+ function _withdrawRewardReserves(NftId targetNftId, Amount dipAmount, address transferTo)
690
+ internal
691
+ virtual
692
+ returns (Amount newBalance)
693
+ {
694
+ // checks + effects
695
+ StakingStorage storage $ = _getStakingStorage();
696
+ newBalance = $._store.withdrawRewardReserves(targetNftId, dipAmount);
697
+
698
+ // interactions
699
+ // transfer DIP token to designated address
700
+ if (dipAmount.gtz()) {
701
+ $._stakingService.pushDipToken(dipAmount, transferTo);
702
+ }
464
703
  }
465
704
 
466
705
 
467
- function _approveTokenHandler(IERC20Metadata token, Amount amount)
706
+ function _addToken(
707
+ StakingStorage storage $,
708
+ ChainId chainId,
709
+ address token
710
+ )
468
711
  internal
469
- virtual override
712
+ virtual
470
713
  {
471
- IComponentService(_getServiceAddress(STAKING())).approveTokenHandler(
472
- token,
473
- amount);
714
+ if ($._store.getTokenInfo(chainId, token).lastUpdateIn.eqz()) {
715
+ $._store.addToken(chainId, token);
716
+ }
474
717
  }
475
718
 
476
719
 
720
+ /// @dev top level initializer (upgradable contract)
477
721
  function _initialize(
478
722
  address owner,
479
723
  bytes memory data
480
724
  )
481
725
  internal
482
726
  virtual override
483
- initializer()
727
+ onlyInitializing()
484
728
  {
485
729
  (
486
730
  address registryAddress,
487
- address tokenRegistryAddress,
731
+ address targetHandlerAddress,
488
732
  address stakingStoreAddress,
489
- address stakingOwner
733
+ address tokenRegistryAddress
490
734
  ) = abi.decode(data, (address, address, address, address));
491
735
 
492
- // only admin(authority) and dip token address are set in registry at this point
493
- IRegistry registry = IRegistry(registryAddress);
494
- address authority = registry.getAuthority();
495
- TokenRegistry tokenRegistry = TokenRegistry(tokenRegistryAddress);
496
- address dipTokenAddress = tokenRegistry.getDipTokenAddress();
497
-
498
736
  // wiring to external contracts
737
+ IRegistry registry = IRegistry(registryAddress);
499
738
  StakingStorage storage $ = _getStakingStorage();
500
739
  $._protocolNftId = registry.getProtocolNftId();
740
+ $._targetHandler = TargetHandler(targetHandlerAddress);
501
741
  $._store = StakingStore(stakingStoreAddress);
502
742
  $._reader = StakingStore(stakingStoreAddress).getStakingReader();
503
743
  $._tokenRegistry = TokenRegistry(tokenRegistryAddress);
744
+ // staking service has to be set via setStakingService after deploying the first GIF release
504
745
 
505
- _initializeComponent(
506
- authority,
507
- registryAddress,
746
+ // initialize component
747
+ __Component_init(
748
+ registry.getAuthority(),
749
+ address(registry),
508
750
  registry.getNftId(), // parent nft id
509
751
  CONTRACT_NAME,
510
- dipTokenAddress,
511
752
  STAKING(),
512
753
  false, // is interceptor
513
- stakingOwner,
754
+ owner,
514
755
  "", // registry data
515
756
  ""); // component data
516
757
 
758
+ // Protocol target is created in the StakingStore constructor.
759
+ // This allows setting up the protocol target before the full
760
+ // staking authorization setup is in place.
761
+
517
762
  _registerInterface(type(IStaking).interfaceId);
518
763
  }
519
764
 
520
765
 
766
+ function _checkTypeAndOwner(NftId nftId, ObjectType expectedObjectType, bool checkOwner)
767
+ internal
768
+ view
769
+ {
770
+ StakingStorage storage $ = _getStakingStorage();
771
+ if (expectedObjectType == STAKE()) {
772
+ if (!$._store.exists(nftId)) {
773
+ revert ErrorStakingNotStake(nftId);
774
+ }
775
+ } else {
776
+ if (expectedObjectType == TARGET()) {
777
+ if (!$._store.getTargetSet().exists(nftId)) {
778
+ revert ErrorStakingNotTarget(nftId);
779
+ }
780
+ }
781
+ }
782
+
783
+ if (checkOwner) {
784
+ address nftOwner = getRegistry().ownerOf(nftId);
785
+ if (msg.sender != nftOwner) {
786
+ revert ErrorStakingNotOwner(nftId, nftOwner, msg.sender);
787
+ }
788
+ }
789
+ }
790
+
791
+
521
792
  function _getStakingStorage() private pure returns (StakingStorage storage $) {
522
793
  assembly {
523
794
  $.slot := STAKING_LOCATION_V1