@etherisc/gif-next 0.0.2-e769e2e-077 → 0.0.2-e7a5428-226

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 (577) hide show
  1. package/README.md +133 -10
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1075 -0
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +790 -0
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +843 -0
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1664 -0
  10. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +1289 -0
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1403 -0
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +790 -0
  16. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  17. package/artifacts/contracts/authorization/IAccess.sol/IAccess.json +10 -0
  18. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +1372 -0
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  21. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +455 -0
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  23. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +397 -0
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  25. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +646 -0
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  27. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1244 -0
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  29. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +805 -0
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +146 -607
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +767 -301
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  35. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +288 -118
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  37. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +152 -273
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  39. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +553 -77
  40. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  42. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1484 -0
  44. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  45. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +805 -0
  46. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  47. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2053 -0
  48. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  49. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +805 -0
  50. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  51. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1439 -0
  54. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  55. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +805 -0
  56. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  57. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1171 -0
  58. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  59. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1647 -0
  60. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  61. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +805 -0
  62. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  63. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2585 -0
  64. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  65. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +805 -0
  66. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  67. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +851 -0
  68. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  69. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +595 -96
  70. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +497 -75
  72. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  73. package/artifacts/contracts/instance/Instance.sol/Instance.json +617 -250
  74. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  75. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +2349 -0
  76. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  77. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +902 -0
  78. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  79. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1789 -713
  80. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +509 -220
  82. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  83. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +204 -96
  84. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  85. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1109 -817
  86. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  87. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +866 -0
  88. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  89. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +8 -8
  90. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  91. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +0 -53
  92. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  93. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  94. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  95. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +223 -0
  96. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  97. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +192 -0
  98. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
  99. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
  100. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  101. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  102. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  103. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  104. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  105. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  106. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  107. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  108. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +957 -0
  109. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  110. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +810 -0
  111. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  112. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +52 -0
  113. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  114. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +772 -0
  115. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  116. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +762 -0
  117. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  118. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +873 -0
  119. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  120. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +1042 -0
  121. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  122. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +810 -0
  123. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  124. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1242 -0
  125. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  126. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +805 -0
  127. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  128. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +582 -235
  129. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  130. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +278 -96
  131. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  132. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +398 -49
  133. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  134. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +151 -394
  135. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  136. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +770 -365
  137. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  138. package/artifacts/contracts/pool/Pool.sol/Pool.json +148 -682
  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 +940 -518
  143. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  144. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +283 -97
  145. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  146. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +382 -166
  147. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  148. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +222 -92
  149. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  150. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1159 -0
  151. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  152. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +805 -0
  153. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  154. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +502 -230
  155. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  156. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +251 -113
  157. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  158. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +320 -9
  159. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  160. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +369 -18
  161. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  162. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +436 -101
  163. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  164. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +202 -80
  165. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  166. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +291 -264
  167. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  168. package/artifacts/contracts/{shared/ComponentVerifyingService.sol/ComponentVerifyingService.json → product/IRiskService.sol/IRiskService.json} +295 -150
  169. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  170. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +564 -292
  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 +259 -97
  175. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  176. package/artifacts/contracts/product/PricingService.sol/PricingService.json +262 -299
  177. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  178. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +220 -122
  179. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  180. package/artifacts/contracts/product/Product.sol/Product.json +322 -596
  181. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  182. package/artifacts/contracts/product/RiskService.sol/RiskService.json +873 -0
  183. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  184. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +774 -0
  185. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  186. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  187. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  188. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +454 -42
  189. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  190. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +275 -193
  191. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
  192. package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
  193. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  194. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  195. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  196. package/artifacts/contracts/registry/Registry.sol/Registry.json +806 -97
  197. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  198. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +2147 -0
  199. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
  200. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1061 -0
  201. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  202. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +320 -312
  203. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  204. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +206 -94
  205. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  206. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +2152 -0
  207. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  208. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +205 -0
  209. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  210. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1389 -0
  211. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  212. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +683 -0
  213. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  214. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +257 -147
  215. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  216. package/artifacts/contracts/shared/Component.sol/Component.json +92 -277
  217. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  218. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +632 -542
  219. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  220. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +241 -115
  221. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  222. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +632 -0
  223. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  224. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  225. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  226. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  227. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  228. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  229. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  230. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +99 -94
  231. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  232. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +549 -228
  233. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  234. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +138 -130
  235. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  236. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +51 -19
  237. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  238. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +34 -3
  239. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  240. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +42 -1
  241. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  242. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +16 -30
  243. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  244. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +173 -0
  245. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  246. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  247. package/artifacts/contracts/shared/IService.sol/IService.json +103 -2
  248. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  249. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  250. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  251. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +131 -366
  252. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  253. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +61 -104
  254. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  255. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -62
  256. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  257. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  258. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  259. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +45 -55
  260. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  261. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +20 -124
  262. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  263. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +148 -98
  264. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  265. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  266. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  267. package/artifacts/contracts/shared/Service.sol/Service.json +96 -102
  268. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  269. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +585 -12
  270. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  271. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
  272. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  273. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
  274. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  275. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1388 -635
  276. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  277. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +705 -103
  278. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  279. package/artifacts/contracts/staking/Staking.sol/Staking.json +1703 -957
  280. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  281. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +470 -0
  282. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  283. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +205 -0
  284. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  285. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +274 -92
  286. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  287. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +544 -0
  288. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  289. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +751 -212
  290. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  291. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +215 -85
  292. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  293. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2637 -0
  294. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  295. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +657 -0
  296. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  297. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  298. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  299. package/artifacts/contracts/type/Amount.sol/AmountLib.json +122 -5
  300. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  301. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +81 -17
  302. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
  303. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +193 -0
  304. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  305. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  306. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  307. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
  308. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  309. package/artifacts/contracts/type/Fee.sol/FeeLib.json +98 -37
  310. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  311. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  312. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  313. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  314. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  315. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +47 -4
  316. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  317. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  318. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  319. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +153 -4
  320. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  321. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  322. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
  324. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  325. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  326. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  327. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +125 -7
  328. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  329. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +121 -23
  330. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  331. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +167 -2
  332. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  333. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +148 -0
  334. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  335. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  336. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  337. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  338. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  339. package/artifacts/contracts/type/String.sol/StrLib.json +180 -0
  340. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  341. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +37 -5
  342. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  343. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +126 -33
  344. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  345. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
  346. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  347. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +120 -2
  348. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  349. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +11 -1
  350. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  351. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +656 -0
  352. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  353. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +142 -0
  354. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  355. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +11 -1
  356. package/contracts/accounting/AccountingService.sol +274 -0
  357. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  358. package/contracts/accounting/IAccountingService.sol +47 -0
  359. package/contracts/authorization/AccessAdmin.sol +780 -0
  360. package/contracts/authorization/AccessAdminLib.sol +396 -0
  361. package/contracts/authorization/AccessManagerCloneable.sol +158 -0
  362. package/contracts/authorization/Authorization.sol +169 -0
  363. package/contracts/authorization/IAccess.sol +67 -0
  364. package/contracts/authorization/IAccessAdmin.sol +144 -0
  365. package/contracts/authorization/IAuthorization.sol +26 -0
  366. package/contracts/authorization/IServiceAuthorization.sol +78 -0
  367. package/contracts/authorization/ServiceAuthorization.sol +320 -0
  368. package/contracts/distribution/BasicDistribution.sol +141 -0
  369. package/contracts/distribution/BasicDistributionAuthorization.sol +67 -0
  370. package/contracts/distribution/Distribution.sol +126 -142
  371. package/contracts/distribution/DistributionService.sol +288 -137
  372. package/contracts/distribution/DistributionServiceManager.sol +13 -25
  373. package/contracts/distribution/IDistributionComponent.sol +22 -43
  374. package/contracts/distribution/IDistributionService.sol +61 -27
  375. package/contracts/examples/fire/DamageLevel.sol +59 -0
  376. package/contracts/examples/fire/FirePool.sol +86 -0
  377. package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
  378. package/contracts/examples/fire/FireProduct.sol +433 -0
  379. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  380. package/contracts/examples/fire/FireUSD.sol +26 -0
  381. package/contracts/examples/unpermissioned/SimpleDistribution.sol +81 -0
  382. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  383. package/contracts/examples/unpermissioned/SimpleOracle.sol +133 -0
  384. package/contracts/examples/unpermissioned/SimplePool.sol +102 -0
  385. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  386. package/contracts/examples/unpermissioned/SimpleProduct.sol +437 -0
  387. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  388. package/contracts/instance/BundleSet.sol +130 -0
  389. package/contracts/instance/IInstance.sol +117 -49
  390. package/contracts/instance/IInstanceService.sol +80 -46
  391. package/contracts/instance/Instance.sol +252 -133
  392. package/contracts/instance/InstanceAdmin.sol +383 -0
  393. package/contracts/instance/InstanceAuthorizationV3.sol +266 -0
  394. package/contracts/instance/InstanceReader.sol +499 -233
  395. package/contracts/instance/InstanceService.sol +370 -218
  396. package/contracts/instance/InstanceServiceManager.sol +14 -29
  397. package/contracts/instance/InstanceStore.sol +94 -55
  398. package/contracts/instance/RiskSet.sol +126 -0
  399. package/contracts/instance/base/BalanceStore.sol +16 -13
  400. package/contracts/instance/base/Cloneable.sol +2 -25
  401. package/contracts/instance/base/ObjectCounter.sol +20 -0
  402. package/contracts/instance/base/ObjectLifecycle.sol +109 -0
  403. package/contracts/instance/base/ObjectSet.sol +77 -0
  404. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  405. package/contracts/instance/module/IBundle.sol +6 -5
  406. package/contracts/instance/module/IComponents.sol +30 -20
  407. package/contracts/instance/module/IDistribution.sol +21 -9
  408. package/contracts/instance/module/IPolicy.sol +50 -29
  409. package/contracts/instance/module/IRisk.sol +5 -0
  410. package/contracts/mock/Dip.sol +26 -0
  411. package/contracts/oracle/BasicOracle.sol +45 -0
  412. package/contracts/oracle/BasicOracleAuthorization.sol +53 -0
  413. package/contracts/oracle/IOracle.sol +41 -0
  414. package/contracts/oracle/IOracleComponent.sol +33 -0
  415. package/contracts/oracle/IOracleService.sol +66 -0
  416. package/contracts/oracle/Oracle.sol +154 -0
  417. package/contracts/oracle/OracleService.sol +310 -0
  418. package/contracts/oracle/OracleServiceManager.sol +39 -0
  419. package/contracts/pool/BasicPool.sol +162 -0
  420. package/contracts/pool/BasicPoolAuthorization.sol +81 -0
  421. package/contracts/pool/BundleService.sol +225 -152
  422. package/contracts/pool/BundleServiceManager.sol +13 -25
  423. package/contracts/pool/IBundleService.sol +44 -34
  424. package/contracts/pool/IPoolComponent.sol +20 -70
  425. package/contracts/pool/IPoolService.sol +99 -76
  426. package/contracts/pool/Pool.sol +198 -164
  427. package/contracts/pool/PoolLib.sol +341 -0
  428. package/contracts/pool/PoolService.sol +448 -255
  429. package/contracts/pool/PoolServiceManager.sol +12 -24
  430. package/contracts/product/ApplicationService.sol +160 -86
  431. package/contracts/product/ApplicationServiceManager.sol +12 -9
  432. package/contracts/product/BasicProduct.sol +49 -0
  433. package/contracts/product/BasicProductAuthorization.sol +63 -0
  434. package/contracts/product/ClaimService.sol +389 -195
  435. package/contracts/product/ClaimServiceManager.sol +12 -9
  436. package/contracts/product/IApplicationService.sol +30 -4
  437. package/contracts/product/IClaimService.sol +52 -9
  438. package/contracts/product/IPolicyService.sol +62 -38
  439. package/contracts/product/IPricingService.sol +12 -11
  440. package/contracts/product/IProductComponent.sol +29 -9
  441. package/contracts/product/IRiskService.sol +48 -0
  442. package/contracts/product/PolicyService.sol +450 -276
  443. package/contracts/product/PolicyServiceLib.sol +139 -0
  444. package/contracts/product/PolicyServiceManager.sol +12 -27
  445. package/contracts/product/PricingService.sol +97 -91
  446. package/contracts/product/PricingServiceManager.sol +12 -24
  447. package/contracts/product/Product.sol +263 -147
  448. package/contracts/product/RiskService.sol +190 -0
  449. package/contracts/product/RiskServiceManager.sol +39 -0
  450. package/contracts/registry/ChainNft.sol +72 -39
  451. package/contracts/registry/IRegistry.sol +99 -38
  452. package/contracts/registry/IRegistryService.sol +26 -43
  453. package/contracts/registry/IRelease.sol +29 -0
  454. package/contracts/registry/ITransferInterceptor.sol +1 -2
  455. package/contracts/registry/Registry.sol +439 -232
  456. package/contracts/registry/RegistryAdmin.sol +188 -0
  457. package/contracts/registry/RegistryAuthorization.sol +309 -0
  458. package/contracts/registry/RegistryService.sol +66 -152
  459. package/contracts/registry/RegistryServiceManager.sol +23 -30
  460. package/contracts/registry/ReleaseAdmin.sol +195 -0
  461. package/contracts/registry/ReleaseLifecycle.sol +32 -0
  462. package/contracts/registry/ReleaseRegistry.sol +525 -0
  463. package/contracts/registry/ServiceAuthorizationV3.sol +342 -0
  464. package/contracts/registry/TokenRegistry.sol +211 -81
  465. package/contracts/shared/Component.sol +71 -143
  466. package/contracts/shared/ComponentService.sol +460 -369
  467. package/contracts/shared/ComponentServiceManager.sol +10 -7
  468. package/contracts/shared/ContractLib.sol +312 -0
  469. package/contracts/shared/IComponent.sol +7 -23
  470. package/contracts/shared/IComponentService.sol +51 -31
  471. package/contracts/shared/IInstanceLinkedComponent.sol +10 -26
  472. package/contracts/shared/IKeyValueStore.sol +3 -2
  473. package/contracts/shared/ILifecycle.sol +3 -2
  474. package/contracts/shared/INftOwnable.sol +5 -1
  475. package/contracts/shared/IPolicyHolder.sol +12 -17
  476. package/contracts/shared/IRegisterable.sol +22 -1
  477. package/contracts/shared/IService.sol +11 -6
  478. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +12 -4
  479. package/contracts/shared/InstanceLinkedComponent.sol +95 -46
  480. package/contracts/shared/KeyValueStore.sol +32 -70
  481. package/contracts/shared/Lifecycle.sol +30 -63
  482. package/contracts/shared/NftIdSet.sol +65 -0
  483. package/contracts/shared/NftOwnable.sol +35 -24
  484. package/contracts/shared/PolicyHolder.sol +19 -50
  485. package/contracts/shared/Registerable.sol +52 -21
  486. package/contracts/shared/RegistryLinked.sol +9 -14
  487. package/contracts/shared/Service.sol +32 -42
  488. package/contracts/shared/TokenHandler.sol +310 -26
  489. package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
  490. package/contracts/staking/IStaking.sol +229 -42
  491. package/contracts/staking/IStakingService.sol +98 -76
  492. package/contracts/staking/Staking.sol +633 -99
  493. package/contracts/staking/StakingLib.sol +195 -0
  494. package/contracts/staking/StakingLifecycle.sol +23 -0
  495. package/contracts/staking/StakingManager.sol +25 -20
  496. package/contracts/staking/StakingReader.sol +151 -0
  497. package/contracts/staking/StakingService.sol +174 -53
  498. package/contracts/staking/StakingServiceManager.sol +13 -8
  499. package/contracts/staking/StakingStore.sol +973 -0
  500. package/contracts/staking/TargetManagerLib.sol +211 -0
  501. package/contracts/type/AddressSet.sol +1 -1
  502. package/contracts/type/Amount.sol +43 -3
  503. package/contracts/type/Blocknumber.sol +34 -16
  504. package/contracts/type/ChainId.sol +101 -0
  505. package/contracts/type/ClaimId.sol +6 -1
  506. package/contracts/type/Fee.sol +9 -9
  507. package/contracts/type/Key32.sol +2 -2
  508. package/contracts/type/Key32Set.sol +62 -0
  509. package/contracts/type/NftId.sol +16 -4
  510. package/contracts/type/NftIdSet.sol +1 -1
  511. package/contracts/type/ObjectType.sol +204 -62
  512. package/contracts/type/PayoutId.sol +10 -10
  513. package/contracts/type/Referral.sol +2 -1
  514. package/contracts/type/RequestId.sol +75 -0
  515. package/contracts/type/RiskId.sol +39 -7
  516. package/contracts/type/RoleId.sol +122 -80
  517. package/contracts/type/Seconds.sol +62 -1
  518. package/contracts/type/Selector.sol +107 -0
  519. package/contracts/type/StateId.sol +41 -2
  520. package/contracts/type/String.sol +65 -0
  521. package/contracts/type/Timestamp.sol +20 -9
  522. package/contracts/type/UFixed.sol +62 -125
  523. package/contracts/type/Version.sol +58 -7
  524. package/contracts/{shared → upgradeability}/IVersionable.sol +3 -0
  525. package/contracts/{shared → upgradeability}/ProxyManager.sol +115 -38
  526. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +24 -0
  527. package/contracts/{shared → upgradeability}/Versionable.sol +8 -5
  528. package/package.json +12 -8
  529. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  530. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -778
  531. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +0 -4
  532. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +0 -1348
  533. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
  534. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -132
  535. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  536. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -256
  537. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  538. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -237
  539. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  540. package/artifacts/contracts/product/IProductService.sol/IProductService.json +0 -381
  541. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  542. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -673
  543. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  544. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -636
  545. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +0 -4
  546. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +0 -308
  547. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  548. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -688
  549. package/artifacts/contracts/registry/ServiceAuthorizationsLib.sol/ServiceAuthorizationsLib.dbg.json +0 -4
  550. package/artifacts/contracts/registry/ServiceAuthorizationsLib.sol/ServiceAuthorizationsLib.json +0 -137
  551. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  552. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  553. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
  554. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  555. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  556. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  557. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  558. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -569
  559. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  560. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  561. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  562. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  563. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -10
  564. package/contracts/instance/BundleManager.sol +0 -126
  565. package/contracts/instance/InstanceAccessManager.sol +0 -543
  566. package/contracts/instance/InstanceAuthorizationsLib.sol +0 -336
  567. package/contracts/instance/base/ObjectManager.sol +0 -82
  568. package/contracts/instance/module/IAccess.sol +0 -54
  569. package/contracts/product/IProductService.sol +0 -33
  570. package/contracts/product/ProductService.sol +0 -122
  571. package/contracts/product/ProductServiceManager.sol +0 -54
  572. package/contracts/registry/RegistryAccessManager.sol +0 -213
  573. package/contracts/registry/ReleaseManager.sol +0 -375
  574. package/contracts/registry/ServiceAuthorizationsLib.sol +0 -173
  575. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +0 -13
  576. package/contracts/shared/ComponentVerifyingService.sol +0 -111
  577. package/contracts/shared/UpgradableProxyWithAdmin.sol +0 -16
