@etherisc/gif-next 0.0.2-f78c672-338 → 0.0.2-f78f882-351
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 -312
- 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 +111 -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 +655 -299
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +2008 -0
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +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 +331 -56
- 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 +501 -231
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +131 -16
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +256 -16
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +426 -27
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +63 -59
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +322 -67
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +21 -33
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +379 -150
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +160 -78
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +20 -32
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +233 -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 -110
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +321 -66
- 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 +321 -66
- 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 +82 -84
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +321 -66
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +39 -73
- 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 +321 -66
- 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 +321 -66
- 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 +450 -28
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +355 -12
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +488 -85
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +942 -471
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +289 -78
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +595 -532
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +387 -64
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +100 -52
- 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 +33 -45
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +340 -60
- 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 +87 -42
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +116 -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 +321 -66
- 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 +144 -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 +346 -87
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +141 -63
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +218 -61
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +113 -43
- 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 +321 -66
- 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 +128 -70
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +166 -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 +29 -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 +203 -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 +138 -72
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +91 -118
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +113 -67
- 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 +231 -46
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +101 -43
- 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 +799 -472
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1137 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +47 -18
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +96 -38
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +841 -419
- 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 +197 -129
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +459 -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 +212 -232
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +133 -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 -31
- 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 -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/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 -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 +1453 -153
- 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 +1565 -239
- 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 +146 -67
- 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 +98 -44
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +1633 -819
- 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 +64 -19
- package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +193 -0
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +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 +81 -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 +361 -371
- package/contracts/authorization/AccessAdminLib.sol +678 -0
- package/contracts/authorization/AccessManagerCloneable.sol +23 -32
- package/contracts/authorization/Authorization.sol +82 -229
- package/contracts/authorization/IAccess.sol +29 -12
- package/contracts/authorization/IAccessAdmin.sol +83 -84
- package/contracts/authorization/IAuthorization.sol +3 -51
- package/contracts/authorization/IServiceAuthorization.sol +55 -17
- package/contracts/authorization/ServiceAuthorization.sol +228 -34
- package/contracts/distribution/BasicDistribution.sol +5 -7
- package/contracts/distribution/BasicDistributionAuthorization.sol +11 -4
- package/contracts/distribution/Distribution.sol +12 -17
- package/contracts/distribution/DistributionService.sol +129 -66
- package/contracts/distribution/IDistributionComponent.sol +3 -1
- package/contracts/distribution/IDistributionService.sol +21 -9
- 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 +98 -12
- package/contracts/instance/IInstanceService.sol +54 -7
- package/contracts/instance/Instance.sol +165 -61
- package/contracts/instance/InstanceAdmin.sol +183 -313
- package/contracts/instance/InstanceAuthorizationV3.sol +123 -61
- package/contracts/instance/InstanceReader.sol +350 -394
- package/contracts/instance/InstanceService.sol +283 -173
- 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 +65 -12
- 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 +21 -2
- package/contracts/product/IClaimService.sol +5 -4
- package/contracts/product/IPolicyService.sol +9 -2
- package/contracts/product/IRiskService.sol +18 -3
- package/contracts/product/PolicyService.sol +40 -77
- package/contracts/product/PolicyServiceLib.sol +79 -5
- package/contracts/product/PricingService.sol +29 -32
- package/contracts/product/Product.sol +40 -18
- package/contracts/product/RiskService.sol +50 -15
- 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 +85 -266
- package/contracts/registry/RegistryAuthorization.sol +337 -0
- package/contracts/registry/RegistryService.sol +1 -1
- package/contracts/registry/ReleaseAdmin.sol +70 -116
- 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 +20 -37
- package/contracts/shared/ComponentService.sol +249 -250
- package/contracts/shared/ContractLib.sol +134 -75
- package/contracts/shared/IComponent.sol +1 -4
- package/contracts/shared/IComponentService.sol +21 -22
- 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 +6 -11
- 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 +265 -64
- package/contracts/staking/IStakingService.sol +44 -82
- package/contracts/staking/ITargetLimitHandler.sol +17 -0
- package/contracts/staking/Staking.sol +475 -204
- 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 +1093 -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 +17 -22
- 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 +26 -12
- 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/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/shared/IKeyValueStore.sol +0 -54
- package/contracts/shared/KeyValueStore.sol +0 -131
- 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,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
|
-
|
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
|
+
|
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);
|
220
425
|
}
|
221
426
|
|
222
427
|
|
428
|
+
/// @inheritdoc IStaking
|
223
429
|
function increaseTotalValueLocked(NftId targetNftId, address token, Amount amount)
|
224
430
|
external
|
225
431
|
virtual
|
226
432
|
restricted() // only pool service
|
227
|
-
returns (Amount newBalance)
|
228
433
|
{
|
229
434
|
StakingStorage storage $ = _getStakingStorage();
|
230
|
-
|
231
|
-
UFixed stakingRate = $._reader.getStakingRate(chainId, token);
|
232
|
-
newBalance = $._store.increaseTotalValueLocked(targetNftId, stakingRate, token, amount);
|
435
|
+
$._store.increaseTotalValueLocked(targetNftId, token, amount);
|
233
436
|
}
|
234
437
|
|
235
438
|
|
439
|
+
/// @inheritdoc IStaking
|
236
440
|
function decreaseTotalValueLocked(NftId targetNftId, address token, Amount amount)
|
237
441
|
external
|
238
442
|
virtual
|
239
443
|
restricted() // only pool service
|
240
|
-
returns (Amount newBalance)
|
241
444
|
{
|
242
445
|
StakingStorage storage $ = _getStakingStorage();
|
243
|
-
|
244
|
-
UFixed stakingRate = $._reader.getStakingRate(chainId, token);
|
245
|
-
newBalance = $._store.decreaseTotalValueLocked(targetNftId, stakingRate, token, amount);
|
446
|
+
$._store.decreaseTotalValueLocked(targetNftId, token, amount);
|
246
447
|
}
|
247
448
|
|
248
449
|
|
450
|
+
// TODO add to interface and implement
|
451
|
+
/// inheritdoc IStaking
|
249
452
|
function registerRemoteTarget(NftId targetNftId, TargetInfo memory targetInfo)
|
250
453
|
external
|
251
454
|
virtual
|
@@ -255,6 +458,8 @@ contract Staking is
|
|
255
458
|
|
256
459
|
}
|
257
460
|
|
461
|
+
// TODO add to interface and implement
|
462
|
+
/// @inheritdoc IStaking
|
258
463
|
function updateRemoteTvl(NftId targetNftId, address token, Amount amount)
|
259
464
|
external
|
260
465
|
virtual
|
@@ -264,57 +469,95 @@ contract Staking is
|
|
264
469
|
|
265
470
|
}
|
266
471
|
|
267
|
-
//---
|
472
|
+
//--- public functions --------------------------------------------------//
|
268
473
|
|
474
|
+
/// @inheritdoc IStaking
|
475
|
+
function updateTargetLimit(NftId targetNftId)
|
476
|
+
external
|
477
|
+
restricted()
|
478
|
+
{
|
479
|
+
StakingStorage storage $ = _getStakingStorage();
|
480
|
+
$._store.updateTargetLimit(targetNftId);
|
481
|
+
}
|
482
|
+
|
483
|
+
|
484
|
+
/// @inheritdoc IStaking
|
269
485
|
function createStake(
|
270
|
-
NftId stakeNftId,
|
271
486
|
NftId targetNftId,
|
272
|
-
Amount stakeAmount
|
487
|
+
Amount stakeAmount,
|
488
|
+
address stakeOwner
|
273
489
|
)
|
274
490
|
external
|
275
491
|
virtual
|
276
|
-
restricted()
|
492
|
+
restricted()
|
493
|
+
onlyTarget(targetNftId)
|
494
|
+
returns (NftId stakeNftId)
|
277
495
|
{
|
496
|
+
// effects (includes further checks in service)
|
278
497
|
StakingStorage storage $ = _getStakingStorage();
|
279
|
-
|
280
|
-
|
281
|
-
targetNftId,
|
282
|
-
stakeAmount);
|
498
|
+
stakeNftId = $._stakingService.createStakeObject(targetNftId, stakeOwner);
|
499
|
+
$._store.createStake(stakeNftId, targetNftId, stakeOwner, stakeAmount);
|
283
500
|
|
284
|
-
//
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
lockedUntil: lockedUntil}));
|
289
|
-
|
290
|
-
// update target stake balance
|
291
|
-
$._store.increaseStake(
|
292
|
-
stakeNftId,
|
293
|
-
targetNftId,
|
294
|
-
stakeAmount);
|
501
|
+
// interactions
|
502
|
+
if (stakeAmount.gtz()) {
|
503
|
+
$._stakingService.pullDipToken(stakeAmount, stakeOwner);
|
504
|
+
}
|
295
505
|
}
|
296
506
|
|
507
|
+
//--- stake owner functions ---------------------------------------------//
|
297
508
|
|
509
|
+
|
510
|
+
/// @inheritdoc IStaking
|
298
511
|
function stake(
|
299
512
|
NftId stakeNftId,
|
300
513
|
Amount stakeAmount
|
301
514
|
)
|
302
515
|
external
|
303
516
|
virtual
|
304
|
-
restricted()
|
305
|
-
|
306
|
-
returns (Amount
|
517
|
+
restricted()
|
518
|
+
onlyStakeOwner(stakeNftId)
|
519
|
+
returns (Amount newStakeBalance)
|
307
520
|
{
|
308
521
|
StakingStorage storage $ = _getStakingStorage();
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
522
|
+
$._store.stake(
|
523
|
+
stakeNftId,
|
524
|
+
true, // update rewards
|
525
|
+
true, // restake rewards
|
526
|
+
SecondsLib.max(), // max additional locking duration
|
314
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
|
+
}
|
315
534
|
}
|
316
535
|
|
317
536
|
|
537
|
+
/// @inheritdoc IStaking
|
538
|
+
function unstake(NftId stakeNftId)
|
539
|
+
external
|
540
|
+
virtual
|
541
|
+
restricted()
|
542
|
+
onlyStakeOwner(stakeNftId)
|
543
|
+
returns (Amount unstakedAmount)
|
544
|
+
{
|
545
|
+
StakingStorage storage $ = _getStakingStorage();
|
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
|
+
}
|
557
|
+
}
|
558
|
+
|
559
|
+
|
560
|
+
/// @inheritdoc IStaking
|
318
561
|
function restake(
|
319
562
|
NftId stakeNftId,
|
320
563
|
NftId newTargetNftId
|
@@ -322,95 +565,83 @@ contract Staking is
|
|
322
565
|
external
|
323
566
|
virtual
|
324
567
|
restricted() // only staking service
|
325
|
-
|
326
|
-
|
568
|
+
onlyStakeOwner(stakeNftId)
|
569
|
+
onlyTarget(newTargetNftId)
|
570
|
+
returns (
|
571
|
+
NftId newStakeNftId,
|
572
|
+
Amount newStakedAmount
|
573
|
+
)
|
327
574
|
{
|
328
|
-
// TODO add check that allows additional staking amount
|
329
575
|
StakingStorage storage $ = _getStakingStorage();
|
330
576
|
|
331
|
-
//
|
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);
|
332
591
|
}
|
333
592
|
|
334
593
|
|
335
594
|
function updateRewards(NftId stakeNftId)
|
336
595
|
external
|
337
596
|
virtual
|
338
|
-
restricted()
|
339
|
-
|
597
|
+
restricted()
|
598
|
+
onlyStakeOwner(stakeNftId)
|
599
|
+
returns (Amount newRewardAmount)
|
340
600
|
{
|
341
601
|
StakingStorage storage $ = _getStakingStorage();
|
342
|
-
|
602
|
+
$._store.updateRewards(stakeNftId);
|
343
603
|
}
|
344
604
|
|
345
605
|
|
346
606
|
function claimRewards(NftId stakeNftId)
|
347
607
|
external
|
348
608
|
virtual
|
349
|
-
restricted()
|
350
|
-
|
609
|
+
restricted()
|
610
|
+
onlyStakeOwner(stakeNftId)
|
351
611
|
returns (
|
352
|
-
Amount
|
612
|
+
Amount claimedAmount
|
353
613
|
)
|
354
614
|
{
|
355
615
|
StakingStorage storage $ = _getStakingStorage();
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
// unstake all available rewards
|
361
|
-
rewardsClaimedAmount = $._store.claimUpTo(
|
362
|
-
stakeNftId,
|
363
|
-
targetNftId,
|
616
|
+
claimedAmount = $._store.claimRewards(
|
617
|
+
stakeNftId,
|
618
|
+
true,
|
364
619
|
AmountLib.max());
|
365
620
|
|
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);
|
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
|
+
}
|
400
627
|
}
|
401
628
|
|
402
629
|
|
403
630
|
//--- view functions ----------------------------------------------------//
|
404
631
|
|
405
|
-
function getStakingReader() public view returns (StakingReader reader) {
|
632
|
+
function getStakingReader() public virtual view returns (StakingReader reader) {
|
406
633
|
return _getStakingStorage()._reader;
|
407
634
|
}
|
408
635
|
|
409
|
-
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) {
|
410
641
|
return _getStakingStorage()._store;
|
411
642
|
}
|
412
643
|
|
413
|
-
function getTokenRegistryAddress() external view returns (address tokenRegistry) {
|
644
|
+
function getTokenRegistryAddress() external virtual view returns (address tokenRegistry) {
|
414
645
|
return address(_getStakingStorage()._tokenRegistry);
|
415
646
|
}
|
416
647
|
|
@@ -440,84 +671,124 @@ contract Staking is
|
|
440
671
|
|
441
672
|
//--- internal functions ------------------------------------------------//
|
442
673
|
|
443
|
-
|
444
|
-
|
445
|
-
StakingStore store,
|
446
|
-
NftId stakeNftId
|
447
|
-
)
|
674
|
+
|
675
|
+
function _refillRewardReserves(NftId targetNftId, Amount dipAmount, address transferFrom)
|
448
676
|
internal
|
449
677
|
virtual
|
450
|
-
returns (
|
678
|
+
returns (Amount newBalance)
|
451
679
|
{
|
452
|
-
|
680
|
+
// checks + effects
|
681
|
+
StakingStorage storage $ = _getStakingStorage();
|
682
|
+
newBalance = $._store.refillRewardReserves(targetNftId, dipAmount);
|
453
683
|
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
684
|
+
// interactions
|
685
|
+
// collect DIP token from target owner
|
686
|
+
if (dipAmount.gtz()) {
|
687
|
+
$._stakingService.pullDipToken(dipAmount, transferFrom);
|
688
|
+
}
|
689
|
+
}
|
459
690
|
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
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
|
+
}
|
464
706
|
}
|
465
707
|
|
466
708
|
|
467
|
-
function
|
709
|
+
function _addToken(
|
710
|
+
StakingStorage storage $,
|
711
|
+
ChainId chainId,
|
712
|
+
address token
|
713
|
+
)
|
468
714
|
internal
|
469
|
-
virtual
|
715
|
+
virtual
|
470
716
|
{
|
471
|
-
|
472
|
-
token,
|
473
|
-
amount);
|
717
|
+
$._store.addToken(chainId, token);
|
474
718
|
}
|
475
719
|
|
476
720
|
|
721
|
+
/// @dev top level initializer (upgradable contract)
|
477
722
|
function _initialize(
|
478
723
|
address owner,
|
479
724
|
bytes memory data
|
480
725
|
)
|
481
726
|
internal
|
482
727
|
virtual override
|
483
|
-
|
728
|
+
onlyInitializing()
|
484
729
|
{
|
485
730
|
(
|
486
731
|
address registryAddress,
|
487
|
-
address
|
732
|
+
address targetHandlerAddress,
|
488
733
|
address stakingStoreAddress,
|
489
|
-
address
|
734
|
+
address tokenRegistryAddress
|
490
735
|
) = abi.decode(data, (address, address, address, address));
|
491
736
|
|
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
737
|
// wiring to external contracts
|
738
|
+
IRegistry registry = IRegistry(registryAddress);
|
499
739
|
StakingStorage storage $ = _getStakingStorage();
|
500
740
|
$._protocolNftId = registry.getProtocolNftId();
|
741
|
+
$._targetHandler = TargetHandler(targetHandlerAddress);
|
501
742
|
$._store = StakingStore(stakingStoreAddress);
|
502
743
|
$._reader = StakingStore(stakingStoreAddress).getStakingReader();
|
503
744
|
$._tokenRegistry = TokenRegistry(tokenRegistryAddress);
|
745
|
+
// staking service has to be set via setStakingService after deploying the first GIF release
|
504
746
|
|
505
|
-
|
506
|
-
|
507
|
-
|
747
|
+
// initialize component
|
748
|
+
__Component_init(
|
749
|
+
registry.getAuthority(),
|
750
|
+
address(registry),
|
508
751
|
registry.getNftId(), // parent nft id
|
509
752
|
CONTRACT_NAME,
|
510
|
-
dipTokenAddress,
|
511
753
|
STAKING(),
|
512
754
|
false, // is interceptor
|
513
|
-
|
514
|
-
""
|
515
|
-
|
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.
|
516
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
|