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