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