@etherisc/gif-next 0.0.2-ccfa4c7-304 → 0.0.2-cd48412-522
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 +63 -1
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +1 -1
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +106 -38
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +91 -45
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +1 -1
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +58 -6
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +272 -102
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +662 -46
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +2 -2
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +227 -52
- 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 +180 -32
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +90 -17
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +246 -16
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +420 -27
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +64 -152
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +226 -65
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +21 -98
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +378 -149
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +140 -78
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +20 -97
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +232 -19
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +109 -110
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +225 -64
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +145 -134
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +225 -64
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +83 -177
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +225 -64
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +37 -71
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +130 -148
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +225 -64
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +333 -190
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +225 -64
- package/artifacts/contracts/instance/BaseStore.sol/BaseStore.dbg.json +4 -0
- package/artifacts/contracts/{shared/IKeyValueStore.sol/IKeyValueStore.json → instance/BaseStore.sol/BaseStore.json} +51 -229
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
- 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 +368 -34
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +295 -5
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +419 -96
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +591 -343
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +194 -73
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +569 -513
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +321 -31
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +80 -42
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1316 -2015
- 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 +1 -1
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +101 -88
- 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 +2 -2
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +20 -20
- 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 +29 -41
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +239 -61
- 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 +19 -31
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +29 -0
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +19 -31
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +83 -38
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +96 -50
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +59 -79
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +225 -64
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +300 -123
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +124 -58
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +186 -33
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +29 -41
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +238 -19
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +29 -41
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +100 -34
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +338 -79
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +121 -63
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +238 -52
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +96 -42
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +46 -58
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +225 -64
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +142 -102
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +113 -75
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +187 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +50 -10
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +55 -0
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +50 -0
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +40 -52
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +224 -18
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +157 -86
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +511 -21
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +118 -72
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +114 -112
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +99 -69
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +40 -52
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +258 -44
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +84 -42
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +33 -22
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +29 -0
- package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +71 -60
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +385 -243
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +266 -70
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +41 -12
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +76 -38
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +389 -191
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +149 -97
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +437 -26
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +119 -59
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +19 -31
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +209 -190
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +113 -63
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +76 -41
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +2 -2
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +19 -31
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +118 -123
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -31
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +19 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +19 -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 +29 -0
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -31
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -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 +21 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +29 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +2 -2
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +2 -2
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1385 -150
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +97 -117
- 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 +1471 -213
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +77 -76
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +123 -72
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +296 -152
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +131 -167
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +84 -54
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +1615 -815
- 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 +153 -91
- 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 +10 -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 +2 -2
- 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 +93 -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 +1 -1
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +2 -2
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
- 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 +6 -6
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
- 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 +2 -2
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +39 -218
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +45 -2
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- 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 +60 -36
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- 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 +65 -27
- 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 +15 -3
- package/contracts/accounting/IAccountingService.sol +4 -2
- package/contracts/authorization/AccessAdmin.sol +264 -188
- package/contracts/authorization/AccessAdminLib.sol +222 -9
- package/contracts/authorization/Authorization.sol +38 -234
- package/contracts/authorization/IAccess.sol +25 -7
- package/contracts/authorization/IAccessAdmin.sol +19 -45
- package/contracts/authorization/IAuthorization.sol +3 -57
- package/contracts/authorization/IServiceAuthorization.sol +55 -17
- package/contracts/authorization/ServiceAuthorization.sol +248 -34
- package/contracts/distribution/BasicDistribution.sol +7 -8
- package/contracts/distribution/BasicDistributionAuthorization.sol +11 -4
- package/contracts/distribution/Distribution.sol +12 -56
- package/contracts/distribution/DistributionService.sol +126 -63
- package/contracts/distribution/IDistributionComponent.sol +3 -10
- package/contracts/distribution/IDistributionService.sol +20 -8
- package/contracts/examples/fire/FirePool.sol +0 -4
- package/contracts/examples/fire/FireProduct.sol +6 -10
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +4 -8
- package/contracts/examples/unpermissioned/SimpleOracle.sol +4 -8
- package/contracts/examples/unpermissioned/SimplePool.sol +0 -4
- package/contracts/examples/unpermissioned/SimpleProduct.sol +83 -23
- package/contracts/instance/BaseStore.sol +93 -0
- package/contracts/instance/IBaseStore.sol +37 -0
- package/contracts/instance/IInstance.sol +57 -6
- package/contracts/instance/IInstanceService.sol +42 -7
- package/contracts/instance/Instance.sol +112 -57
- package/contracts/instance/InstanceAdmin.sol +164 -235
- package/contracts/instance/InstanceAuthorizationV3.sol +101 -61
- package/contracts/instance/InstanceReader.sol +354 -392
- package/contracts/instance/InstanceService.sol +186 -134
- package/contracts/instance/InstanceStore.sol +153 -128
- package/contracts/instance/ProductStore.sol +290 -0
- package/contracts/instance/RiskSet.sol +10 -2
- package/contracts/instance/TargetNames.sol +10 -0
- package/contracts/instance/base/BalanceStore.sol +4 -6
- package/contracts/instance/base/ObjectLifecycle.sol +2 -6
- package/contracts/instance/module/IBundle.sol +6 -5
- package/contracts/instance/module/IComponents.sol +15 -6
- package/contracts/instance/module/IDistribution.sol +17 -7
- package/contracts/instance/module/IPolicy.sol +28 -8
- package/contracts/instance/module/IRisk.sol +2 -0
- package/contracts/oracle/BasicOracle.sol +3 -6
- package/contracts/oracle/BasicOracleAuthorization.sol +18 -2
- package/contracts/oracle/IOracle.sol +9 -4
- package/contracts/oracle/Oracle.sol +4 -8
- package/contracts/oracle/OracleService.sol +8 -8
- package/contracts/pool/BasicPool.sol +4 -18
- package/contracts/pool/BasicPoolAuthorization.sol +10 -5
- package/contracts/pool/BundleService.sol +34 -43
- package/contracts/pool/IBundleService.sol +14 -13
- package/contracts/pool/IPoolService.sol +7 -2
- package/contracts/pool/Pool.sol +6 -20
- package/contracts/pool/PoolLib.sol +127 -2
- package/contracts/pool/PoolService.sol +41 -184
- package/contracts/product/ApplicationService.sol +69 -11
- package/contracts/product/BasicProduct.sol +2 -5
- package/contracts/product/BasicProductAuthorization.sol +11 -4
- package/contracts/product/ClaimService.sol +99 -105
- package/contracts/product/IApplicationService.sol +23 -2
- package/contracts/product/IClaimService.sol +5 -4
- package/contracts/product/IPolicyService.sol +9 -2
- package/contracts/product/IPricingService.sol +1 -0
- package/contracts/product/IRiskService.sol +21 -3
- package/contracts/product/PolicyService.sol +40 -59
- package/contracts/product/PolicyServiceLib.sol +79 -5
- package/contracts/product/PricingService.sol +33 -31
- package/contracts/product/Product.sol +40 -18
- package/contracts/product/RiskService.sol +57 -12
- package/contracts/registry/IRegistry.sol +15 -9
- package/contracts/registry/IRelease.sol +6 -3
- package/contracts/registry/Registry.sol +15 -9
- package/contracts/registry/RegistryAdmin.sol +33 -100
- package/contracts/registry/RegistryAuthorization.sol +121 -52
- package/contracts/registry/RegistryService.sol +1 -1
- package/contracts/registry/ReleaseAdmin.sol +42 -100
- package/contracts/registry/ReleaseRegistry.sol +20 -12
- package/contracts/registry/ServiceAuthorizationV3.sol +43 -32
- package/contracts/registry/TokenRegistry.sol +56 -52
- package/contracts/shared/Component.sol +16 -33
- package/contracts/shared/ComponentService.sol +249 -247
- package/contracts/shared/ContractLib.sol +106 -75
- package/contracts/shared/IComponent.sol +1 -4
- package/contracts/shared/IComponentService.sol +17 -16
- package/contracts/shared/INftOwnable.sol +2 -0
- package/contracts/shared/IRegisterable.sol +0 -1
- package/contracts/shared/InstanceLinkedComponent.sol +6 -11
- package/contracts/shared/NftOwnable.sol +3 -1
- package/contracts/shared/PolicyHolder.sol +3 -2
- package/contracts/shared/Service.sol +6 -4
- package/contracts/staking/IStaking.sol +262 -70
- package/contracts/staking/IStakingService.sol +39 -84
- package/contracts/staking/ITargetLimitHandler.sol +17 -0
- package/contracts/staking/Staking.sol +470 -219
- package/contracts/staking/StakingLib.sol +38 -124
- package/contracts/staking/StakingManager.sol +4 -3
- package/contracts/staking/StakingReader.sol +62 -71
- package/contracts/staking/StakingService.sol +42 -185
- package/contracts/staking/StakingServiceManager.sol +1 -0
- package/contracts/staking/StakingStore.sol +1093 -331
- package/contracts/staking/TargetHandler.sol +132 -0
- package/contracts/staking/TargetManagerLib.sol +69 -46
- package/contracts/type/Amount.sol +4 -0
- package/contracts/type/Blocknumber.sol +15 -15
- package/contracts/type/ChainId.sol +101 -0
- package/contracts/type/Fee.sol +8 -8
- package/contracts/type/NftId.sol +3 -3
- package/contracts/type/ObjectType.sol +16 -3
- package/contracts/type/RoleId.sol +57 -59
- package/contracts/type/Seconds.sol +19 -0
- package/contracts/type/String.sol +12 -0
- package/contracts/type/Timestamp.sol +4 -2
- package/contracts/type/UFixed.sol +28 -10
- package/contracts/upgradeability/IVersionable.sol +3 -0
- package/contracts/upgradeability/ProxyManager.sol +25 -11
- package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +12 -2
- package/contracts/upgradeability/Versionable.sol +6 -3
- package/package.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +0 -4
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +0 -24
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +0 -485
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +0 -538
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +0 -4
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +0 -205
- package/contracts/shared/ComponentVerifyingService.sol +0 -128
- package/contracts/shared/IKeyValueStore.sol +0 -54
- package/contracts/shared/KeyValueStore.sol +0 -131
- package/contracts/staking/StakingLifecycle.sol +0 -23
@@ -6,28 +6,31 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER
|
|
6
6
|
import {IRegistry} from "../registry/IRegistry.sol";
|
7
7
|
import {IRelease} from "../registry/IRelease.sol";
|
8
8
|
import {IStaking} from "./IStaking.sol";
|
9
|
+
import {IStakingService} from "./IStakingService.sol";
|
10
|
+
import {ITargetLimitHandler} from "./ITargetLimitHandler.sol";
|
9
11
|
import {IVersionable} from "../upgradeability/IVersionable.sol";
|
10
12
|
|
11
13
|
import {Amount, AmountLib} from "../type/Amount.sol";
|
14
|
+
import {Blocknumber} from "../type/Blocknumber.sol";
|
15
|
+
import {ChainId, ChainIdLib} from "../type/ChainId.sol";
|
12
16
|
import {Component} from "../shared/Component.sol";
|
13
17
|
import {IComponent} from "../shared/IComponent.sol";
|
14
|
-
import {IComponentService} from "../shared/IComponentService.sol";
|
15
18
|
import {NftId} from "../type/NftId.sol";
|
16
|
-
import {ObjectType, STAKE, STAKING} from "../type/ObjectType.sol";
|
17
|
-
import {Seconds} from "../type/Seconds.sol";
|
19
|
+
import {ObjectType, PROTOCOL, INSTANCE, STAKE, STAKING, TARGET} from "../type/ObjectType.sol";
|
20
|
+
import {Seconds, SecondsLib} from "../type/Seconds.sol";
|
18
21
|
import {Registerable} from "../shared/Registerable.sol";
|
19
22
|
import {StakingLib} from "./StakingLib.sol";
|
20
23
|
import {StakingReader} from "./StakingReader.sol";
|
21
24
|
import {StakingStore} from "./StakingStore.sol";
|
22
|
-
import {
|
23
|
-
import {Timestamp} from "../type/Timestamp.sol";
|
25
|
+
import {TargetHandler} from "./TargetHandler.sol";
|
24
26
|
import {TokenHandler} from "../shared/TokenHandler.sol";
|
25
27
|
import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
|
26
28
|
import {TokenRegistry} from "../registry/TokenRegistry.sol";
|
27
|
-
import {UFixed} from "../type/UFixed.sol";
|
29
|
+
import {UFixed, UFixedLib} from "../type/UFixed.sol";
|
28
30
|
import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
|
29
31
|
import {Versionable} from "../upgradeability/Versionable.sol";
|
30
32
|
|
33
|
+
|
31
34
|
contract Staking is
|
32
35
|
Component,
|
33
36
|
Versionable,
|
@@ -41,116 +44,317 @@ contract Staking is
|
|
41
44
|
struct StakingStorage {
|
42
45
|
TokenRegistry _tokenRegistry;
|
43
46
|
TokenHandler _tokenHandler;
|
47
|
+
IStakingService _stakingService;
|
48
|
+
TargetHandler _targetHandler;
|
44
49
|
StakingStore _store;
|
45
50
|
StakingReader _reader;
|
46
51
|
NftId _protocolNftId;
|
47
52
|
}
|
48
53
|
|
49
54
|
|
50
|
-
modifier
|
51
|
-
|
52
|
-
revert ErrorStakingNotStake(stakeNftId);
|
53
|
-
}
|
55
|
+
modifier onlyStakeOwner(NftId stakeNftId) {
|
56
|
+
_checkTypeAndOwner(stakeNftId, STAKE(), true);
|
54
57
|
_;
|
55
58
|
}
|
56
59
|
|
57
60
|
|
58
61
|
modifier onlyTarget(NftId targetNftId) {
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
+
_checkTypeAndOwner(targetNftId, TARGET(), false);
|
63
|
+
_;
|
64
|
+
}
|
65
|
+
|
66
|
+
|
67
|
+
modifier onlyTargetOwner(NftId targetNftId) {
|
68
|
+
_checkTypeAndOwner(targetNftId, TARGET(), true);
|
62
69
|
_;
|
63
70
|
}
|
64
71
|
|
72
|
+
//--- contract intitialization -------------------------------------------
|
73
|
+
|
65
74
|
function initializeTokenHandler()
|
66
75
|
external
|
76
|
+
virtual
|
67
77
|
{
|
68
78
|
if (msg.sender != address(getRegistry())) {
|
69
79
|
revert ErrorStakingNotRegistry(msg.sender);
|
70
80
|
}
|
71
81
|
|
72
82
|
StakingStorage storage $ = _getStakingStorage();
|
83
|
+
address dipToken = _getStakingStorage()._tokenRegistry.getDipTokenAddress();
|
73
84
|
$._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
|
74
85
|
address(getRegistry()),
|
75
86
|
address(this),
|
76
|
-
|
87
|
+
dipToken,
|
77
88
|
getRegistry().getAuthority());
|
78
89
|
}
|
79
90
|
|
80
91
|
|
81
|
-
|
82
|
-
|
92
|
+
//--- staking owner functions -------------------------------------------//
|
93
|
+
|
94
|
+
function setSupportInfo(
|
95
|
+
ObjectType targetType,
|
96
|
+
bool isSupported,
|
97
|
+
bool allowNewTargets,
|
98
|
+
bool allowCrossChain,
|
99
|
+
Amount minStakingAmount,
|
100
|
+
Amount maxStakingAmount,
|
101
|
+
Seconds minLockingPeriod,
|
102
|
+
Seconds maxLockingPeriod,
|
103
|
+
UFixed minRewardRate,
|
104
|
+
UFixed maxRewardRate
|
105
|
+
)
|
106
|
+
external
|
107
|
+
virtual
|
108
|
+
restricted()
|
109
|
+
onlyOwner()
|
110
|
+
{
|
111
|
+
StakingStorage storage $ = _getStakingStorage();
|
112
|
+
$._store.setSupportInfo(
|
113
|
+
targetType,
|
114
|
+
isSupported,
|
115
|
+
allowNewTargets,
|
116
|
+
allowCrossChain,
|
117
|
+
minStakingAmount,
|
118
|
+
maxStakingAmount,
|
119
|
+
minLockingPeriod,
|
120
|
+
maxLockingPeriod,
|
121
|
+
minRewardRate,
|
122
|
+
maxRewardRate);
|
123
|
+
}
|
124
|
+
|
125
|
+
|
126
|
+
/// @inheritdoc IStaking
|
127
|
+
function setUpdateTriggers(
|
128
|
+
uint16 tvlUpdatesTrigger,
|
129
|
+
UFixed minTvlRatioTrigger
|
130
|
+
)
|
131
|
+
external
|
132
|
+
restricted()
|
133
|
+
{
|
134
|
+
StakingStorage storage $ = _getStakingStorage();
|
135
|
+
$._targetHandler.setUpdateTriggers(tvlUpdatesTrigger, minTvlRatioTrigger);
|
136
|
+
}
|
137
|
+
|
138
|
+
|
139
|
+
/// @inheritdoc IStaking
|
140
|
+
function setProtocolLockingPeriod(Seconds newLockingPeriod)
|
141
|
+
external
|
142
|
+
virtual
|
83
143
|
restricted()
|
84
144
|
onlyOwner()
|
85
145
|
{
|
86
|
-
|
146
|
+
StakingStorage storage $ = _getStakingStorage();
|
147
|
+
$._store.setLockingPeriod($._protocolNftId, newLockingPeriod);
|
87
148
|
}
|
88
149
|
|
89
150
|
|
90
|
-
|
91
|
-
function
|
151
|
+
/// @inheritdoc IStaking
|
152
|
+
function setProtocolRewardRate(UFixed newRewardRate)
|
92
153
|
external
|
93
154
|
virtual
|
155
|
+
restricted()
|
94
156
|
onlyOwner()
|
95
157
|
{
|
158
|
+
StakingStorage storage $ = _getStakingStorage();
|
159
|
+
$._store.setRewardRate($._protocolNftId, newRewardRate);
|
160
|
+
}
|
161
|
+
|
162
|
+
|
163
|
+
/// @inheritdoc IStaking
|
164
|
+
function setStakingRate(
|
165
|
+
ChainId chainId,
|
166
|
+
address token,
|
167
|
+
UFixed stakingRate
|
168
|
+
)
|
169
|
+
external
|
170
|
+
virtual
|
171
|
+
restricted()
|
172
|
+
onlyOwner()
|
173
|
+
{
|
174
|
+
(
|
175
|
+
UFixed oldStakingRate,
|
176
|
+
Blocknumber lastUpdateIn
|
177
|
+
) = _getStakingStorage()._store.setStakingRate(chainId, token, stakingRate);
|
178
|
+
|
179
|
+
emit LogStakingStakingRateSet(chainId, token, stakingRate, oldStakingRate, lastUpdateIn);
|
180
|
+
}
|
181
|
+
|
182
|
+
|
183
|
+
/// @inheritdoc IStaking
|
184
|
+
function setStakingService(VersionPart release)
|
185
|
+
external
|
186
|
+
virtual
|
187
|
+
restricted()
|
188
|
+
onlyOwner()
|
189
|
+
{
|
190
|
+
// effects
|
191
|
+
StakingStorage storage $ = _getStakingStorage();
|
192
|
+
address oldStakingService = address($._stakingService);
|
193
|
+
$._stakingService = StakingLib.checkAndGetStakingService(getRegistry(), release);
|
194
|
+
|
195
|
+
emit LogStakingStakingServiceSet(address($._stakingService), release, oldStakingService);
|
196
|
+
}
|
197
|
+
|
198
|
+
|
199
|
+
/// @inheritdoc IStaking
|
200
|
+
function setStakingReader(address reader)
|
201
|
+
external
|
202
|
+
virtual
|
203
|
+
restricted()
|
204
|
+
onlyOwner()
|
205
|
+
{
|
206
|
+
StakingReader stakingReader = StakingReader(reader);
|
207
|
+
|
96
208
|
if(stakingReader.getStaking() != IStaking(this)) {
|
97
209
|
revert ErrorStakingStakingReaderStakingMismatch(address(stakingReader.getStaking()));
|
98
210
|
}
|
99
211
|
|
100
|
-
_getStakingStorage()
|
212
|
+
StakingStorage storage $ = _getStakingStorage();
|
213
|
+
$._reader = stakingReader;
|
214
|
+
$._store.setStakingReader(reader);
|
101
215
|
}
|
102
216
|
|
103
217
|
|
104
|
-
//
|
105
|
-
|
218
|
+
// TODO move to TargetHandler?
|
219
|
+
/// @inheritdoc IStaking
|
220
|
+
function addToken(
|
221
|
+
ChainId chainId,
|
222
|
+
address token
|
223
|
+
)
|
106
224
|
external
|
107
225
|
virtual
|
226
|
+
restricted()
|
227
|
+
onlyOwner()
|
228
|
+
{
|
229
|
+
_addToken(
|
230
|
+
_getStakingStorage(), chainId, token);
|
231
|
+
}
|
232
|
+
|
233
|
+
|
234
|
+
/// @inheritdoc IStaking
|
235
|
+
function approveTokenHandler(IERC20Metadata token, Amount amount)
|
236
|
+
public
|
237
|
+
virtual
|
238
|
+
restricted()
|
108
239
|
onlyOwner()
|
109
240
|
{
|
110
241
|
StakingStorage storage $ = _getStakingStorage();
|
111
|
-
|
112
|
-
|
113
|
-
|
242
|
+
Amount oldAllowanceAmount = AmountLib.toAmount(
|
243
|
+
token.allowance(
|
244
|
+
address(this),
|
245
|
+
address($._tokenHandler)));
|
246
|
+
|
247
|
+
// staking token handler approval via its own implementation in staking service
|
248
|
+
$._stakingService.approveTokenHandler(
|
249
|
+
token,
|
250
|
+
amount);
|
251
|
+
|
252
|
+
emit LogStakingTokenHandlerApproved(address(token), amount, oldAllowanceAmount);
|
253
|
+
}
|
254
|
+
|
255
|
+
//--- target management -------------------------------------------------//
|
256
|
+
|
257
|
+
|
258
|
+
/// @inheritdoc IStaking
|
259
|
+
function refillRewardReserves(NftId targetNftId, Amount dipAmount)
|
260
|
+
external
|
261
|
+
virtual
|
262
|
+
restricted()
|
263
|
+
onlyTarget(targetNftId)
|
264
|
+
returns (Amount newBalance)
|
265
|
+
{
|
266
|
+
address transferFrom = msg.sender;
|
267
|
+
_refillRewardReserves(targetNftId, dipAmount, transferFrom);
|
268
|
+
}
|
269
|
+
|
270
|
+
|
271
|
+
/// @inheritdoc IStaking
|
272
|
+
function withdrawRewardReserves(NftId targetNftId, Amount dipAmount)
|
273
|
+
external
|
274
|
+
virtual
|
275
|
+
restricted()
|
276
|
+
onlyTarget(targetNftId)
|
277
|
+
returns (Amount newBalance)
|
278
|
+
{
|
279
|
+
address transferTo;
|
280
|
+
|
281
|
+
// case 1: protocol target: staking owner is recipient
|
282
|
+
if (targetNftId == getRegistry().getProtocolNftId()) {
|
283
|
+
// verify that the caller is the staking owner
|
284
|
+
transferTo = getOwner();
|
285
|
+
if (msg.sender != transferTo) {
|
286
|
+
revert ErrorStakingNotStakingOwner();
|
287
|
+
}
|
288
|
+
|
289
|
+
// case 2: same chain target: target owner is recipient
|
290
|
+
} else if (ChainIdLib.isCurrentChain(targetNftId)) {
|
291
|
+
// verify that the caller is the target owner
|
292
|
+
transferTo = getRegistry().ownerOf(targetNftId);
|
293
|
+
if (msg.sender != transferTo) {
|
294
|
+
revert ErrorStakingNotNftOwner(targetNftId);
|
295
|
+
}
|
296
|
+
|
297
|
+
// case 3: cross-chain target: TODO decide how to handle and implement
|
298
|
+
} else {
|
299
|
+
revert("Cross-chain target not supported");
|
114
300
|
}
|
115
301
|
|
116
|
-
|
117
|
-
|
302
|
+
newBalance = _withdrawRewardReserves(targetNftId, dipAmount, transferTo);
|
303
|
+
}
|
304
|
+
|
118
305
|
|
119
|
-
|
306
|
+
/// @inheritdoc IStaking
|
307
|
+
function refillRewardReservesByService(NftId targetNftId, Amount dipAmount, address transferFrom)
|
308
|
+
external
|
309
|
+
virtual
|
310
|
+
restricted()
|
311
|
+
onlyTarget(targetNftId)
|
312
|
+
returns (Amount newBalance)
|
313
|
+
{
|
314
|
+
_refillRewardReserves(targetNftId, dipAmount, transferFrom);
|
120
315
|
}
|
121
316
|
|
122
|
-
// target management
|
123
317
|
|
318
|
+
/// @inheritdoc IStaking
|
319
|
+
function withdrawRewardReservesByService(NftId targetNftId, Amount dipAmount, address transferTo)
|
320
|
+
external
|
321
|
+
virtual
|
322
|
+
restricted()
|
323
|
+
onlyTarget(targetNftId)
|
324
|
+
returns (Amount newBalance)
|
325
|
+
{
|
326
|
+
// check that service does not withdraw from protocol target
|
327
|
+
if (targetNftId == getRegistry().getProtocolNftId()) {
|
328
|
+
revert ErrorStakingTargetTypeNotSupported(targetNftId, PROTOCOL());
|
329
|
+
}
|
330
|
+
|
331
|
+
// default: on-chain target owner is recipient
|
332
|
+
address targetOwner = getRegistry().ownerOf(targetNftId);
|
333
|
+
return _withdrawRewardReserves(targetNftId, dipAmount, targetOwner);
|
334
|
+
}
|
335
|
+
|
336
|
+
|
337
|
+
/// @inheritdoc IStaking
|
124
338
|
function registerTarget(
|
125
339
|
NftId targetNftId,
|
126
340
|
ObjectType expectedObjectType,
|
127
|
-
uint256 chainId,
|
128
341
|
Seconds initialLockingPeriod,
|
129
342
|
UFixed initialRewardRate
|
130
343
|
)
|
131
344
|
external
|
132
345
|
virtual
|
133
|
-
restricted()
|
346
|
+
restricted() // staking service
|
134
347
|
{
|
135
|
-
|
136
|
-
getRegistry(),
|
137
|
-
_getStakingStorage()._reader,
|
138
|
-
targetNftId,
|
139
|
-
expectedObjectType,
|
140
|
-
initialLockingPeriod,
|
141
|
-
initialRewardRate);
|
142
|
-
|
348
|
+
// checks done by staking store
|
143
349
|
_getStakingStorage()._store.createTarget(
|
144
350
|
targetNftId,
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
lockingPeriod: initialLockingPeriod,
|
149
|
-
rewardRate: initialRewardRate,
|
150
|
-
maxStakedAmount: AmountLib.max()}));
|
351
|
+
expectedObjectType,
|
352
|
+
initialLockingPeriod,
|
353
|
+
initialRewardRate);
|
151
354
|
}
|
152
355
|
|
153
356
|
|
357
|
+
/// @inheritdoc IStaking
|
154
358
|
function setLockingPeriod(
|
155
359
|
NftId targetNftId,
|
156
360
|
Seconds lockingPeriod
|
@@ -160,107 +364,91 @@ contract Staking is
|
|
160
364
|
restricted()
|
161
365
|
onlyTarget(targetNftId)
|
162
366
|
{
|
163
|
-
(
|
164
|
-
Seconds oldLockingPeriod,
|
165
|
-
TargetInfo memory targetInfo
|
166
|
-
) = TargetManagerLib.updateLockingPeriod(
|
167
|
-
this,
|
168
|
-
targetNftId,
|
169
|
-
lockingPeriod);
|
170
|
-
|
171
|
-
_getStakingStorage()._store.updateTarget(targetNftId, targetInfo);
|
172
|
-
|
173
|
-
emit LogStakingLockingPeriodSet(targetNftId, oldLockingPeriod, lockingPeriod);
|
367
|
+
_getStakingStorage()._store.setLockingPeriod(targetNftId, lockingPeriod);
|
174
368
|
}
|
175
369
|
|
176
|
-
// TODO add function to set protocol reward rate: onlyOwner
|
177
|
-
// get protocol nft id (from where)
|
178
370
|
|
371
|
+
/// @inheritdoc IStaking
|
179
372
|
function setRewardRate(NftId targetNftId, UFixed rewardRate)
|
180
373
|
external
|
181
374
|
virtual
|
182
375
|
restricted()
|
183
376
|
onlyTarget(targetNftId)
|
184
377
|
{
|
185
|
-
(
|
186
|
-
UFixed oldRewardRate,
|
187
|
-
TargetInfo memory targetInfo
|
188
|
-
) = TargetManagerLib.updateRewardRate(
|
189
|
-
this,
|
190
|
-
targetNftId,
|
191
|
-
rewardRate);
|
192
|
-
|
193
|
-
_getStakingStorage()._store.updateTarget(targetNftId, targetInfo);
|
194
|
-
|
195
|
-
emit LogStakingRewardRateSet(targetNftId, oldRewardRate, rewardRate);
|
378
|
+
_getStakingStorage()._store.setRewardRate(targetNftId, rewardRate);
|
196
379
|
}
|
197
380
|
|
198
|
-
|
381
|
+
|
382
|
+
// TODO refactor into setTargetLimits
|
383
|
+
/// @inheritdoc IStaking
|
384
|
+
function setMaxStakedAmount(NftId targetNftId, Amount stakeLimitAmount)
|
199
385
|
external
|
200
386
|
virtual
|
201
387
|
restricted()
|
202
388
|
onlyTarget(targetNftId)
|
203
389
|
{
|
204
|
-
|
205
|
-
|
206
|
-
targetInfo.maxStakedAmount = maxStakedAmount;
|
207
|
-
|
208
|
-
_getStakingStorage()._store.updateTarget(targetNftId, targetInfo);
|
209
|
-
|
210
|
-
emit LogStakingMaxStakedAmountSet(targetNftId, maxStakedAmount);
|
390
|
+
StakingStorage storage $ = _getStakingStorage();
|
391
|
+
$._store.setMaxStakedAmount(targetNftId, stakeLimitAmount);
|
211
392
|
}
|
212
393
|
|
213
394
|
|
214
|
-
|
395
|
+
/// @inheritdoc IStaking
|
396
|
+
function setTargetLimits(NftId targetNftId, Amount marginAmount, Amount limitAmount)
|
215
397
|
external
|
216
398
|
virtual
|
217
399
|
restricted()
|
218
|
-
|
400
|
+
onlyTargetOwner(targetNftId)
|
219
401
|
{
|
220
|
-
// update book keeping of reward reserves
|
221
402
|
StakingStorage storage $ = _getStakingStorage();
|
222
|
-
|
403
|
+
$._store.setTargetLimits(targetNftId, marginAmount, limitAmount);
|
223
404
|
}
|
224
405
|
|
225
406
|
|
226
|
-
|
407
|
+
/// @inheritdoc IStaking
|
408
|
+
function addTargetToken(NftId targetNftId, address token)
|
227
409
|
external
|
228
410
|
virtual
|
229
411
|
restricted()
|
230
|
-
|
412
|
+
onlyTarget(targetNftId)
|
231
413
|
{
|
232
|
-
// update book keeping of reward reserves
|
233
414
|
StakingStorage storage $ = _getStakingStorage();
|
234
|
-
|
415
|
+
ChainId chainId = ChainIdLib.fromNftId(targetNftId);
|
416
|
+
|
417
|
+
if (! $._store.hasTokenInfo(chainId, token)) {
|
418
|
+
_addToken($, chainId, token);
|
419
|
+
}
|
420
|
+
|
421
|
+
$._store.addTargetToken(targetNftId, token);
|
422
|
+
|
423
|
+
// TODO move logging to store
|
424
|
+
emit LogStakingTargetTokenAdded(targetNftId, chainId, token);
|
235
425
|
}
|
236
426
|
|
237
427
|
|
428
|
+
/// @inheritdoc IStaking
|
238
429
|
function increaseTotalValueLocked(NftId targetNftId, address token, Amount amount)
|
239
430
|
external
|
240
431
|
virtual
|
241
432
|
restricted() // only pool service
|
242
|
-
returns (Amount newBalance)
|
243
433
|
{
|
244
434
|
StakingStorage storage $ = _getStakingStorage();
|
245
|
-
|
246
|
-
UFixed stakingRate = $._reader.getStakingRate(chainId, token);
|
247
|
-
newBalance = $._store.increaseTotalValueLocked(targetNftId, stakingRate, token, amount);
|
435
|
+
$._store.increaseTotalValueLocked(targetNftId, token, amount);
|
248
436
|
}
|
249
437
|
|
250
438
|
|
439
|
+
/// @inheritdoc IStaking
|
251
440
|
function decreaseTotalValueLocked(NftId targetNftId, address token, Amount amount)
|
252
441
|
external
|
253
442
|
virtual
|
254
443
|
restricted() // only pool service
|
255
|
-
returns (Amount newBalance)
|
256
444
|
{
|
257
445
|
StakingStorage storage $ = _getStakingStorage();
|
258
|
-
|
259
|
-
UFixed stakingRate = $._reader.getStakingRate(chainId, token);
|
260
|
-
newBalance = $._store.decreaseTotalValueLocked(targetNftId, stakingRate, token, amount);
|
446
|
+
$._store.decreaseTotalValueLocked(targetNftId, token, amount);
|
261
447
|
}
|
262
448
|
|
263
449
|
|
450
|
+
// TODO add to interface and implement
|
451
|
+
/// inheritdoc IStaking
|
264
452
|
function registerRemoteTarget(NftId targetNftId, TargetInfo memory targetInfo)
|
265
453
|
external
|
266
454
|
virtual
|
@@ -270,6 +458,8 @@ contract Staking is
|
|
270
458
|
|
271
459
|
}
|
272
460
|
|
461
|
+
// TODO add to interface and implement
|
462
|
+
/// @inheritdoc IStaking
|
273
463
|
function updateRemoteTvl(NftId targetNftId, address token, Amount amount)
|
274
464
|
external
|
275
465
|
virtual
|
@@ -279,158 +469,179 @@ contract Staking is
|
|
279
469
|
|
280
470
|
}
|
281
471
|
|
282
|
-
//---
|
472
|
+
//--- public functions --------------------------------------------------//
|
473
|
+
|
474
|
+
/// @inheritdoc IStaking
|
475
|
+
function updateTargetLimit(NftId targetNftId)
|
476
|
+
external
|
477
|
+
restricted()
|
478
|
+
{
|
479
|
+
StakingStorage storage $ = _getStakingStorage();
|
480
|
+
$._store.updateTargetLimit(targetNftId);
|
481
|
+
}
|
482
|
+
|
283
483
|
|
484
|
+
/// @inheritdoc IStaking
|
284
485
|
function createStake(
|
285
|
-
NftId stakeNftId,
|
286
486
|
NftId targetNftId,
|
287
|
-
Amount stakeAmount
|
487
|
+
Amount stakeAmount,
|
488
|
+
address stakeOwner
|
288
489
|
)
|
289
490
|
external
|
290
491
|
virtual
|
291
|
-
restricted()
|
492
|
+
restricted()
|
493
|
+
onlyTarget(targetNftId)
|
494
|
+
returns (NftId stakeNftId)
|
292
495
|
{
|
496
|
+
// effects (includes further checks in service)
|
293
497
|
StakingStorage storage $ = _getStakingStorage();
|
294
|
-
|
295
|
-
|
296
|
-
targetNftId,
|
297
|
-
stakeAmount);
|
498
|
+
stakeNftId = $._stakingService.createStakeObject(targetNftId, stakeOwner);
|
499
|
+
$._store.createStake(stakeNftId, targetNftId, stakeOwner, stakeAmount);
|
298
500
|
|
299
|
-
//
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
lockedUntil: lockedUntil}));
|
304
|
-
|
305
|
-
// update target stake balance
|
306
|
-
$._store.increaseStake(
|
307
|
-
stakeNftId,
|
308
|
-
targetNftId,
|
309
|
-
stakeAmount);
|
501
|
+
// interactions
|
502
|
+
if (stakeAmount.gtz()) {
|
503
|
+
$._stakingService.pullDipToken(stakeAmount, stakeOwner);
|
504
|
+
}
|
310
505
|
}
|
311
506
|
|
507
|
+
//--- stake owner functions ---------------------------------------------//
|
508
|
+
|
312
509
|
|
510
|
+
/// @inheritdoc IStaking
|
313
511
|
function stake(
|
314
512
|
NftId stakeNftId,
|
315
513
|
Amount stakeAmount
|
316
514
|
)
|
317
515
|
external
|
318
516
|
virtual
|
319
|
-
restricted()
|
320
|
-
|
321
|
-
returns (Amount
|
517
|
+
restricted()
|
518
|
+
onlyStakeOwner(stakeNftId)
|
519
|
+
returns (Amount newStakeBalance)
|
322
520
|
{
|
323
521
|
StakingStorage storage $ = _getStakingStorage();
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
522
|
+
$._store.stake(
|
523
|
+
stakeNftId,
|
524
|
+
true, // update rewards
|
525
|
+
true, // restake rewards
|
526
|
+
SecondsLib.max(), // max additional locking duration
|
329
527
|
stakeAmount);
|
528
|
+
|
529
|
+
// collect staked DIP token via staking service
|
530
|
+
if (stakeAmount.gtz()) {
|
531
|
+
address stakeOwner = getRegistry().ownerOf(stakeNftId);
|
532
|
+
$._stakingService.pullDipToken(stakeAmount, stakeOwner);
|
533
|
+
}
|
330
534
|
}
|
331
535
|
|
332
536
|
|
333
|
-
|
334
|
-
|
335
|
-
NftId newStakeNftId
|
336
|
-
)
|
537
|
+
/// @inheritdoc IStaking
|
538
|
+
function unstake(NftId stakeNftId)
|
337
539
|
external
|
338
540
|
virtual
|
339
|
-
restricted()
|
340
|
-
|
341
|
-
returns (Amount
|
541
|
+
restricted()
|
542
|
+
onlyStakeOwner(stakeNftId)
|
543
|
+
returns (Amount unstakedAmount)
|
342
544
|
{
|
343
|
-
_checkNftType(stakeNftId, STAKE());
|
344
|
-
_checkNftType(newStakeNftId, STAKE());
|
345
|
-
|
346
|
-
// TODO add check that allows additional staking amount
|
347
545
|
StakingStorage storage $ = _getStakingStorage();
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
546
|
+
unstakedAmount = $._store.unstake(
|
547
|
+
stakeNftId,
|
548
|
+
true, // update rewards
|
549
|
+
true, // restake rewards
|
550
|
+
AmountLib.max()); // unstake up to this amount
|
551
|
+
|
552
|
+
// transfer unstaked DIP token via staking service
|
553
|
+
if (unstakedAmount.gtz()) {
|
554
|
+
address stakeOwner = getRegistry().ownerOf(stakeNftId);
|
555
|
+
$._stakingService.pushDipToken(unstakedAmount, stakeOwner);
|
556
|
+
}
|
353
557
|
}
|
354
558
|
|
355
|
-
|
559
|
+
|
560
|
+
/// @inheritdoc IStaking
|
561
|
+
function restake(
|
562
|
+
NftId stakeNftId,
|
563
|
+
NftId newTargetNftId
|
564
|
+
)
|
356
565
|
external
|
357
566
|
virtual
|
358
567
|
restricted() // only staking service
|
359
|
-
|
568
|
+
onlyStakeOwner(stakeNftId)
|
569
|
+
onlyTarget(newTargetNftId)
|
570
|
+
returns (
|
571
|
+
NftId newStakeNftId,
|
572
|
+
Amount newStakedAmount
|
573
|
+
)
|
360
574
|
{
|
361
575
|
StakingStorage storage $ = _getStakingStorage();
|
362
|
-
|
576
|
+
|
577
|
+
// step 1: unstake as much as possible
|
578
|
+
newStakedAmount = $._store.unstake(
|
579
|
+
stakeNftId,
|
580
|
+
true, // update rewards
|
581
|
+
true, // restake rewards
|
582
|
+
AmountLib.max()); // unstake up to this amount
|
583
|
+
|
584
|
+
// step 2: create new stake with full unstaked amount
|
585
|
+
address stakeOwner = getRegistry().ownerOf(stakeNftId);
|
586
|
+
newStakeNftId = $._stakingService.createStakeObject(newTargetNftId, stakeOwner);
|
587
|
+
$._store.createStake(newStakeNftId, newTargetNftId, stakeOwner, newStakedAmount);
|
588
|
+
|
589
|
+
// logging
|
590
|
+
emit LogStakingStakeRestaked(newStakeNftId, newTargetNftId, newStakedAmount, stakeOwner, stakeNftId);
|
363
591
|
}
|
364
592
|
|
365
593
|
|
366
|
-
function
|
594
|
+
function updateRewards(NftId stakeNftId)
|
367
595
|
external
|
368
596
|
virtual
|
369
|
-
restricted()
|
370
|
-
|
371
|
-
returns (
|
372
|
-
Amount rewardsClaimedAmount
|
373
|
-
)
|
597
|
+
restricted()
|
598
|
+
onlyStakeOwner(stakeNftId)
|
599
|
+
returns (Amount newRewardAmount)
|
374
600
|
{
|
375
601
|
StakingStorage storage $ = _getStakingStorage();
|
376
|
-
|
377
|
-
// update rewards since last update
|
378
|
-
NftId targetNftId = _updateRewards($._reader, $._store, stakeNftId);
|
379
|
-
|
380
|
-
// unstake all available rewards
|
381
|
-
rewardsClaimedAmount = $._store.claimUpTo(
|
382
|
-
stakeNftId,
|
383
|
-
targetNftId,
|
384
|
-
AmountLib.max());
|
385
|
-
|
386
|
-
// update reward reserves
|
387
|
-
$._store.decreaseReserves(targetNftId, rewardsClaimedAmount);
|
602
|
+
$._store.updateRewards(stakeNftId);
|
388
603
|
}
|
389
604
|
|
390
605
|
|
391
|
-
function
|
606
|
+
function claimRewards(NftId stakeNftId)
|
392
607
|
external
|
393
608
|
virtual
|
394
|
-
restricted()
|
395
|
-
|
609
|
+
restricted()
|
610
|
+
onlyStakeOwner(stakeNftId)
|
396
611
|
returns (
|
397
|
-
Amount
|
398
|
-
Amount rewardsClaimedAmount
|
612
|
+
Amount claimedAmount
|
399
613
|
)
|
400
614
|
{
|
401
615
|
StakingStorage storage $ = _getStakingStorage();
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
NftId targetNftId = _updateRewards($._reader, $._store, stakeNftId);
|
407
|
-
|
408
|
-
// unstake all available dips
|
409
|
-
(
|
410
|
-
unstakedAmount,
|
411
|
-
rewardsClaimedAmount
|
412
|
-
) = $._store.unstakeUpTo(
|
413
|
-
stakeNftId,
|
414
|
-
targetNftId,
|
415
|
-
AmountLib.max(), // unstake all stakes
|
416
|
-
AmountLib.max()); // claim all rewards
|
616
|
+
claimedAmount = $._store.claimRewards(
|
617
|
+
stakeNftId,
|
618
|
+
true,
|
619
|
+
AmountLib.max());
|
417
620
|
|
418
|
-
//
|
419
|
-
|
621
|
+
// collect staked DIP token by staking service
|
622
|
+
if (claimedAmount.gtz()) {
|
623
|
+
// interactions
|
624
|
+
address stakeOwner = getRegistry().ownerOf(stakeNftId);
|
625
|
+
$._stakingService.pushDipToken(claimedAmount, stakeOwner);
|
626
|
+
}
|
420
627
|
}
|
421
628
|
|
422
629
|
|
423
630
|
//--- view functions ----------------------------------------------------//
|
424
631
|
|
425
|
-
function getStakingReader() public view returns (StakingReader reader) {
|
632
|
+
function getStakingReader() public virtual view returns (StakingReader reader) {
|
426
633
|
return _getStakingStorage()._reader;
|
427
634
|
}
|
428
635
|
|
429
|
-
function
|
636
|
+
function getTargetHandler() external virtual view returns (TargetHandler targetHandler) {
|
637
|
+
return _getStakingStorage()._targetHandler;
|
638
|
+
}
|
639
|
+
|
640
|
+
function getStakingStore() external virtual view returns (StakingStore stakingStore) {
|
430
641
|
return _getStakingStorage()._store;
|
431
642
|
}
|
432
643
|
|
433
|
-
function getTokenRegistryAddress() external view returns (address tokenRegistry) {
|
644
|
+
function getTokenRegistryAddress() external virtual view returns (address tokenRegistry) {
|
434
645
|
return address(_getStakingStorage()._tokenRegistry);
|
435
646
|
}
|
436
647
|
|
@@ -460,84 +671,124 @@ contract Staking is
|
|
460
671
|
|
461
672
|
//--- internal functions ------------------------------------------------//
|
462
673
|
|
463
|
-
|
464
|
-
|
465
|
-
StakingStore store,
|
466
|
-
NftId stakeNftId
|
467
|
-
)
|
674
|
+
|
675
|
+
function _refillRewardReserves(NftId targetNftId, Amount dipAmount, address transferFrom)
|
468
676
|
internal
|
469
677
|
virtual
|
470
|
-
returns (
|
678
|
+
returns (Amount newBalance)
|
471
679
|
{
|
472
|
-
|
680
|
+
// checks + effects
|
681
|
+
StakingStorage storage $ = _getStakingStorage();
|
682
|
+
newBalance = $._store.refillRewardReserves(targetNftId, dipAmount);
|
473
683
|
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
684
|
+
// interactions
|
685
|
+
// collect DIP token from target owner
|
686
|
+
if (dipAmount.gtz()) {
|
687
|
+
$._stakingService.pullDipToken(dipAmount, transferFrom);
|
688
|
+
}
|
689
|
+
}
|
479
690
|
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
691
|
+
|
692
|
+
function _withdrawRewardReserves(NftId targetNftId, Amount dipAmount, address transferTo)
|
693
|
+
internal
|
694
|
+
virtual
|
695
|
+
returns (Amount newBalance)
|
696
|
+
{
|
697
|
+
// checks + effects
|
698
|
+
StakingStorage storage $ = _getStakingStorage();
|
699
|
+
newBalance = $._store.withdrawRewardReserves(targetNftId, dipAmount);
|
700
|
+
|
701
|
+
// interactions
|
702
|
+
// transfer DIP token to designated address
|
703
|
+
if (dipAmount.gtz()) {
|
704
|
+
$._stakingService.pushDipToken(dipAmount, transferTo);
|
705
|
+
}
|
484
706
|
}
|
485
707
|
|
486
708
|
|
487
|
-
function
|
709
|
+
function _addToken(
|
710
|
+
StakingStorage storage $,
|
711
|
+
ChainId chainId,
|
712
|
+
address token
|
713
|
+
)
|
488
714
|
internal
|
489
|
-
virtual
|
715
|
+
virtual
|
490
716
|
{
|
491
|
-
|
492
|
-
token,
|
493
|
-
amount);
|
717
|
+
$._store.addToken(chainId, token);
|
494
718
|
}
|
495
719
|
|
496
720
|
|
721
|
+
/// @dev top level initializer (upgradable contract)
|
497
722
|
function _initialize(
|
498
723
|
address owner,
|
499
724
|
bytes memory data
|
500
725
|
)
|
501
726
|
internal
|
502
727
|
virtual override
|
503
|
-
|
728
|
+
onlyInitializing()
|
504
729
|
{
|
505
730
|
(
|
506
731
|
address registryAddress,
|
507
|
-
address
|
732
|
+
address targetHandlerAddress,
|
508
733
|
address stakingStoreAddress,
|
509
|
-
address
|
734
|
+
address tokenRegistryAddress
|
510
735
|
) = abi.decode(data, (address, address, address, address));
|
511
736
|
|
512
|
-
// only admin(authority) and dip token address are set in registry at this point
|
513
|
-
IRegistry registry = IRegistry(registryAddress);
|
514
|
-
address authority = registry.getAuthority();
|
515
|
-
TokenRegistry tokenRegistry = TokenRegistry(tokenRegistryAddress);
|
516
|
-
address dipTokenAddress = tokenRegistry.getDipTokenAddress();
|
517
|
-
|
518
737
|
// wiring to external contracts
|
738
|
+
IRegistry registry = IRegistry(registryAddress);
|
519
739
|
StakingStorage storage $ = _getStakingStorage();
|
520
740
|
$._protocolNftId = registry.getProtocolNftId();
|
741
|
+
$._targetHandler = TargetHandler(targetHandlerAddress);
|
521
742
|
$._store = StakingStore(stakingStoreAddress);
|
522
743
|
$._reader = StakingStore(stakingStoreAddress).getStakingReader();
|
523
744
|
$._tokenRegistry = TokenRegistry(tokenRegistryAddress);
|
745
|
+
// staking service has to be set via setStakingService after deploying the first GIF release
|
524
746
|
|
525
|
-
|
526
|
-
|
527
|
-
|
747
|
+
// initialize component
|
748
|
+
__Component_init(
|
749
|
+
registry.getAuthority(),
|
750
|
+
address(registry),
|
528
751
|
registry.getNftId(), // parent nft id
|
529
752
|
CONTRACT_NAME,
|
530
|
-
dipTokenAddress,
|
531
753
|
STAKING(),
|
532
754
|
false, // is interceptor
|
533
|
-
|
534
|
-
""
|
535
|
-
|
755
|
+
owner,
|
756
|
+
""); // registry data
|
757
|
+
|
758
|
+
// Protocol target is created in the StakingStore constructor.
|
759
|
+
// This allows setting up the protocol target before the full
|
760
|
+
// staking authorization setup is in place.
|
536
761
|
|
537
762
|
_registerInterface(type(IStaking).interfaceId);
|
538
763
|
}
|
539
764
|
|
540
765
|
|
766
|
+
function _checkTypeAndOwner(NftId nftId, ObjectType expectedObjectType, bool checkOwner)
|
767
|
+
internal
|
768
|
+
view
|
769
|
+
{
|
770
|
+
StakingStorage storage $ = _getStakingStorage();
|
771
|
+
if (expectedObjectType == STAKE()) {
|
772
|
+
if (!$._store.exists(nftId)) {
|
773
|
+
revert ErrorStakingNotStake(nftId);
|
774
|
+
}
|
775
|
+
} else {
|
776
|
+
if (expectedObjectType == TARGET()) {
|
777
|
+
if (!$._store.getTargetSet().exists(nftId)) {
|
778
|
+
revert ErrorStakingNotTarget(nftId);
|
779
|
+
}
|
780
|
+
}
|
781
|
+
}
|
782
|
+
|
783
|
+
if (checkOwner) {
|
784
|
+
address nftOwner = getRegistry().ownerOf(nftId);
|
785
|
+
if (msg.sender != nftOwner) {
|
786
|
+
revert ErrorStakingNotOwner(nftId, nftOwner, msg.sender);
|
787
|
+
}
|
788
|
+
}
|
789
|
+
}
|
790
|
+
|
791
|
+
|
541
792
|
function _getStakingStorage() private pure returns (StakingStorage storage $) {
|
542
793
|
assembly {
|
543
794
|
$.slot := STAKING_LOCATION_V1
|