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