@etherisc/gif-next 0.0.2-b312c9a-831 → 0.0.2-b37fa8b-169

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