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