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