@etherisc/gif-next 0.0.2-d16f92c-416 → 0.0.2-d18e1c5-511
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 +130 -8
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1075 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +790 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +843 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1664 -0
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +1289 -0
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1403 -0
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +790 -0
- package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/authorization/IAccess.sol/IAccess.json +10 -0
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
- package/artifacts/contracts/{shared → authorization}/IAccessAdmin.sol/IAccessAdmin.json +525 -342
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +455 -0
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +397 -0
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +646 -0
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1234 -0
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +805 -0
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +139 -616
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +754 -323
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +228 -124
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +145 -282
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +535 -78
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1474 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +805 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2043 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +805 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
- package/artifacts/contracts/examples/flight/FlightLib.sol/FlightLib.dbg.json +4 -0
- package/artifacts/contracts/examples/flight/FlightLib.sol/FlightLib.json +408 -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 +805 -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 +805 -0
- package/artifacts/contracts/examples/flight/FlightProduct.sol/FlightProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/flight/FlightProduct.sol/FlightProduct.json +2185 -0
- package/artifacts/contracts/examples/flight/FlightProductAuthorization.sol/FlightProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/flight/FlightProductAuthorization.sol/FlightProductAuthorization.json +805 -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 +805 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1161 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1637 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +805 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2575 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +805 -0
- package/artifacts/contracts/instance/BaseStore.sol/BaseStore.dbg.json +4 -0
- package/artifacts/contracts/{shared/IKeyValueStore.sol/IKeyValueStore.json → instance/BaseStore.sol/BaseStore.json} +59 -195
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +851 -0
- package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.dbg.json +4 -0
- package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.json +304 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +580 -80
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +398 -75
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +590 -218
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1889 -313
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +837 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1760 -840
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +392 -274
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +141 -127
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1298 -1857
- 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/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +223 -0
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +192 -0
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +947 -0
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +805 -0
- package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +43 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +142 -139
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +98 -11
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +140 -423
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +198 -190
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +177 -97
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1232 -0
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +805 -0
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +569 -265
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +216 -104
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +383 -53
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +147 -406
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +711 -340
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +144 -694
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +522 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +925 -545
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +230 -106
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +353 -180
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +159 -99
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1149 -0
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +805 -0
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +466 -245
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +187 -123
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +301 -9
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +350 -18
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +417 -101
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +183 -80
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +282 -271
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/{shared/ComponentVerifyingService.sol/ComponentVerifyingService.json → product/IRiskService.sol/IRiskService.json} +283 -157
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +532 -311
- 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 +196 -108
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +249 -329
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +165 -137
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +316 -606
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +873 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +774 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +384 -69
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +97 -148
- package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
- package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +617 -133
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +796 -537
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1074 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +136 -290
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +141 -89
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +2152 -0
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +205 -0
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1389 -0
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +523 -27
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +120 -60
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +86 -287
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +609 -569
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +197 -131
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +632 -0
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +92 -103
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +535 -240
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +131 -139
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +34 -3
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +35 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +167 -0
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +84 -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 +125 -376
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -62
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +41 -57
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +141 -97
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +86 -111
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +585 -12
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1513 -204
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +235 -123
- package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.dbg.json +4 -0
- package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.json +50 -0
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +1635 -465
- 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 +191 -105
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +295 -183
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +282 -281
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +144 -96
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +1637 -801
- package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +4 -0
- package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +309 -0
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +184 -76
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.json +63 -10
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +45 -19
- package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +193 -0
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +98 -37
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +61 -9
- 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 +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +4 -4
- package/artifacts/contracts/type/RequestIdSet.sol/RequestIdSet.dbg.json +4 -0
- package/artifacts/contracts/type/RequestIdSet.sol/RequestIdSet.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 +79 -91
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +112 -2
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/String.sol/StrLib.json +69 -2
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +56 -5
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +126 -33
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.json +120 -2
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +11 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +656 -0
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +142 -0
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +11 -1
- package/contracts/accounting/AccountingService.sol +274 -0
- package/contracts/accounting/AccountingServiceManager.sol +38 -0
- package/contracts/accounting/IAccountingService.sol +47 -0
- package/contracts/authorization/AccessAdmin.sol +780 -0
- package/contracts/authorization/AccessAdminLib.sol +396 -0
- package/contracts/authorization/AccessManagerCloneable.sol +158 -0
- package/contracts/authorization/Authorization.sol +169 -0
- package/contracts/authorization/IAccess.sol +67 -0
- package/contracts/authorization/IAccessAdmin.sol +144 -0
- package/contracts/authorization/IAuthorization.sol +26 -0
- package/contracts/authorization/IServiceAuthorization.sol +78 -0
- package/contracts/authorization/ServiceAuthorization.sol +320 -0
- package/contracts/distribution/BasicDistribution.sol +140 -0
- package/contracts/distribution/BasicDistributionAuthorization.sol +67 -0
- package/contracts/distribution/Distribution.sol +125 -141
- package/contracts/distribution/DistributionService.sol +284 -133
- package/contracts/distribution/DistributionServiceManager.sol +8 -11
- package/contracts/distribution/IDistributionComponent.sol +21 -42
- package/contracts/distribution/IDistributionService.sol +60 -26
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +86 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
- package/contracts/examples/fire/FireProduct.sol +433 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/flight/FlightLib.sol +279 -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 +470 -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 +118 -49
- package/contracts/instance/IInstanceService.sol +68 -46
- package/contracts/instance/Instance.sol +221 -133
- package/contracts/instance/InstanceAdmin.sol +297 -249
- package/contracts/instance/InstanceAuthorizationV3.sol +275 -0
- package/contracts/instance/InstanceReader.sol +498 -256
- package/contracts/instance/InstanceService.sol +340 -265
- package/contracts/instance/InstanceServiceManager.sol +8 -13
- package/contracts/instance/InstanceStore.sol +163 -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 +4 -6
- package/contracts/instance/base/ObjectCounter.sol +1 -2
- package/contracts/instance/base/ObjectLifecycle.sol +109 -0
- package/contracts/instance/base/ObjectSet.sol +77 -0
- package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
- package/contracts/instance/module/IBundle.sol +6 -5
- package/contracts/instance/module/IComponents.sol +29 -21
- package/contracts/instance/module/IDistribution.sol +21 -9
- package/contracts/instance/module/IPolicy.sol +50 -29
- package/contracts/instance/module/IRisk.sol +5 -0
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/BasicOracle.sol +44 -0
- package/contracts/oracle/BasicOracleAuthorization.sol +52 -0
- package/contracts/oracle/IOracle.sol +25 -4
- package/contracts/oracle/IOracleComponent.sol +2 -1
- package/contracts/oracle/IOracleService.sol +14 -13
- package/contracts/oracle/Oracle.sol +60 -53
- package/contracts/oracle/OracleService.sol +119 -87
- package/contracts/oracle/OracleServiceManager.sol +8 -11
- package/contracts/pool/BasicPool.sol +161 -0
- package/contracts/pool/BasicPoolAuthorization.sol +81 -0
- package/contracts/pool/BundleService.sol +222 -132
- package/contracts/pool/BundleServiceManager.sol +8 -11
- package/contracts/pool/IBundleService.sol +43 -33
- package/contracts/pool/IPoolComponent.sol +20 -70
- package/contracts/pool/IPoolService.sol +97 -77
- package/contracts/pool/Pool.sol +196 -164
- package/contracts/pool/PoolLib.sol +341 -0
- package/contracts/pool/PoolService.sol +419 -257
- package/contracts/pool/PoolServiceManager.sol +6 -9
- package/contracts/product/ApplicationService.sol +154 -81
- 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 +391 -207
- package/contracts/product/ClaimServiceManager.sol +6 -6
- package/contracts/product/IApplicationService.sol +29 -3
- package/contracts/product/IClaimService.sol +48 -11
- package/contracts/product/IPolicyService.sol +61 -37
- package/contracts/product/IPricingService.sol +11 -10
- package/contracts/product/IProductComponent.sol +29 -9
- package/contracts/product/IRiskService.sol +48 -0
- package/contracts/product/PolicyService.sol +445 -275
- package/contracts/product/PolicyServiceLib.sol +139 -0
- package/contracts/product/PolicyServiceManager.sol +6 -9
- package/contracts/product/PricingService.sol +90 -84
- package/contracts/product/PricingServiceManager.sol +6 -9
- package/contracts/product/Product.sol +261 -147
- package/contracts/product/RiskService.sol +189 -0
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +72 -40
- package/contracts/registry/IRegistry.sol +84 -36
- package/contracts/registry/IRegistryService.sol +3 -10
- package/contracts/registry/IRelease.sol +29 -0
- package/contracts/registry/ITransferInterceptor.sol +1 -2
- package/contracts/registry/Registry.sol +378 -224
- package/contracts/registry/RegistryAdmin.sol +119 -261
- package/contracts/registry/RegistryAuthorization.sol +336 -0
- package/contracts/registry/RegistryService.sol +42 -67
- package/contracts/registry/RegistryServiceManager.sol +5 -5
- package/contracts/registry/ReleaseAdmin.sol +195 -0
- package/contracts/registry/ReleaseLifecycle.sol +32 -0
- package/contracts/registry/ReleaseRegistry.sol +525 -0
- package/contracts/registry/ServiceAuthorizationV3.sol +213 -71
- package/contracts/registry/TokenRegistry.sol +61 -59
- package/contracts/shared/Component.sol +71 -142
- package/contracts/shared/ComponentService.sol +459 -385
- package/contracts/shared/ComponentServiceManager.sol +10 -7
- package/contracts/shared/ContractLib.sol +312 -0
- package/contracts/shared/IComponent.sol +6 -18
- package/contracts/shared/IComponentService.sol +50 -41
- package/contracts/shared/IInstanceLinkedComponent.sol +10 -26
- package/contracts/shared/ILifecycle.sol +3 -2
- package/contracts/shared/INftOwnable.sol +4 -0
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/IRegisterable.sol +22 -1
- package/contracts/shared/IService.sol +4 -6
- package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +11 -3
- package/contracts/shared/InstanceLinkedComponent.sol +145 -57
- package/contracts/shared/Lifecycle.sol +30 -72
- package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
- package/contracts/shared/NftOwnable.sol +33 -11
- package/contracts/shared/PolicyHolder.sol +20 -59
- package/contracts/shared/Registerable.sol +52 -21
- package/contracts/shared/RegistryLinked.sol +9 -14
- package/contracts/shared/Service.sol +22 -38
- package/contracts/shared/TokenHandler.sol +310 -26
- package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
- package/contracts/staking/IStaking.sol +272 -73
- package/contracts/staking/IStakingService.sol +48 -74
- package/contracts/staking/ITargetLimitHandler.sol +17 -0
- package/contracts/staking/Staking.sol +534 -250
- package/contracts/staking/StakingLib.sol +195 -0
- package/contracts/staking/StakingManager.sol +14 -15
- package/contracts/staking/StakingReader.sol +72 -88
- package/contracts/staking/StakingService.sol +62 -152
- package/contracts/staking/StakingServiceManager.sol +9 -7
- package/contracts/staking/StakingStore.sol +1096 -341
- package/contracts/staking/TargetHandler.sol +132 -0
- package/contracts/staking/TargetManagerLib.sol +73 -46
- package/contracts/type/Amount.sol +31 -5
- package/contracts/type/Blocknumber.sol +22 -16
- package/contracts/type/ChainId.sol +101 -0
- package/contracts/type/ClaimId.sol +6 -1
- package/contracts/type/Fee.sol +8 -8
- package/contracts/type/Key32.sol +2 -2
- package/contracts/type/Key32Set.sol +62 -0
- package/contracts/type/NftId.sol +7 -0
- package/contracts/type/ObjectType.sol +91 -54
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/Referral.sol +7 -0
- package/contracts/type/RequestIdSet.sol +62 -0
- package/contracts/type/RiskId.sol +38 -6
- package/contracts/type/RoleId.sol +93 -114
- package/contracts/type/Seconds.sol +44 -1
- package/contracts/type/Selector.sol +5 -0
- package/contracts/type/StateId.sol +15 -1
- package/contracts/type/String.sol +42 -0
- package/contracts/type/Timestamp.sol +24 -8
- package/contracts/type/UFixed.sol +62 -125
- package/contracts/type/Version.sol +57 -6
- package/contracts/{shared → upgradeability}/IVersionable.sol +3 -0
- package/contracts/{shared → upgradeability}/ProxyManager.sol +96 -49
- package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +24 -0
- package/contracts/{shared → upgradeability}/Versionable.sol +8 -5
- package/package.json +9 -6
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -709
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -228
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -187
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/product/IProductService.sol/IProductService.json +0 -400
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
- package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +0 -4
- package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.json +0 -129
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1218
- package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +0 -4
- package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.json +0 -171
- package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.json +0 -1559
- package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.json +0 -1193
- package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +0 -1747
- package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +0 -1760
- package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +0 -1838
- package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +0 -1856
- 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/IAccessAdmin.sol/IAccessAdmin.dbg.json +0 -4
- package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +0 -4
- package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.json +0 -1562
- package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +0 -4
- package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.json +0 -1600
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +0 -571
- package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
- package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.json +0 -306
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -460
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -10
- package/contracts/instance/BundleManager.sol +0 -126
- package/contracts/instance/InstanceAuthorizationsLib.sol +0 -377
- package/contracts/instance/base/ObjectManager.sol +0 -80
- package/contracts/instance/module/IAccess.sol +0 -46
- package/contracts/product/IProductService.sol +0 -33
- package/contracts/product/ProductService.sol +0 -124
- package/contracts/product/ProductServiceManager.sol +0 -42
- package/contracts/registry/IServiceAuthorization.sol +0 -35
- package/contracts/registry/ReleaseManager.sol +0 -527
- package/contracts/registry/ServiceAuthorization.sol +0 -86
- package/contracts/shared/AccessAdmin.sol +0 -759
- package/contracts/shared/AccessManagerCustom.sol +0 -741
- package/contracts/shared/AccessManagerExtended.sol +0 -481
- package/contracts/shared/AccessManagerExtendedInitializeable.sol +0 -13
- package/contracts/shared/AccessManagerExtendedWithDisable.sol +0 -137
- package/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol +0 -14
- package/contracts/shared/ComponentVerifyingService.sol +0 -117
- package/contracts/shared/IAccessAdmin.sol +0 -168
- package/contracts/shared/IAccessManagerExtended.sol +0 -74
- package/contracts/shared/IAccessManagerExtendedWithDisable.sol +0 -18
- package/contracts/shared/IKeyValueStore.sol +0 -53
- package/contracts/shared/InitializableCustom.sol +0 -177
- package/contracts/shared/KeyValueStore.sol +0 -127
- package/contracts/shared/UpgradableProxyWithAdmin.sol +0 -16
- package/contracts/staking/StakeManagerLib.sol +0 -231
@@ -2,148 +2,479 @@
|
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
|
5
|
+
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
5
6
|
|
6
|
-
import {Amount, AmountLib} from "../type/Amount.sol";
|
7
|
-
import {Blocknumber, BlocknumberLib} from "../type/Blocknumber.sol";
|
8
|
-
import {ChainNft} from "../registry/ChainNft.sol";
|
9
|
-
import {Component} from "../shared/Component.sol";
|
10
7
|
import {IRegistry} from "../registry/IRegistry.sol";
|
11
|
-
import {IRegistryService} from "../registry/IRegistryService.sol";
|
12
8
|
import {IStaking} from "./IStaking.sol";
|
13
|
-
import {
|
14
|
-
|
15
|
-
import {
|
16
|
-
import {
|
17
|
-
import {
|
9
|
+
import {ITargetLimitHandler} from "./ITargetLimitHandler.sol";
|
10
|
+
|
11
|
+
import {Amount, AmountLib} from "../type/Amount.sol";
|
12
|
+
import {ChainId, ChainIdLib} from "../type/ChainId.sol";
|
13
|
+
import {Blocknumber, BlocknumberLib} from "../type/Blocknumber.sol";
|
18
14
|
import {NftId, NftIdLib} from "../type/NftId.sol";
|
19
|
-
import {
|
20
|
-
import {ObjectType
|
15
|
+
import {NftIdSet} from "../shared/NftIdSet.sol";
|
16
|
+
import {ObjectType} from "../type/ObjectType.sol";
|
17
|
+
import {PROTOCOL, INSTANCE} from "../type/ObjectType.sol";
|
21
18
|
import {Seconds, SecondsLib} from "../type/Seconds.sol";
|
19
|
+
import {StakingLib} from "./StakingLib.sol";
|
22
20
|
import {StakingReader} from "./StakingReader.sol";
|
23
21
|
import {TargetManagerLib} from "./TargetManagerLib.sol";
|
24
22
|
import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
|
25
|
-
import {TokenRegistry} from "../registry/TokenRegistry.sol";
|
26
23
|
import {UFixed, UFixedLib} from "../type/UFixed.sol";
|
27
|
-
import {Version, VersionLib} from "../type/Version.sol";
|
28
|
-
import {Versionable} from "../shared/Versionable.sol";
|
29
|
-
|
30
|
-
import {RegistryAdmin} from "../registry/RegistryAdmin.sol";
|
31
24
|
|
32
25
|
|
33
26
|
contract StakingStore is
|
34
|
-
|
35
|
-
|
27
|
+
Initializable,
|
28
|
+
AccessManaged
|
36
29
|
{
|
37
30
|
|
38
|
-
|
39
|
-
|
31
|
+
// token
|
32
|
+
error ErrorStakingStoreTokenNotRegistered(ChainId chainId, address token);
|
33
|
+
error ErrorStakingStoreTokenAlreadyAdded(ChainId chainId, address token);
|
34
|
+
error ErrorStakingStoreTokenUnknown(ChainId chainId, address token);
|
40
35
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
event LogStakingStoreStakesIncreased(NftId nftId, Amount addedAmount, Amount newBalance, Blocknumber lastUpdatedIn);
|
45
|
-
event LogStakingStoreStakesDecreased(NftId nftId, Amount addedAmount, Amount newBalance, Blocknumber lastUpdatedIn);
|
46
|
-
|
47
|
-
event LogStakingStoreRewardsIncreased(NftId nftId, Amount addedAmount, Amount newBalance, Blocknumber lastUpdatedIn);
|
48
|
-
event LogStakingStoreRewardsDecreased(NftId nftId, Amount addedAmount, Amount newBalance, Blocknumber lastUpdatedIn);
|
49
|
-
|
50
|
-
event LogStakingStoreRewardsRestaked(NftId nftId, Amount amount, Amount rewardAmount, Amount rewardIncrementAmount, Amount newBalance, Blocknumber lastUpdatedIn);
|
36
|
+
// target
|
37
|
+
error ErrorStakingStoreTargetNotInitialized(NftId targetNftId);
|
38
|
+
error ErrorStakingStoreLimitNotInitialized(NftId targetNftId);
|
51
39
|
|
52
40
|
// in/decreasing reward reserves
|
53
41
|
error ErrorStakingStoreNotTarget(NftId targetNftId);
|
54
|
-
error ErrorStakingStoreRewardReservesInsufficient(NftId targetNftId, Amount
|
42
|
+
error ErrorStakingStoreRewardReservesInsufficient(NftId targetNftId, Amount reserveAmount, Amount claimedAmount);
|
55
43
|
|
56
|
-
//
|
57
|
-
error
|
58
|
-
error
|
44
|
+
// stakes
|
45
|
+
error ErrorStakingStoreStakesExceedingTargetMaxAmount(NftId targetNftId, Amount stakeLimitAmount, Amount newIStaking);
|
46
|
+
error ErrorStakingStoreStakeNotInitialized(NftId nftId);
|
59
47
|
|
60
|
-
//
|
61
|
-
error
|
48
|
+
// creating and updating of staking balance
|
49
|
+
error ErrorStakingStoreStakeBalanceAlreadyInitialized(NftId nftId);
|
50
|
+
error ErrorStakingStoreStakeBalanceNotInitialized(NftId nftI);
|
51
|
+
|
52
|
+
// creating and updating of tvl balance
|
53
|
+
error ErrorStakingStoreTvlBalanceAlreadyInitialized(NftId nftId, address token);
|
54
|
+
error ErrorStakingStoreTvlBalanceNotInitialized(NftId nftId, address token);
|
62
55
|
|
63
56
|
IRegistry private _registry;
|
64
|
-
|
57
|
+
ITargetLimitHandler private _targetLimitHandler;
|
65
58
|
StakingReader private _reader;
|
59
|
+
NftIdSet private _targetNftIdSet;
|
66
60
|
|
67
|
-
//
|
68
|
-
mapping(
|
61
|
+
// target support
|
62
|
+
mapping(ObjectType targetType => IStaking.SupportInfo) private _supportInfo;
|
69
63
|
|
70
|
-
//
|
71
|
-
mapping(NftId
|
72
|
-
mapping(NftId
|
73
|
-
mapping(NftId
|
64
|
+
// targets
|
65
|
+
mapping(NftId targetNftId => IStaking.TargetInfo) private _targetInfo;
|
66
|
+
mapping(NftId targetNftId => IStaking.LimitInfo) private _limitInfo;
|
67
|
+
mapping(NftId targetNftId => mapping(address token => IStaking.TvlInfo)) private _tvlInfo;
|
68
|
+
mapping(NftId targetNftId => address [] token) private _targetToken;
|
74
69
|
|
75
|
-
|
76
|
-
mapping(
|
70
|
+
// staking rate
|
71
|
+
mapping(ChainId chainId => mapping(address token => IStaking.TokenInfo)) private _tokenInfo;
|
77
72
|
|
78
|
-
//
|
79
|
-
mapping(NftId
|
80
|
-
mapping(NftId nftId => mapping(address token => Amount tvlInDip)) private _tvlInDip;
|
81
|
-
mapping(NftId nftId => Amount tvlRequiredDip) private _tvlRequiredDip;
|
82
|
-
mapping(NftId nftId => Blocknumber lastUpdatedIn) private _tvlLastUpdatedIn;
|
73
|
+
// stakes
|
74
|
+
mapping(NftId stakeNftId => IStaking.StakeInfo) private _stakeInfo;
|
83
75
|
|
84
76
|
|
85
|
-
constructor(
|
77
|
+
constructor(
|
78
|
+
IRegistry registry,
|
79
|
+
StakingReader reader
|
80
|
+
)
|
86
81
|
AccessManaged(msg.sender)
|
87
82
|
{
|
88
83
|
// set final authority
|
89
84
|
setAuthority(registry.getAuthority());
|
90
85
|
|
91
86
|
// set internal variables
|
92
|
-
_registry = registry;
|
87
|
+
_registry = registry;
|
93
88
|
_reader = reader;
|
94
|
-
|
89
|
+
_targetNftIdSet = new NftIdSet();
|
95
90
|
|
91
|
+
_createInitialSetup();
|
96
92
|
// register protocol target
|
93
|
+
}
|
94
|
+
|
95
|
+
|
96
|
+
function _createInitialSetup()
|
97
|
+
internal
|
98
|
+
{
|
99
|
+
// define support parameters for protocol target
|
100
|
+
_setSupportInfo(
|
101
|
+
PROTOCOL(),
|
102
|
+
true, // isSupported
|
103
|
+
false, // allowNewTargets,
|
104
|
+
true, // crossChainIsSupported
|
105
|
+
AmountLib.zero(), // minStakingAmount
|
106
|
+
AmountLib.max(), // maxStakingAmount,
|
107
|
+
SecondsLib.oneDay(), // minLockingPeriod,
|
108
|
+
SecondsLib.oneYear(), // maxLockingPeriod,
|
109
|
+
UFixedLib.zero(), // minRewardRate,
|
110
|
+
UFixedLib.toUFixed(15, -2)); // maxRewardRate
|
111
|
+
|
112
|
+
// create protocol target
|
97
113
|
_createTarget(
|
98
114
|
NftIdLib.toNftId(1101),
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
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);
|
104
265
|
}
|
105
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
|
+
}
|
106
300
|
|
107
|
-
//--- staking rate specific functions -----------------------------------//
|
108
301
|
|
302
|
+
/// @dev Sets the staking rate for the token.
|
109
303
|
function setStakingRate(
|
110
|
-
|
304
|
+
ChainId chainId,
|
111
305
|
address token,
|
112
306
|
UFixed stakingRate
|
113
307
|
)
|
114
308
|
external
|
115
|
-
restricted()
|
309
|
+
restricted() // staking
|
310
|
+
returns (
|
311
|
+
UFixed oldStakingRate,
|
312
|
+
Blocknumber lastUpdatedIn
|
313
|
+
)
|
116
314
|
{
|
117
|
-
|
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();
|
118
327
|
}
|
119
328
|
|
120
|
-
//--- target
|
329
|
+
//--- target management -------------------------------------------------//
|
121
330
|
|
122
331
|
function createTarget(
|
123
332
|
NftId targetNftId,
|
124
|
-
|
333
|
+
ObjectType objectType,
|
334
|
+
Seconds lockingPeriod,
|
335
|
+
UFixed rewardRate
|
125
336
|
)
|
126
337
|
external
|
127
|
-
restricted()
|
338
|
+
restricted() // staking
|
128
339
|
{
|
129
|
-
_createTarget(targetNftId,
|
340
|
+
_createTarget(targetNftId, objectType, lockingPeriod, rewardRate, true);
|
341
|
+
}
|
342
|
+
|
343
|
+
|
344
|
+
function setLockingPeriod(
|
345
|
+
NftId targetNftId,
|
346
|
+
Seconds lockingPeriod
|
347
|
+
)
|
348
|
+
external
|
349
|
+
restricted() // staking
|
350
|
+
{
|
351
|
+
// checks
|
352
|
+
(
|
353
|
+
IStaking.TargetInfo storage targetInfo,
|
354
|
+
Blocknumber lastUpdateIn
|
355
|
+
) = _verifyAndUpdateTarget(targetNftId);
|
356
|
+
|
357
|
+
TargetManagerLib.checkLockingPeriod(_reader, targetNftId, targetInfo.objectType, lockingPeriod);
|
358
|
+
|
359
|
+
// effects
|
360
|
+
Seconds oldLockingPeriod = targetInfo.lockingPeriod;
|
361
|
+
targetInfo.lockingPeriod = lockingPeriod;
|
362
|
+
targetInfo.lastUpdateIn = BlocknumberLib.current();
|
363
|
+
|
364
|
+
// logging
|
365
|
+
emit IStaking.LogStakingTargetLockingPeriodSet(targetNftId, lockingPeriod, oldLockingPeriod, lastUpdateIn);
|
130
366
|
}
|
131
367
|
|
132
368
|
|
133
|
-
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(
|
134
418
|
NftId targetNftId,
|
135
|
-
|
419
|
+
Amount marginAmount,
|
420
|
+
Amount hardLimitAmount
|
136
421
|
)
|
137
422
|
external
|
423
|
+
virtual
|
138
424
|
restricted()
|
139
425
|
{
|
140
|
-
|
141
|
-
|
142
|
-
|
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);
|
143
441
|
}
|
144
442
|
|
145
443
|
|
146
|
-
function
|
444
|
+
function addTargetToken(
|
445
|
+
NftId targetNftId,
|
446
|
+
address token
|
447
|
+
)
|
448
|
+
external
|
449
|
+
restricted()
|
450
|
+
{
|
451
|
+
// checks
|
452
|
+
|
453
|
+
// skip registering if tvl balance has already been initialized
|
454
|
+
IStaking.TvlInfo storage tvlInfo = _tvlInfo[targetNftId][token];
|
455
|
+
if (tvlInfo.lastUpdateIn.gtz()) {
|
456
|
+
return;
|
457
|
+
}
|
458
|
+
|
459
|
+
// check target exists
|
460
|
+
_getAndVerifyTarget(targetNftId);
|
461
|
+
|
462
|
+
// check token is known for chain id of target
|
463
|
+
ChainId chainId = ChainIdLib.fromNftId(targetNftId);
|
464
|
+
if (_tokenInfo[chainId][token].lastUpdateIn.eqz()) {
|
465
|
+
revert ErrorStakingStoreTokenUnknown(chainId, token);
|
466
|
+
}
|
467
|
+
|
468
|
+
// effects
|
469
|
+
tvlInfo.tvlAmount = AmountLib.zero();
|
470
|
+
tvlInfo.lastUpdateIn = BlocknumberLib.current();
|
471
|
+
|
472
|
+
// add token to list of know tokens for target
|
473
|
+
_targetToken[targetNftId].push(token);
|
474
|
+
}
|
475
|
+
|
476
|
+
|
477
|
+
function refillRewardReserves(
|
147
478
|
NftId targetNftId,
|
148
479
|
Amount dipAmount
|
149
480
|
)
|
@@ -151,14 +482,26 @@ contract StakingStore is
|
|
151
482
|
restricted()
|
152
483
|
returns (Amount newReserveBalance)
|
153
484
|
{
|
154
|
-
|
155
|
-
|
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();
|
156
492
|
|
157
|
-
|
493
|
+
// logging
|
494
|
+
newReserveBalance = targetInfo.reserveAmount;
|
495
|
+
emit IStaking.LogStakingRewardReservesRefilled(
|
496
|
+
targetNftId,
|
497
|
+
dipAmount,
|
498
|
+
_registry.ownerOf(targetNftId),
|
499
|
+
newReserveBalance,
|
500
|
+
lastUpdateIn);
|
158
501
|
}
|
159
502
|
|
160
503
|
|
161
|
-
function
|
504
|
+
function withdrawRewardReserves(
|
162
505
|
NftId targetNftId,
|
163
506
|
Amount dipAmount
|
164
507
|
)
|
@@ -166,18 +509,20 @@ contract StakingStore is
|
|
166
509
|
restricted()
|
167
510
|
returns (Amount newReserveBalance)
|
168
511
|
{
|
169
|
-
|
170
|
-
|
171
|
-
revert ErrorStakingStoreRewardReservesInsufficient(
|
172
|
-
targetNftId,
|
173
|
-
dipAmount,
|
174
|
-
reserveAmount);
|
175
|
-
}
|
512
|
+
// checks
|
513
|
+
IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(targetNftId);
|
176
514
|
|
177
|
-
|
178
|
-
Blocknumber
|
515
|
+
// effects
|
516
|
+
Blocknumber lastUpdateIn = _decreaseReserves(targetNftId, targetInfo, dipAmount);
|
179
517
|
|
180
|
-
|
518
|
+
// logging
|
519
|
+
newReserveBalance = targetInfo.reserveAmount;
|
520
|
+
emit IStaking.LogStakingRewardReservesWithdrawn(
|
521
|
+
targetNftId,
|
522
|
+
dipAmount,
|
523
|
+
_registry.ownerOf(targetNftId),
|
524
|
+
newReserveBalance,
|
525
|
+
lastUpdateIn);
|
181
526
|
}
|
182
527
|
|
183
528
|
|
@@ -185,7 +530,6 @@ contract StakingStore is
|
|
185
530
|
|
186
531
|
function increaseTotalValueLocked(
|
187
532
|
NftId targetNftId,
|
188
|
-
UFixed stakingRate,
|
189
533
|
address token,
|
190
534
|
Amount amount
|
191
535
|
)
|
@@ -193,32 +537,24 @@ contract StakingStore is
|
|
193
537
|
restricted()
|
194
538
|
returns (Amount newBalance)
|
195
539
|
{
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
// update new amount of required dip
|
210
|
-
_tvlRequiredDip[targetNftId] = _tvlRequiredDip[targetNftId] - oldDipBalance + newDipBalance;
|
211
|
-
|
212
|
-
// update last updated in
|
213
|
-
_tvlLastUpdatedIn[targetNftId] = BlocknumberLib.currentBlocknumber();
|
214
|
-
|
215
|
-
emit LogStakingStoreTotalValueLockedIncreased(targetNftId, token, amount, newBalance, tvlLastUpdatedIn);
|
540
|
+
// checks
|
541
|
+
IStaking.TvlInfo storage tvlInfo = _getAndVerifyTvl(targetNftId, token);
|
542
|
+
Blocknumber lastUpdateIn = tvlInfo.lastUpdateIn;
|
543
|
+
|
544
|
+
// effects
|
545
|
+
// update tvl balance and adapts required stakes if necessary
|
546
|
+
tvlInfo.tvlAmount = tvlInfo.tvlAmount + amount;
|
547
|
+
_checkAndUpdateTargetLimit(targetNftId, token, tvlInfo);
|
548
|
+
tvlInfo.lastUpdateIn = BlocknumberLib.current();
|
549
|
+
newBalance = tvlInfo.tvlAmount;
|
550
|
+
|
551
|
+
// logging
|
552
|
+
emit IStaking.LogStakingTvlIncreased(targetNftId, token, amount, newBalance, lastUpdateIn);
|
216
553
|
}
|
217
554
|
|
218
555
|
|
219
556
|
function decreaseTotalValueLocked(
|
220
557
|
NftId targetNftId,
|
221
|
-
UFixed stakingRate,
|
222
558
|
address token,
|
223
559
|
Amount amount
|
224
560
|
)
|
@@ -226,388 +562,807 @@ contract StakingStore is
|
|
226
562
|
restricted()
|
227
563
|
returns (Amount newBalance)
|
228
564
|
{
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
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
|
+
}
|
234
579
|
|
235
|
-
newBalance = oldBalance - amount;
|
236
|
-
Amount newDipBalance = AmountLib.toAmount((
|
237
|
-
stakingRate * newBalance.toUFixed()).toInt());
|
238
580
|
|
239
|
-
|
240
|
-
|
241
|
-
|
581
|
+
function updateTargetLimit(NftId targetNftId)
|
582
|
+
external
|
583
|
+
restricted()
|
584
|
+
returns (Amount stakeLimitAmount)
|
585
|
+
{
|
586
|
+
return _updateTargetLimit(targetNftId);
|
587
|
+
}
|
242
588
|
|
243
|
-
// update new amount of required dip
|
244
|
-
_tvlRequiredDip[targetNftId] = _tvlRequiredDip[targetNftId] - oldDipBalance + newDipBalance;
|
245
589
|
|
246
|
-
|
247
|
-
|
590
|
+
function _checkAndUpdateTargetLimit(
|
591
|
+
NftId targetNftId,
|
592
|
+
address token,
|
593
|
+
IStaking.TvlInfo storage tvlInfo
|
594
|
+
)
|
595
|
+
internal
|
596
|
+
{
|
597
|
+
// update counter
|
598
|
+
tvlInfo.updatesCounter++;
|
599
|
+
|
600
|
+
// check if upgrade is necessary
|
601
|
+
bool updateRequired = _targetLimitHandler.isLimitUpdateRequired(
|
602
|
+
targetNftId,
|
603
|
+
token,
|
604
|
+
tvlInfo.updatesCounter,
|
605
|
+
tvlInfo.tvlBaselineAmount,
|
606
|
+
tvlInfo.tvlAmount);
|
607
|
+
|
608
|
+
if (updateRequired) {
|
609
|
+
// reset baseline and counter
|
610
|
+
tvlInfo.tvlBaselineAmount = tvlInfo.tvlAmount;
|
611
|
+
tvlInfo.updatesCounter = 0;
|
612
|
+
|
613
|
+
// update limit
|
614
|
+
_updateTargetLimit(targetNftId);
|
615
|
+
}
|
616
|
+
}
|
248
617
|
|
249
|
-
|
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);
|
250
651
|
}
|
251
652
|
|
252
653
|
//--- stake specific functions -------------------------------------//
|
253
654
|
|
254
|
-
function
|
655
|
+
function createStake(
|
255
656
|
NftId stakeNftId,
|
256
|
-
|
657
|
+
NftId targetNftId,
|
658
|
+
address stakeOwner,
|
659
|
+
Amount stakeAmount
|
257
660
|
)
|
258
661
|
external
|
259
662
|
restricted()
|
663
|
+
returns (Timestamp lockedUntil)
|
260
664
|
{
|
261
|
-
|
262
|
-
|
263
|
-
|
665
|
+
// checks
|
666
|
+
IStaking.StakeInfo storage stakeInfo = _stakeInfo[stakeNftId];
|
667
|
+
if (stakeInfo.lastUpdateIn.gtz()) {
|
668
|
+
revert ErrorStakingStoreStakeBalanceAlreadyInitialized(stakeNftId);
|
669
|
+
}
|
670
|
+
|
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);
|
264
683
|
|
265
|
-
|
684
|
+
// process stake amount
|
685
|
+
_stake(stakeNftId, stakeInfo, targetInfo, targetInfo.lockingPeriod, stakeAmount);
|
686
|
+
|
687
|
+
return stakeInfo.lockedUntil;
|
266
688
|
}
|
267
689
|
|
268
|
-
|
269
|
-
|
270
|
-
|
690
|
+
|
691
|
+
function stake(
|
692
|
+
NftId stakeNftId,
|
693
|
+
bool updateRewards,
|
694
|
+
bool restakeRewards,
|
695
|
+
Seconds additionalLockingPeriod,
|
696
|
+
Amount stakeAmount
|
271
697
|
)
|
272
698
|
external
|
273
699
|
restricted()
|
274
700
|
{
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
KEEP_STATE());
|
279
|
-
}
|
701
|
+
// checks
|
702
|
+
IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
|
703
|
+
IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
|
280
704
|
|
281
|
-
|
705
|
+
if (updateRewards) {
|
706
|
+
_updateRewards(stakeNftId, stakeInfo, targetInfo);
|
707
|
+
}
|
282
708
|
|
709
|
+
if (restakeRewards) {
|
710
|
+
_restakeRewards(stakeNftId, stakeInfo, targetInfo);
|
711
|
+
}
|
283
712
|
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
713
|
+
_stake(stakeNftId, stakeInfo, targetInfo, additionalLockingPeriod, stakeAmount);
|
714
|
+
}
|
715
|
+
|
716
|
+
|
717
|
+
function unstake(
|
718
|
+
NftId stakeNftId,
|
719
|
+
bool updateRewards,
|
720
|
+
bool restakeRewards,
|
721
|
+
Amount maxUnstakeAmount
|
288
722
|
)
|
289
723
|
external
|
290
724
|
restricted()
|
725
|
+
returns (Amount unstakedAmount)
|
291
726
|
{
|
292
|
-
|
727
|
+
// checks
|
728
|
+
IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
|
729
|
+
IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
|
293
730
|
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
_rewardBalance[nftId]); // unchanged reward balance
|
731
|
+
if (updateRewards) {
|
732
|
+
_updateRewards(stakeNftId, stakeInfo, targetInfo);
|
733
|
+
}
|
298
734
|
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
_rewardBalance[targetNftId]);
|
735
|
+
if (restakeRewards) {
|
736
|
+
_restakeRewards(stakeNftId, stakeInfo, targetInfo);
|
737
|
+
}
|
303
738
|
|
304
|
-
|
739
|
+
return _unstake(stakeNftId, stakeInfo, targetInfo, maxUnstakeAmount);
|
305
740
|
}
|
306
741
|
|
307
742
|
|
308
|
-
function
|
309
|
-
NftId nftId,
|
310
|
-
NftId targetNftId,
|
311
|
-
Amount rewardIncrementAmount
|
312
|
-
)
|
743
|
+
function updateRewards(NftId stakeNftId)
|
313
744
|
external
|
314
745
|
restricted()
|
315
746
|
{
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
// move all rewards to stake balance
|
321
|
-
_updateStakeBalance(
|
322
|
-
nftId,
|
323
|
-
stakeAmount + rewardAmount + rewardIncrementAmount, // new stake balance
|
324
|
-
AmountLib.zero()); // new reward balance
|
325
|
-
|
326
|
-
_updateTargetBalance(
|
327
|
-
targetNftId,
|
328
|
-
_stakeBalance[targetNftId] + rewardAmount + rewardIncrementAmount,
|
329
|
-
_rewardBalance[targetNftId] - rewardAmount);
|
330
|
-
|
331
|
-
emit LogStakingStoreRewardsRestaked(nftId, stakeAmount, rewardAmount, rewardIncrementAmount, _stakeBalance[nftId], lastUpdatedIn);
|
747
|
+
// checks
|
748
|
+
IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
|
749
|
+
IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
|
750
|
+
_updateRewards(stakeNftId, stakeInfo, targetInfo);
|
332
751
|
}
|
333
752
|
|
334
753
|
|
335
|
-
function
|
336
|
-
NftId
|
337
|
-
|
338
|
-
Amount rewardIncrementAmount
|
754
|
+
function restakeRewards(
|
755
|
+
NftId stakeNftId,
|
756
|
+
bool updateRewards
|
339
757
|
)
|
340
758
|
external
|
341
759
|
restricted()
|
342
760
|
{
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
_updateStakeBalance(
|
347
|
-
nftId,
|
348
|
-
_stakeBalance[nftId], // unchanged stake balance
|
349
|
-
_rewardBalance[nftId] + rewardIncrementAmount); // new reward balance
|
761
|
+
// checks
|
762
|
+
IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
|
763
|
+
IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
|
350
764
|
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
_rewardBalance[targetNftId] + rewardIncrementAmount);
|
765
|
+
if (updateRewards) {
|
766
|
+
_updateRewards(stakeNftId, stakeInfo, targetInfo);
|
767
|
+
}
|
355
768
|
|
356
|
-
|
769
|
+
_restakeRewards(stakeNftId, stakeInfo, targetInfo);
|
357
770
|
}
|
358
771
|
|
359
772
|
|
360
|
-
function
|
361
|
-
NftId
|
362
|
-
|
773
|
+
function claimRewards(
|
774
|
+
NftId stakeNftId,
|
775
|
+
bool updateRewards,
|
363
776
|
Amount maxClaimAmount
|
364
777
|
)
|
365
778
|
external
|
366
779
|
restricted()
|
367
780
|
returns (Amount claimedAmount)
|
368
781
|
{
|
369
|
-
|
782
|
+
// checks
|
783
|
+
IStaking.StakeInfo storage stakeInfo = _getAndVerifyStake(stakeNftId);
|
784
|
+
IStaking.TargetInfo storage targetInfo = _getAndVerifyTarget(stakeInfo.targetNftId);
|
370
785
|
|
371
|
-
|
372
|
-
|
786
|
+
if (updateRewards) {
|
787
|
+
_updateRewards(stakeNftId, stakeInfo, targetInfo);
|
788
|
+
}
|
373
789
|
|
374
|
-
|
375
|
-
|
376
|
-
nftId,
|
377
|
-
_stakeBalance[nftId], // unchanged stake balance
|
378
|
-
_rewardBalance[nftId] - claimedAmount); // new reward balance
|
790
|
+
claimedAmount = _claimRewards(stakeNftId, stakeInfo, targetInfo, maxClaimAmount);
|
791
|
+
}
|
379
792
|
|
380
|
-
|
381
|
-
targetNftId,
|
382
|
-
_stakeBalance[targetNftId],
|
383
|
-
_rewardBalance[targetNftId] - claimedAmount);
|
793
|
+
//--- view functions -----------------------------------------------//
|
384
794
|
|
385
|
-
|
795
|
+
function getStakingReader() external view returns (StakingReader stakingReader){
|
796
|
+
return _reader;
|
386
797
|
}
|
387
798
|
|
799
|
+
function getTargetManager() external view returns (ITargetLimitHandler targetLimitHandler ){
|
800
|
+
return _targetLimitHandler;
|
801
|
+
}
|
388
802
|
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
803
|
+
|
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
|
394
812
|
)
|
395
|
-
|
396
|
-
|
397
|
-
returns (
|
398
|
-
Amount unstakedAmount,
|
399
|
-
Amount claimedAmount
|
400
|
-
)
|
813
|
+
public
|
814
|
+
view
|
815
|
+
returns (Amount requiredStakeAmount)
|
401
816
|
{
|
402
|
-
|
817
|
+
address [] memory tokens = _targetToken[targetNftId];
|
818
|
+
if (tokens.length == 0) {
|
819
|
+
return AmountLib.zero();
|
820
|
+
}
|
403
821
|
|
404
|
-
//
|
405
|
-
|
406
|
-
|
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;
|
407
828
|
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
_rewardBalance[nftId] - claimedAmount); // new reward balance
|
829
|
+
for (uint256 i = 0; i < tokens.length; i++) {
|
830
|
+
token = tokens[i];
|
831
|
+
tvlAmount = _tvlInfo[targetNftId][token].tvlAmount;
|
832
|
+
if (tvlAmount.eqz()) { continue; }
|
413
833
|
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
834
|
+
stakingRate = _tokenInfo[targetChainId][token].stakingRate;
|
835
|
+
if (stakingRate.eqz()) { continue; }
|
836
|
+
|
837
|
+
requiredStakeAmount = requiredStakeAmount + tvlAmount.multiplyWith(stakingRate);
|
838
|
+
}
|
418
839
|
|
419
|
-
|
420
|
-
|
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
|
+
}
|
850
|
+
}
|
421
851
|
}
|
422
852
|
|
423
|
-
//--- view functions -----------------------------------------------//
|
424
853
|
|
425
|
-
|
426
|
-
|
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();
|
427
857
|
}
|
428
858
|
|
429
|
-
|
430
|
-
|
859
|
+
|
860
|
+
/// @dev Returns the stake infos for the specified stake.
|
861
|
+
function getStakeInfo(NftId stakeNftId) external view returns (IStaking.StakeInfo memory stakeInfo) {
|
862
|
+
return _stakeInfo[stakeNftId];
|
431
863
|
}
|
432
864
|
|
433
|
-
function getStakingRate(uint256 chainId, address token) external view returns (UFixed stakingRate) { return _stakingRate[chainId][token]; }
|
434
865
|
|
435
|
-
|
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
|
+
}
|
436
870
|
|
437
|
-
function getTotalValueLocked(NftId nftId, address token) external view returns (Amount tvlBalanceAmount) { return _tvlBalance[nftId][token]; }
|
438
|
-
function getRequiredStakeBalance(NftId nftId) external view returns (Amount requiredAmount) { return _tvlRequiredDip[nftId]; }
|
439
871
|
|
440
|
-
|
441
|
-
function
|
442
|
-
|
443
|
-
|
444
|
-
function getBalanceUpdatedIn(NftId nftId) external view returns (Blocknumber blocknumber) { return _lastUpdatedIn[nftId]; }
|
872
|
+
/// @dev Returns the target infos for the specified target.
|
873
|
+
function getTargetInfo(NftId targetNftId) external view returns (IStaking.TargetInfo memory targetInfo) {
|
874
|
+
return _targetInfo[targetNftId];
|
875
|
+
}
|
445
876
|
|
446
877
|
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
returns (
|
451
|
-
Amount stakeBalance,
|
452
|
-
Amount rewardBalance,
|
453
|
-
Amount reserveBalance,
|
454
|
-
Blocknumber lastUpdatedIn
|
455
|
-
)
|
456
|
-
{
|
457
|
-
stakeBalance = _stakeBalance[nftId];
|
458
|
-
rewardBalance = _rewardBalance[nftId];
|
459
|
-
reserveBalance = _reserveBalance[nftId];
|
460
|
-
lastUpdatedIn = _lastUpdatedIn[nftId];
|
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];
|
461
881
|
}
|
462
882
|
|
463
883
|
|
464
|
-
|
465
|
-
|
466
|
-
|
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
|
467
908
|
returns (
|
468
|
-
|
469
|
-
|
470
|
-
Timestamp lastUpdatedAt
|
909
|
+
IStaking.TargetInfo storage targetInfo,
|
910
|
+
Blocknumber lastUpdatedIn
|
471
911
|
)
|
472
912
|
{
|
473
|
-
|
474
|
-
|
475
|
-
|
913
|
+
// checks
|
914
|
+
targetInfo = _getAndVerifyTarget(targetNftId);
|
915
|
+
lastUpdatedIn = targetInfo.lastUpdateIn;
|
916
|
+
targetInfo.lastUpdateIn = BlocknumberLib.current();
|
476
917
|
}
|
477
918
|
|
478
|
-
//--- private functions -------------------------------------------//
|
479
919
|
|
480
920
|
function _createTarget(
|
481
921
|
NftId targetNftId,
|
482
|
-
|
922
|
+
ObjectType objectType,
|
923
|
+
Seconds lockingPeriod,
|
924
|
+
UFixed rewardRate,
|
925
|
+
bool checkParameters
|
483
926
|
)
|
484
927
|
private
|
485
928
|
{
|
486
|
-
|
487
|
-
|
488
|
-
|
929
|
+
// checks
|
930
|
+
if (checkParameters) {
|
931
|
+
TargetManagerLib.checkTargetParameters(
|
932
|
+
_registry,
|
933
|
+
_reader,
|
934
|
+
targetNftId,
|
935
|
+
objectType,
|
936
|
+
lockingPeriod,
|
937
|
+
rewardRate);
|
938
|
+
}
|
489
939
|
|
490
|
-
//
|
491
|
-
|
492
|
-
|
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
|
+
}
|
493
968
|
|
494
|
-
|
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);
|
495
986
|
}
|
496
987
|
|
497
|
-
|
988
|
+
|
989
|
+
function _spendRewardReserves(
|
498
990
|
NftId targetNftId,
|
499
|
-
|
991
|
+
IStaking.TargetInfo storage targetInfo,
|
992
|
+
Amount dipAmount
|
500
993
|
)
|
501
994
|
private
|
502
|
-
returns (Blocknumber lastUpdatedIn)
|
503
995
|
{
|
504
|
-
|
505
|
-
revert ErrorStakingStoreNotTarget(targetNftId);
|
506
|
-
}
|
507
|
-
|
508
|
-
lastUpdatedIn = _lastUpdatedIn[targetNftId];
|
996
|
+
Blocknumber lastUpdateIn = _decreaseReserves(targetNftId, targetInfo, dipAmount);
|
509
997
|
|
510
|
-
|
511
|
-
|
998
|
+
// logging
|
999
|
+
emit IStaking.LogStakingRewardReservesSpent(
|
1000
|
+
targetNftId,
|
1001
|
+
dipAmount,
|
1002
|
+
targetInfo.reserveAmount,
|
1003
|
+
lastUpdateIn);
|
512
1004
|
}
|
513
1005
|
|
514
1006
|
|
515
|
-
function
|
1007
|
+
function _decreaseReserves(
|
1008
|
+
NftId targetNftId,
|
1009
|
+
IStaking.TargetInfo storage targetInfo,
|
1010
|
+
Amount dipAmount
|
1011
|
+
)
|
516
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);
|
1023
|
+
}
|
1024
|
+
|
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)
|
517
1038
|
{
|
518
|
-
if
|
519
|
-
|
1039
|
+
// return if reward rate is zero
|
1040
|
+
if (targetInfo.rewardRate.eqz()) {
|
1041
|
+
return rewardIncreaseAmount;
|
520
1042
|
}
|
521
1043
|
|
522
|
-
//
|
523
|
-
|
524
|
-
|
525
|
-
_reserveBalance[nftId] = AmountLib.zero();
|
1044
|
+
// get seconds since last update on stake
|
1045
|
+
Seconds duration = SecondsLib.toSeconds(
|
1046
|
+
block.timestamp - stakeInfo.lastUpdateAt.toInt());
|
526
1047
|
|
527
|
-
//
|
528
|
-
|
529
|
-
|
1048
|
+
// return if duration is zero
|
1049
|
+
if (duration.eqz()) {
|
1050
|
+
return AmountLib.zero();
|
1051
|
+
}
|
1052
|
+
|
1053
|
+
// calculate reward increase since
|
1054
|
+
rewardIncreaseAmount = StakingLib.calculateRewardAmount(
|
1055
|
+
targetInfo.rewardRate,
|
1056
|
+
duration,
|
1057
|
+
stakeInfo.stakedAmount);
|
1058
|
+
|
1059
|
+
// update target + stake
|
1060
|
+
targetInfo.rewardAmount = targetInfo.rewardAmount + rewardIncreaseAmount;
|
1061
|
+
stakeInfo.rewardAmount = stakeInfo.rewardAmount + rewardIncreaseAmount;
|
1062
|
+
Blocknumber lastUpdateIn = _setLastUpdatesToCurrent(stakeInfo, targetInfo);
|
1063
|
+
|
1064
|
+
// logging
|
1065
|
+
emit IStaking.LogStakingStakeRewardsUpdated(
|
1066
|
+
stakeNftId,
|
1067
|
+
rewardIncreaseAmount,
|
1068
|
+
stakeInfo.stakedAmount,
|
1069
|
+
stakeInfo.rewardAmount,
|
1070
|
+
stakeInfo.lockedUntil,
|
1071
|
+
lastUpdateIn);
|
530
1072
|
}
|
531
1073
|
|
532
1074
|
|
533
|
-
function
|
534
|
-
|
1075
|
+
function _restakeRewards(
|
1076
|
+
NftId stakeNftId,
|
1077
|
+
IStaking.StakeInfo storage stakeInfo,
|
1078
|
+
IStaking.TargetInfo storage targetInfo
|
1079
|
+
)
|
1080
|
+
internal
|
1081
|
+
returns (Amount restakeAmount)
|
535
1082
|
{
|
536
|
-
|
537
|
-
|
1083
|
+
restakeAmount = stakeInfo.rewardAmount;
|
1084
|
+
|
1085
|
+
// return if reward amount is zero
|
1086
|
+
if (restakeAmount.eqz()) {
|
1087
|
+
return restakeAmount;
|
538
1088
|
}
|
539
1089
|
|
540
|
-
//
|
541
|
-
|
542
|
-
|
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);
|
1111
|
+
}
|
1112
|
+
|
543
1113
|
|
544
|
-
|
545
|
-
|
546
|
-
|
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);
|
547
1151
|
}
|
548
1152
|
|
549
1153
|
|
550
|
-
function
|
1154
|
+
function _claimRewards(
|
551
1155
|
NftId stakeNftId,
|
552
|
-
|
553
|
-
|
1156
|
+
IStaking.StakeInfo storage stakeInfo,
|
1157
|
+
IStaking.TargetInfo storage targetInfo,
|
1158
|
+
Amount maxClaimAmount
|
554
1159
|
)
|
555
|
-
|
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)
|
556
1198
|
{
|
557
|
-
|
558
|
-
|
1199
|
+
unstakedAmount = AmountLib.min(maxUnstakeAmount, stakeInfo.stakedAmount);
|
1200
|
+
|
1201
|
+
// return if no stakes to claim
|
1202
|
+
if (unstakedAmount.eqz()) {
|
1203
|
+
return unstakedAmount;
|
1204
|
+
}
|
559
1205
|
|
560
|
-
|
561
|
-
|
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);
|
562
1224
|
}
|
563
1225
|
|
564
1226
|
|
565
|
-
function
|
566
|
-
|
567
|
-
|
568
|
-
|
1227
|
+
function _setLastUpdatesToCurrent(
|
1228
|
+
IStaking.StakeInfo storage stakeInfo,
|
1229
|
+
IStaking.TargetInfo storage targetInfo
|
1230
|
+
)
|
1231
|
+
internal
|
1232
|
+
returns (Blocknumber lastUpdateIn)
|
1233
|
+
{
|
1234
|
+
targetInfo.lastUpdateIn = BlocknumberLib.current();
|
1235
|
+
lastUpdateIn = _setStakeLastUpdatesToCurrent(stakeInfo);
|
1236
|
+
}
|
1237
|
+
|
1238
|
+
|
1239
|
+
function _setStakeLastUpdatesToCurrent(
|
1240
|
+
IStaking.StakeInfo storage stakeInfo
|
1241
|
+
)
|
1242
|
+
internal
|
1243
|
+
returns (Blocknumber lastUpdateIn)
|
1244
|
+
{
|
1245
|
+
lastUpdateIn = stakeInfo.lastUpdateIn;
|
1246
|
+
stakeInfo.lastUpdateIn = BlocknumberLib.current();
|
1247
|
+
stakeInfo.lastUpdateAt = TimestampLib.current();
|
1248
|
+
}
|
1249
|
+
|
1250
|
+
//--- private stake and target functions --------------------------------//
|
1251
|
+
|
1252
|
+
|
1253
|
+
function _getAndVerifyStake(
|
1254
|
+
NftId stakeNftId
|
569
1255
|
)
|
570
1256
|
private
|
1257
|
+
view
|
1258
|
+
returns (
|
1259
|
+
IStaking.StakeInfo storage stakeInfo
|
1260
|
+
)
|
571
1261
|
{
|
572
|
-
|
573
|
-
|
1262
|
+
stakeInfo = _stakeInfo[stakeNftId];
|
1263
|
+
if (stakeInfo.lastUpdateIn.eqz()) {
|
1264
|
+
revert ErrorStakingStoreStakeNotInitialized(stakeNftId);
|
1265
|
+
}
|
1266
|
+
}
|
1267
|
+
|
574
1268
|
|
575
|
-
|
576
|
-
|
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
|
577
1284
|
}
|
578
1285
|
|
579
|
-
|
1286
|
+
|
1287
|
+
function _getAndVerifyTarget(
|
1288
|
+
NftId targetNftId
|
1289
|
+
)
|
580
1290
|
private
|
581
1291
|
view
|
582
|
-
returns (
|
1292
|
+
returns (
|
1293
|
+
IStaking.TargetInfo storage targetInfo
|
1294
|
+
)
|
583
1295
|
{
|
584
|
-
|
1296
|
+
targetInfo = _targetInfo[targetNftId];
|
585
1297
|
|
586
|
-
if (
|
587
|
-
revert
|
1298
|
+
if (targetInfo.lastUpdateIn.eqz()) {
|
1299
|
+
revert ErrorStakingStoreTargetNotInitialized(targetNftId);
|
588
1300
|
}
|
589
1301
|
}
|
590
1302
|
|
591
1303
|
|
592
|
-
function
|
593
|
-
NftId targetNftId
|
594
|
-
address token
|
1304
|
+
function _getAndVerifyLimit(
|
1305
|
+
NftId targetNftId
|
595
1306
|
)
|
596
1307
|
private
|
597
1308
|
view
|
598
1309
|
returns (
|
599
|
-
|
600
|
-
Amount oldBalance,
|
601
|
-
Amount oldDipBalance
|
1310
|
+
IStaking.LimitInfo storage limitInfo
|
602
1311
|
)
|
603
1312
|
{
|
604
|
-
|
1313
|
+
limitInfo = _limitInfo[targetNftId];
|
605
1314
|
|
606
|
-
if (
|
607
|
-
revert
|
1315
|
+
if (limitInfo.lastUpdateIn.eqz()) {
|
1316
|
+
revert ErrorStakingStoreLimitNotInitialized(targetNftId);
|
608
1317
|
}
|
1318
|
+
}
|
1319
|
+
|
1320
|
+
//--- private tvl functions ------------------------------------------------//
|
609
1321
|
|
610
|
-
|
611
|
-
|
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);
|
1330
|
+
}
|
1331
|
+
|
1332
|
+
// set tvl balances to 0 and update last updated in
|
1333
|
+
info.tvlAmount = AmountLib.zero();
|
1334
|
+
info.lastUpdateIn = BlocknumberLib.current();
|
1335
|
+
}
|
1336
|
+
|
1337
|
+
|
1338
|
+
function _updateTvlBalance(
|
1339
|
+
NftId targetNftId,
|
1340
|
+
address token,
|
1341
|
+
Amount newTvlAmount
|
1342
|
+
)
|
1343
|
+
private
|
1344
|
+
returns (
|
1345
|
+
Amount oldTvlAmount,
|
1346
|
+
Blocknumber lastUpdatedIn
|
1347
|
+
)
|
1348
|
+
{
|
1349
|
+
IStaking.TvlInfo storage tvlInfo = _getAndVerifyTvl(targetNftId, token);
|
1350
|
+
oldTvlAmount = tvlInfo.tvlAmount;
|
1351
|
+
lastUpdatedIn = tvlInfo.lastUpdateIn;
|
1352
|
+
|
1353
|
+
tvlInfo.tvlAmount = newTvlAmount;
|
1354
|
+
tvlInfo.lastUpdateIn = BlocknumberLib.current();
|
1355
|
+
}
|
1356
|
+
|
1357
|
+
|
1358
|
+
function _getAndVerifyTvl(NftId targetNftId, address token)
|
1359
|
+
private
|
1360
|
+
view
|
1361
|
+
returns (IStaking.TvlInfo storage tvlInfo)
|
1362
|
+
{
|
1363
|
+
tvlInfo = _tvlInfo[targetNftId][token];
|
1364
|
+
if (tvlInfo.lastUpdateIn.eqz()) {
|
1365
|
+
revert ErrorStakingStoreTvlBalanceNotInitialized(targetNftId, token);
|
1366
|
+
}
|
612
1367
|
}
|
613
1368
|
}
|