@@ -0,0 +1,973 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
5
+
6
+ import {IRegistry} from "../registry/IRegistry.sol";
7
+ import {IStaking} from "./IStaking.sol";
8
+
9
+ import {Amount, AmountLib} from "../type/Amount.sol";
10
+ import {ChainId, ChainIdLib} from "../type/ChainId.sol";
11
+ import {Blocknumber, BlocknumberLib} from "../type/Blocknumber.sol";
12
+ import {KeyValueStore} from "../shared/KeyValueStore.sol";
13
+ import {NftId, NftIdLib} from "../type/NftId.sol";
14
+ import {NftIdSet} from "../shared/NftIdSet.sol";
15
+ import {ObjectType} from "../type/ObjectType.sol";
16
+ import {PROTOCOL} from "../type/ObjectType.sol";
17
+ import {Seconds, SecondsLib} from "../type/Seconds.sol";
18
+ import {StakingLib} from "./StakingLib.sol";
19
+ import {StakingLifecycle} from "./StakingLifecycle.sol";
20
+ import {StakingReader} from "./StakingReader.sol";
21
+ import {TargetManagerLib} from "./TargetManagerLib.sol";
22
+ import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
23
+ import {UFixed, UFixedLib} from "../type/UFixed.sol";
24
+
25
+
26
+ contract StakingStore is
27
+ AccessManaged,
28
+ KeyValueStore,
29
+ StakingLifecycle
30
+ {
31
+
32
+ // token
33
+ error ErrorStakingStoreTokenNotRegistered(ChainId chainId, address token);
34
+ error ErrorStakingStoreTokenAlreadyAdded(ChainId chainId, address token);
35
+ error ErrorStakingStoreTokenUnknown(ChainId chainId, address token);
36
+
37
+ // target
38
+ error ErrorStakingStoreTargetNotInitialized(NftId targetNftId);
39
+
40
+ // in/decreasing reward reserves
41
+ error ErrorStakingStoreNotTarget(NftId targetNftId);
42
+ error ErrorStakingStoreRewardReservesInsufficient(NftId targetNftId, Amount reserveAmount, Amount claimedAmount);
43
+
44
+ // stakes
45
+ error ErrorStakingStoreStakesExceedingTargetMaxAmount(NftId targetNftId, Amount maxStakedAmount, Amount newIStaking);
46
+ error ErrorStakingStoreStakeNotInitialized(NftId nftId);
47
+
48
+ // creating and updating of staking balance
49
+ error ErrorStakingStoreStakeBalanceAlreadyInitialized(NftId nftId);
50
+ error ErrorStakingStoreStakeBalanceNotInitialized(NftId nftI);
51
+
52
+ // creating and updating of tvl balance
53
+ error ErrorStakingStoreTvlBalanceAlreadyInitialized(NftId nftId, address token);
54
+ error ErrorStakingStoreTvlBalanceNotInitialized(NftId nftId, address token);
55
+
56
+ IRegistry private _registry;
57
+ NftIdSet private _targetNftIdSet;
58
+ StakingReader private _reader;
59
+
60
+ // stakes
61
+ mapping(NftId stakeNftId => IStaking.StakeInfo) private _stakeInfo;
62
+
63
+ // targets
64
+ mapping(NftId targetNftId => IStaking.TargetInfo) private _targetInfo;
65
+ mapping(NftId targetNftId => mapping(address token => IStaking.TvlInfo)) private _tvlInfo;
66
+ mapping(NftId targetNftId => address [] token) private _targetToken;
67
+
68
+ // staking rate
69
+ mapping(ChainId chainId => mapping(address token => IStaking.TokenInfo)) private _tokenInfo;
70
+
71
+
72
+ constructor(IRegistry registry, StakingReader reader)
73
+ AccessManaged(msg.sender)
74
+ {
75
+ // set final authority
76
+ setAuthority(registry.getAuthority());
77
+
78
+ // set internal variables
79
+ _registry = registry;
80
+ _reader = reader;
81
+ _targetNftIdSet = new NftIdSet();
82
+
83
+ // register protocol target
84
+ _createTarget(
85
+ NftIdLib.toNftId(1101),
86
+ PROTOCOL(),
87
+ TargetManagerLib.getDefaultLockingPeriod(),
88
+ TargetManagerLib.getDefaultRewardRate(),
89
+ false); // no parameter check
90
+ }
91
+
92
+
93
+ //--- token management --------------------------------------------------//
94
+
95
+ /// @dev Registers a token for tvl management.
96
+ function addToken(
97
+ ChainId chainId,
98
+ address token
99
+ )
100
+ external
101
+ restricted() // token registry via staking
102
+ {
103
+ // checks
104
+ IStaking.TokenInfo storage info = _tokenInfo[chainId][token];
105
+
106
+ // check token is not yet registered
107
+ if (info.lastUpdateIn.gtz()) {
108
+ revert ErrorStakingStoreTokenAlreadyAdded(chainId, token);
109
+ }
110
+
111
+ info.stakingRate = UFixedLib.zero();
112
+ info.lastUpdateIn = BlocknumberLib.current();
113
+
114
+ // logging
115
+ emit IStaking.LogStakingTokenAdded(chainId, token);
116
+ }
117
+
118
+
119
+ /// @dev Sets the staking rate for the token.
120
+ function setStakingRate(
121
+ ChainId chainId,
122
+ address token,
123
+ UFixed stakingRate
124
+ )
125
+ external
126
+ restricted() // staking
127
+ returns (
128
+ UFixed oldStakingRate,
129
+ Blocknumber lastUpdatedIn
130
+ )
131
+ {
132
+ IStaking.TokenInfo storage info = _tokenInfo[chainId][token];
133
+ if (info.lastUpdateIn.eqz()) {
134
+ revert ErrorStakingStoreTokenUnknown(chainId, token);
135
+ }
136
+
137
+ // get previous values
138
+ oldStakingRate = info.stakingRate;
139
+ lastUpdatedIn = info.lastUpdateIn;
140
+
141
+ // update values
142
+ info.stakingRate = stakingRate;
143
+ info.lastUpdateIn = BlocknumberLib.current();
144
+ }
145
+
146
+ //--- target management -------------------------------------------------//
147
+
148
+ function createTarget(
149
+ NftId targetNftId,
150
+ ObjectType objectType,
151
+ Seconds lockingPeriod,
152
+ UFixed rewardRate
153
+ )
154
+ external
155
+ restricted() // staking
156
+ {
157
+ _createTarget(targetNftId, objectType, lockingPeriod, rewardRate, true);
158
+ }
159
+
160
+
161
+ function setLockingPeriod(
162
+ NftId targetNftId,
163
+ Seconds lockingPeriod
164
+ )
165
+ external
166
+ restricted() // staking
167
+ returns (
168
+ Seconds oldLockingPeriod,
169
+ Blocknumber lastUpdatedIn
170
+ )
171
+ {
172
+ TargetManagerLib.checkLockingPeriod(targetNftId, lockingPeriod);
173
+
174
+ IStaking.TargetInfo storage targetInfo;
175
+ (targetInfo, lastUpdatedIn) = _verifyAndUpdateTarget(targetNftId);
176
+
177
+ oldLockingPeriod = targetInfo.lockingPeriod;
178
+ targetInfo.lockingPeriod = lockingPeriod;
179
+ }
180
+
181
+
182
+ function setRewardRate(
183
+ NftId targetNftId,
184
+ UFixed rewardRate
185
+ )
186
+ external
187
+ restricted() // staking
188
+ returns (
189
+ UFixed oldRewardRate,
190
+ Blocknumber lastUpdatedIn
191
+ )
192
+ {
193
+ TargetManagerLib.checkRewardRate(targetNftId, rewardRate);
194
+
195
+ IStaking.TargetInfo storage targetInfo;
196
+ (targetInfo, lastUpdatedIn) = _verifyAndUpdateTarget(targetNftId);
197
+
198
+ oldRewardRate = targetInfo.rewardRate;
199
+ targetInfo.rewardRate = rewardRate;
200
+ }
201
+
202
+
203
+ function setMaxStakedAmount(
204
+ NftId targetNftId,
205
+ Amount maxStakedAmount
206
+ )
207
+ external
208
+ restricted() // staking
209
+ returns (
210
+ Amount oldMaxStakedAmount,
211
+ Blocknumber lastUpdatedIn
212
+ )
213
+ {
214
+ IStaking.TargetInfo storage targetInfo;
215
+ (targetInfo, lastUpdatedIn) = _verifyAndUpdateTarget(targetNftId);
216
+
217
+ oldMaxStakedAmount = targetInfo.maxStakedAmount;
218
+ targetInfo.maxStakedAmount = maxStakedAmount;
219
+ }
220
+
221
+
222
+ function addTargetToken(
223
+ NftId targetNftId,
224
+ address token
225
+ )
226
+ external
227
+ restricted()
228
+ {
229
+ // checks
230
+
231
+ // skip registering if tvl balance has already been initialized
232
+ IStaking.TvlInfo storage tvlInfo = _tvlInfo[targetNftId][token];
233
+ if (tvlInfo.lastUpdateIn.gtz()) {
234
+ return;
235
+ }
236
+
237
+ // check target exists
238
+ _getAndVerifyTarget(targetNftId);
239
+
240
+ // check token is known for chain id of target
241
+ ChainId chainId = ChainIdLib.fromNftId(targetNftId);
242
+ if (_tokenInfo[chainId][token].lastUpdateIn.eqz()) {
243
+ revert ErrorStakingStoreTokenUnknown(chainId, token);
244
+ }
245
+
246
+ // effects
247
+ tvlInfo.tvlAmount = AmountLib.zero();
248
+ tvlInfo.lastUpdateIn = BlocknumberLib.current();
249
+
250
+ // add token to list of know tokens for target
251
+ _targetToken[targetNftId].push(token);
252
+ }
253
+
254
+
255
+ function refillRewardReserves(
256
+ NftId targetNftId,
257
+ Amount dipAmount
258
+ )
259
+ external
260
+ restricted()
261
+ returns (Amount newReserveBalance)
262
+ {
263
+ // checks
264
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(targetNftId);
265
+ Blocknumber lastUpdateIn = targetInfo.lastUpdateIn;
266
+
267
+ // effects
268
+ targetInfo.reserveAmount = targetInfo.reserveAmount + dipAmount;
269
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
270
+
271
+ // logging
272
+ newReserveBalance = targetInfo.reserveAmount;
273
+ emit IStaking.LogStakingRewardReservesRefilled(
274
+ targetNftId,
275
+ dipAmount,
276
+ _registry.ownerOf(targetNftId),
277
+ newReserveBalance,
278
+ lastUpdateIn);
279
+ }
280
+
281
+
282
+ function withdrawRewardReserves(
283
+ NftId targetNftId,
284
+ Amount dipAmount
285
+ )
286
+ external
287
+ restricted()
288
+ returns (Amount newReserveBalance)
289
+ {
290
+ // checks
291
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(targetNftId);
292
+
293
+ // effects
294
+ Blocknumber lastUpdateIn = _decreaseReserves(targetNftId, targetInfo, dipAmount);
295
+
296
+ // logging
297
+ newReserveBalance = targetInfo.reserveAmount;
298
+ emit IStaking.LogStakingRewardReservesWithdrawn(
299
+ targetNftId,
300
+ dipAmount,
301
+ _registry.ownerOf(targetNftId),
302
+ newReserveBalance,
303
+ lastUpdateIn);
304
+ }
305
+
306
+
307
+ //--- tvl specific functions -------------------------------------//
308
+
309
+ function increaseTotalValueLocked(
310
+ NftId targetNftId,
311
+ address token,
312
+ Amount amount
313
+ )
314
+ external
315
+ restricted()
316
+ returns (Amount newBalance)
317
+ {
318
+ // checks
319
+ IStaking.TvlInfo storage tvlInfo = _getAndVerifyTvl(targetNftId, token);
320
+
321
+ // effects
322
+ tvlInfo.tvlAmount = tvlInfo.tvlAmount + amount;
323
+ tvlInfo.lastUpdateIn = BlocknumberLib.current();
324
+ newBalance = tvlInfo.tvlAmount;
325
+ }
326
+
327
+
328
+ function decreaseTotalValueLocked(
329
+ NftId targetNftId,
330
+ address token,
331
+ Amount amount
332
+ )
333
+ external
334
+ restricted()
335
+ returns (Amount newBalance)
336
+ {
337
+ // checks
338
+ IStaking.TvlInfo storage tvlInfo = _getAndVerifyTvl(targetNftId, token);
339
+
340
+ // effects
341
+ tvlInfo.tvlAmount = tvlInfo.tvlAmount - amount;
342
+ tvlInfo.lastUpdateIn = BlocknumberLib.current();
343
+ newBalance = tvlInfo.tvlAmount;
344
+ }
345
+
346
+ //--- stake specific functions -------------------------------------//
347
+
348
+ function createStake(
349
+ NftId stakeNftId,
350
+ NftId targetNftId,
351
+ address stakeOwner,
352
+ Amount stakeAmount
353
+ )
354
+ external
355
+ restricted()
356
+ returns (Timestamp lockedUntil)
357
+ {
358
+ // checks
359
+ IStaking.StakeInfo storage stakeInfo = _stakeInfo[stakeNftId];
360
+ if (stakeInfo.lastUpdateIn.gtz()) {
361
+ revert ErrorStakingStoreStakeBalanceAlreadyInitialized(stakeNftId);
362
+ }
363
+
364
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(targetNftId);
365
+ _checkMaxStakedAmount(targetNftId, targetInfo, stakeAmount);
366
+
367
+ // effects
368
+ stakeInfo.targetNftId = targetNftId;
369
+ stakeInfo.stakedAmount = AmountLib.zero();
370
+ stakeInfo.rewardAmount = AmountLib.zero();
371
+ stakeInfo.lockedUntil = TimestampLib.current();
372
+ _setStakeLastUpdatesToCurrent(stakeInfo);
373
+
374
+ // logging for creation of empty stake
375
+ emit IStaking.LogStakingStakeCreated(stakeNftId, stakeInfo.targetNftId, stakeInfo.stakedAmount, stakeInfo.lockedUntil, stakeOwner);
376
+
377
+ // process stake amount
378
+ _stake(stakeNftId, stakeInfo, targetInfo, targetInfo.lockingPeriod, stakeAmount);
379
+ }
380
+
381
+
382
+ function stake(
383
+ NftId stakeNftId,
384
+ bool updateRewards,
385
+ bool restakeRewards,
386
+ Seconds additionalLockingPeriod,
387
+ Amount stakeAmount
388
+ )
389
+ external
390
+ restricted()
391
+ {
392
+ // checks
393
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
394
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
395
+
396
+ if (updateRewards) {
397
+ _updateRewards(stakeNftId, stakeInfo, targetInfo);
398
+ }
399
+
400
+ if (restakeRewards) {
401
+ _restakeRewards(stakeNftId, stakeInfo, targetInfo);
402
+ }
403
+
404
+ _stake(stakeNftId, stakeInfo, targetInfo, additionalLockingPeriod, stakeAmount);
405
+ }
406
+
407
+
408
+ function unstake(
409
+ NftId stakeNftId,
410
+ bool updateRewards,
411
+ bool restakeRewards,
412
+ Amount maxUnstakeAmount
413
+ )
414
+ external
415
+ restricted()
416
+ returns (Amount unstakedAmount)
417
+ {
418
+ // checks
419
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
420
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
421
+
422
+ if (updateRewards) {
423
+ _updateRewards(stakeNftId, stakeInfo, targetInfo);
424
+ }
425
+
426
+ if (restakeRewards) {
427
+ _restakeRewards(stakeNftId, stakeInfo, targetInfo);
428
+ }
429
+
430
+ return _unstake(stakeNftId, stakeInfo, targetInfo, maxUnstakeAmount);
431
+ }
432
+
433
+
434
+ function updateRewards(NftId stakeNftId)
435
+ external
436
+ restricted()
437
+ {
438
+ // checks
439
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
440
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
441
+ _updateRewards(stakeNftId, stakeInfo, targetInfo);
442
+ }
443
+
444
+
445
+ function restakeRewards(
446
+ NftId stakeNftId,
447
+ bool updateRewards
448
+ )
449
+ external
450
+ restricted()
451
+ {
452
+ // checks
453
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
454
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
455
+
456
+ if (updateRewards) {
457
+ _updateRewards(stakeNftId, stakeInfo, targetInfo);
458
+ }
459
+
460
+ _restakeRewards(stakeNftId, stakeInfo, targetInfo);
461
+ }
462
+
463
+
464
+ function claimRewards(
465
+ NftId stakeNftId,
466
+ bool updateRewards,
467
+ Amount maxClaimAmount
468
+ )
469
+ external
470
+ restricted()
471
+ returns (Amount claimedAmount)
472
+ {
473
+ // checks
474
+ IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
475
+ IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
476
+
477
+ if (updateRewards) {
478
+ _updateRewards(stakeNftId, stakeInfo, targetInfo);
479
+ }
480
+
481
+ claimedAmount = _claimRewards(stakeNftId, stakeInfo, targetInfo, maxClaimAmount);
482
+ }
483
+
484
+ //--- view functions -----------------------------------------------//
485
+
486
+ function getStakingReader() external view returns (StakingReader stakingReader){
487
+ return _reader;
488
+ }
489
+
490
+
491
+ function exists(NftId stakeNftId) external view returns (bool) {
492
+ return _stakeInfo[stakeNftId].lastUpdateIn.gtz();
493
+ }
494
+
495
+
496
+ function getRequiredStakeBalance(NftId targetNftId)
497
+ external
498
+ view
499
+ returns (Amount requiredStakedAmount)
500
+ {
501
+ address [] memory tokens = _targetToken[targetNftId];
502
+ if (tokens.length == 0) {
503
+ return AmountLib.zero();
504
+ }
505
+
506
+ requiredStakedAmount = AmountLib.zero();
507
+ ChainId targetChainId = _targetInfo[targetNftId].chainId;
508
+ address token;
509
+ Amount tvlAmount;
510
+ UFixed stakingRate;
511
+
512
+ for (uint256 i = 0; i < tokens.length; i++) {
513
+ token = tokens[i];
514
+ tvlAmount = _tvlInfo[targetNftId][token].tvlAmount;
515
+ if (tvlAmount.eqz()) { continue; }
516
+
517
+ stakingRate = _tokenInfo[targetChainId][token].stakingRate;
518
+ if (stakingRate.eqz()) { continue; }
519
+
520
+ requiredStakedAmount = requiredStakedAmount + tvlAmount.multiplyWith(stakingRate);
521
+ }
522
+ }
523
+
524
+
525
+ /// @dev Returns true iff current stake amount is still locked
526
+ function isStakeLocked(NftId stakeNftId) public view returns (bool) {
527
+ return _stakeInfo[stakeNftId].lockedUntil > TimestampLib.current();
528
+ }
529
+
530
+
531
+ /// @dev Returns the stake infos for the specified stake.
532
+ function getStakeInfo(NftId stakeNftId) external view returns (IStaking.StakeInfo memory stakeInfo) {
533
+ return _stakeInfo[stakeNftId];
534
+ }
535
+
536
+
537
+ /// @dev Returns the stake infos for the specified stake.
538
+ function getStakeTarget(NftId stakeNftId) external view returns (NftId targetNftId) {
539
+ return _stakeInfo[stakeNftId].targetNftId;
540
+ }
541
+
542
+
543
+ /// @dev Returns the target infos for the specified target.
544
+ function getTargetInfo(NftId targetNftId) external view returns (IStaking.TargetInfo memory targetInfo) {
545
+ return _targetInfo[targetNftId];
546
+ }
547
+
548
+
549
+ /// @dev Returns the tvl infos for the specified target.
550
+ function getTvlInfo(NftId targetNftId, address token) external view returns (IStaking.TvlInfo memory tvlInfo) {
551
+ return _tvlInfo[targetNftId][token];
552
+ }
553
+
554
+
555
+ /// @dev Returns the tvl infos for the specified target.
556
+ function getTokenInfo(ChainId chainId, address token) external view returns (IStaking.TokenInfo memory tokenInfo) {
557
+ return _tokenInfo[chainId][token];
558
+ }
559
+
560
+
561
+ function getTargetSet() external view returns (NftIdSet targetNftIdSet) {
562
+ return _targetNftIdSet;
563
+ }
564
+
565
+ //--- internal functions -----------------------------------------------//
566
+
567
+ function _verifyAndUpdateTarget(NftId targetNftId)
568
+ private
569
+ returns (
570
+ IStaking.TargetInfo storage targetInfo,
571
+ Blocknumber lastUpdatedIn
572
+ )
573
+ {
574
+ // checks
575
+ targetInfo = _getAndVerifyTarget(targetNftId);
576
+ lastUpdatedIn = targetInfo.lastUpdateIn;
577
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
578
+ }
579
+
580
+
581
+ function _createTarget(
582
+ NftId targetNftId,
583
+ ObjectType objectType,
584
+ Seconds lockingPeriod,
585
+ UFixed rewardRate,
586
+ bool checkParameters
587
+ )
588
+ private
589
+ {
590
+ // checks
591
+ if (checkParameters) {
592
+ TargetManagerLib.checkTargetParameters(
593
+ _registry,
594
+ _reader,
595
+ targetNftId,
596
+ objectType,
597
+ lockingPeriod,
598
+ rewardRate);
599
+ }
600
+
601
+ // effects
602
+ IStaking.TargetInfo storage targetInfo = _targetInfo[targetNftId];
603
+ targetInfo.stakedAmount = AmountLib.zero();
604
+ targetInfo.rewardAmount = AmountLib.zero();
605
+ targetInfo.reserveAmount = AmountLib.zero();
606
+ targetInfo.maxStakedAmount = AmountLib.max();
607
+
608
+ targetInfo.objectType = objectType;
609
+ targetInfo.lockingPeriod = lockingPeriod;
610
+ targetInfo.rewardRate = rewardRate;
611
+ targetInfo.chainId = ChainIdLib.fromNftId(targetNftId);
612
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
613
+
614
+ // add new target to target set
615
+ _targetNftIdSet.add(targetNftId);
616
+ }
617
+
618
+
619
+ function _spendRewardReserves(
620
+ NftId targetNftId,
621
+ IStaking.TargetInfo storage targetInfo,
622
+ Amount dipAmount
623
+ )
624
+ private
625
+ {
626
+ Blocknumber lastUpdateIn = _decreaseReserves(targetNftId, targetInfo, dipAmount);
627
+
628
+ // logging
629
+ emit IStaking.LogStakingRewardReservesSpent(
630
+ targetNftId,
631
+ dipAmount,
632
+ targetInfo.reserveAmount,
633
+ lastUpdateIn);
634
+ }
635
+
636
+
637
+ function _decreaseReserves(
638
+ NftId targetNftId,
639
+ IStaking.TargetInfo storage targetInfo,
640
+ Amount dipAmount
641
+ )
642
+ private
643
+ returns ( Blocknumber lastUpdateIn)
644
+ {
645
+ lastUpdateIn = targetInfo.lastUpdateIn;
646
+
647
+ // check if reserves are sufficient
648
+ if (dipAmount > targetInfo.reserveAmount) {
649
+ revert ErrorStakingStoreRewardReservesInsufficient(
650
+ targetNftId,
651
+ targetInfo.reserveAmount,
652
+ dipAmount);
653
+ }
654
+
655
+ // effects
656
+ targetInfo.reserveAmount = targetInfo.reserveAmount - dipAmount;
657
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
658
+ }
659
+
660
+
661
+ function _updateRewards(
662
+ NftId stakeNftId,
663
+ IStaking.StakeInfo storage stakeInfo,
664
+ IStaking.TargetInfo storage targetInfo
665
+ )
666
+ internal
667
+ returns (Amount rewardIncreaseAmount)
668
+ {
669
+ // return if reward rate is zero
670
+ if (targetInfo.rewardRate.eqz()) {
671
+ return rewardIncreaseAmount;
672
+ }
673
+
674
+ // get seconds since last update on stake
675
+ Seconds duration = SecondsLib.toSeconds(
676
+ block.timestamp - stakeInfo.lastUpdateAt.toInt());
677
+
678
+ // return if duration is zero
679
+ if (duration.eqz()) {
680
+ return AmountLib.zero();
681
+ }
682
+
683
+ // calculate reward increase since
684
+ rewardIncreaseAmount = StakingLib.calculateRewardAmount(
685
+ targetInfo.rewardRate,
686
+ duration,
687
+ stakeInfo.stakedAmount);
688
+
689
+ // update target + stake
690
+ targetInfo.rewardAmount = targetInfo.rewardAmount + rewardIncreaseAmount;
691
+ stakeInfo.rewardAmount = stakeInfo.rewardAmount + rewardIncreaseAmount;
692
+ _setLastUpdatesToCurrent(stakeInfo, targetInfo);
693
+
694
+ // logging
695
+ emit IStaking.LogStakingStakeRewardsUpdated(
696
+ stakeNftId,
697
+ rewardIncreaseAmount,
698
+ stakeInfo.stakedAmount,
699
+ stakeInfo.rewardAmount,
700
+ stakeInfo.lockedUntil);
701
+ }
702
+
703
+
704
+ function _restakeRewards(
705
+ NftId stakeNftId,
706
+ IStaking.StakeInfo storage stakeInfo,
707
+ IStaking.TargetInfo storage targetInfo
708
+ )
709
+ internal
710
+ returns (Amount restakeAmount)
711
+ {
712
+ restakeAmount = stakeInfo.rewardAmount;
713
+
714
+ // return if reward amount is zero
715
+ if (restakeAmount.eqz()) {
716
+ return restakeAmount;
717
+ }
718
+
719
+ // check restaking amount does not exceed target max staked amount
720
+ _checkMaxStakedAmount(stakeInfo.targetNftId, targetInfo, restakeAmount);
721
+
722
+ // use up reserves for newly staked dips
723
+ _spendRewardReserves(stakeInfo.targetNftId, targetInfo, restakeAmount);
724
+
725
+ // update target + stake
726
+ targetInfo.stakedAmount = targetInfo.stakedAmount + restakeAmount;
727
+ targetInfo.rewardAmount = targetInfo.rewardAmount - restakeAmount;
728
+ stakeInfo.stakedAmount = stakeInfo.stakedAmount + restakeAmount;
729
+ stakeInfo.rewardAmount = AmountLib.zero();
730
+ _setLastUpdatesToCurrent(stakeInfo, targetInfo);
731
+
732
+ // logging
733
+ emit IStaking.LogStakingRewardsRestaked(
734
+ stakeNftId,
735
+ restakeAmount,
736
+ stakeInfo.stakedAmount,
737
+ AmountLib.zero(),
738
+ stakeInfo.lockedUntil);
739
+ }
740
+
741
+
742
+ function _stake(
743
+ NftId stakeNftId,
744
+ IStaking.StakeInfo storage stakeInfo,
745
+ IStaking.TargetInfo storage targetInfo,
746
+ Seconds maxAdditionalLockingPeriod,
747
+ Amount stakeAmount
748
+ )
749
+ internal
750
+ {
751
+ // return if reward amount is zero
752
+ if (stakeAmount.eqz()) {
753
+ return;
754
+ }
755
+
756
+ // check restaking amount does not exceed target max staked amount
757
+ _checkMaxStakedAmount(stakeInfo.targetNftId, targetInfo, stakeAmount);
758
+
759
+ // update target + stake
760
+ targetInfo.stakedAmount = targetInfo.stakedAmount + stakeAmount;
761
+ stakeInfo.stakedAmount = stakeInfo.stakedAmount + stakeAmount;
762
+
763
+ // increase locked until if applicable
764
+ Seconds additionalLockingPeriod = SecondsLib.min(maxAdditionalLockingPeriod, targetInfo.lockingPeriod);
765
+ if (stakeAmount.gtz() && additionalLockingPeriod.gtz()) {
766
+ stakeInfo.lockedUntil = stakeInfo.lockedUntil.addSeconds(additionalLockingPeriod);
767
+ }
768
+
769
+ _setLastUpdatesToCurrent(stakeInfo, targetInfo);
770
+
771
+ // logging
772
+ emit IStaking.LogStakingStaked(
773
+ stakeNftId,
774
+ stakeAmount,
775
+ stakeInfo.stakedAmount,
776
+ stakeInfo.rewardAmount,
777
+ stakeInfo.lockedUntil);
778
+ }
779
+
780
+
781
+ function _claimRewards(
782
+ NftId stakeNftId,
783
+ IStaking.StakeInfo storage stakeInfo,
784
+ IStaking.TargetInfo storage targetInfo,
785
+ Amount maxClaimAmount
786
+ )
787
+ internal
788
+ returns (Amount claimAmount)
789
+ {
790
+ claimAmount = AmountLib.min(maxClaimAmount, stakeInfo.rewardAmount);
791
+
792
+ // return if no rewards to claim
793
+ if (claimAmount.eqz()) {
794
+ return claimAmount;
795
+ }
796
+
797
+ // effects
798
+ // use up reserves for claimed rewards
799
+ _spendRewardReserves(stakeInfo.targetNftId, targetInfo, claimAmount);
800
+
801
+ // update target + stake
802
+ targetInfo.rewardAmount = targetInfo.rewardAmount - claimAmount;
803
+ stakeInfo.rewardAmount = stakeInfo.rewardAmount - claimAmount;
804
+ _setLastUpdatesToCurrent(stakeInfo, targetInfo);
805
+
806
+ // logging
807
+ emit IStaking.LogStakingRewardsClaimed(
808
+ stakeNftId,
809
+ claimAmount,
810
+ stakeInfo.stakedAmount,
811
+ stakeInfo.rewardAmount,
812
+ stakeInfo.lockedUntil);
813
+ }
814
+
815
+
816
+ function _unstake(
817
+ NftId stakeNftId,
818
+ IStaking.StakeInfo storage stakeInfo,
819
+ IStaking.TargetInfo storage targetInfo,
820
+ Amount maxUnstakeAmount
821
+ )
822
+ internal
823
+ returns (Amount unstakedAmount)
824
+ {
825
+ unstakedAmount = AmountLib.min(maxUnstakeAmount, stakeInfo.stakedAmount);
826
+
827
+ // return if no stakes to claim
828
+ if (unstakedAmount.eqz()) {
829
+ return unstakedAmount;
830
+ }
831
+
832
+ // check if stake is still locked
833
+ if (isStakeLocked(stakeNftId)) {
834
+ revert IStaking.ErrorStakingStakeLocked(stakeNftId, stakeInfo.lockedUntil);
835
+ }
836
+
837
+ // update target + stake
838
+ targetInfo.stakedAmount = targetInfo.stakedAmount - unstakedAmount;
839
+ stakeInfo.stakedAmount = stakeInfo.stakedAmount - unstakedAmount;
840
+ _setLastUpdatesToCurrent(stakeInfo, targetInfo);
841
+
842
+ // logging
843
+ emit IStaking.LogStakingUnstaked(
844
+ stakeNftId,
845
+ unstakedAmount,
846
+ stakeInfo.stakedAmount,
847
+ stakeInfo.rewardAmount,
848
+ stakeInfo.lockedUntil);
849
+ }
850
+
851
+
852
+ function _setLastUpdatesToCurrent(
853
+ IStaking.StakeInfo storage stakeInfo,
854
+ IStaking.TargetInfo storage targetInfo
855
+ )
856
+ internal
857
+ {
858
+ targetInfo.lastUpdateIn = BlocknumberLib.current();
859
+ _setStakeLastUpdatesToCurrent(stakeInfo);
860
+ }
861
+
862
+
863
+ function _setStakeLastUpdatesToCurrent(
864
+ IStaking.StakeInfo storage stakeInfo
865
+ )
866
+ internal
867
+ {
868
+ stakeInfo.lastUpdateIn = BlocknumberLib.current();
869
+ stakeInfo.lastUpdateAt = TimestampLib.current();
870
+ }
871
+
872
+ //--- private stake and target functions --------------------------------//
873
+
874
+
875
+ function _getAndVerifyStake(
876
+ NftId stakeNftId
877
+ )
878
+ private
879
+ view
880
+ returns (
881
+ IStaking.StakeInfo storage stakeInfo
882
+ )
883
+ {
884
+ stakeInfo = _stakeInfo[stakeNftId];
885
+ if (stakeInfo.lastUpdateIn.eqz()) {
886
+ revert ErrorStakingStoreStakeNotInitialized(stakeNftId);
887
+ }
888
+ }
889
+
890
+
891
+ function _checkMaxStakedAmount(
892
+ NftId targetNftId,
893
+ IStaking.TargetInfo storage targetInfo,
894
+ Amount additionalstakedAmount
895
+ )
896
+ private
897
+ {
898
+ if (targetInfo.stakedAmount + additionalstakedAmount > targetInfo.maxStakedAmount) {
899
+ revert IStaking.ErrorStakingTargetMaxStakedAmountExceeded(
900
+ targetNftId,
901
+ targetInfo.maxStakedAmount,
902
+ targetInfo.stakedAmount + additionalstakedAmount);
903
+ }
904
+
905
+ // TODO add check for tvl dependent maximum, see #628
906
+ }
907
+
908
+
909
+ function _getAndVerifyTarget(
910
+ NftId targetNftId
911
+ )
912
+ private
913
+ view
914
+ returns (
915
+ IStaking.TargetInfo storage targetInfo
916
+ )
917
+ {
918
+ targetInfo = _targetInfo[targetNftId];
919
+
920
+ if (targetInfo.lastUpdateIn.eqz()) {
921
+ revert ErrorStakingStoreTargetNotInitialized(targetNftId);
922
+ }
923
+ }
924
+
925
+ //--- private tvl functions ------------------------------------------------//
926
+
927
+ /// @dev Initializes token balance handling for the specified target.
928
+ function _createTvlBalance(NftId targetNftId, address token)
929
+ private
930
+ {
931
+ IStaking.TvlInfo storage info = _tvlInfo[targetNftId][token];
932
+
933
+ if (info.lastUpdateIn.gtz()) {
934
+ revert ErrorStakingStoreTvlBalanceAlreadyInitialized(targetNftId, token);
935
+ }
936
+
937
+ // set tvl balances to 0 and update last updated in
938
+ info.tvlAmount = AmountLib.zero();
939
+ info.lastUpdateIn = BlocknumberLib.current();
940
+ }
941
+
942
+
943
+ function _updateTvlBalance(
944
+ NftId targetNftId,
945
+ address token,
946
+ Amount newTvlAmount
947
+ )
948
+ private
949
+ returns (
950
+ Amount oldTvlAmount,
951
+ Blocknumber lastUpdatedIn
952
+ )
953
+ {
954
+ IStaking.TvlInfo storage tvlInfo = _getAndVerifyTvl(targetNftId, token);
955
+ oldTvlAmount = tvlInfo.tvlAmount;
956
+ lastUpdatedIn = tvlInfo.lastUpdateIn;
957
+
958
+ tvlInfo.tvlAmount = newTvlAmount;
959
+ tvlInfo.lastUpdateIn = BlocknumberLib.current();
960
+ }
961
+
962
+
963
+ function _getAndVerifyTvl(NftId targetNftId, address token)
964
+ private
965
+ view
966
+ returns (IStaking.TvlInfo storage tvlInfo)
967
+ {
968
+ tvlInfo = _tvlInfo[targetNftId][token];
969
+ if (tvlInfo.lastUpdateIn.eqz()) {
970
+ revert ErrorStakingStoreTvlBalanceNotInitialized(targetNftId, token);
971
+ }
972
+ }
973
+ }