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