@etherisc/gif-next 0.0.2-f18fb8b-243 → 0.0.2-f1f3b2c-994
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 +19 -2
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +81 -63
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
- 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 +48 -30
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +21 -2
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +72 -9
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +106 -248
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +64 -222
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +228 -217
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +93 -101
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +64 -37
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +120 -31
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1512 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1999 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1432 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1192 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1566 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2001 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +6 -6
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +5 -5
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +17 -106
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +146 -112
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +31 -31
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +437 -129
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +44 -151
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +61 -81
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +285 -228
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
- 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 +45 -4
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
- package/artifacts/contracts/instance/base/{ObjectManager.sol/ObjectManager.json → ObjectSet.sol/ObjectSet.json} +6 -6
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- 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/mock/Dip.sol/Dip.json +2 -2
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +74 -229
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +18 -18
- 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 +45 -31
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +42 -213
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +37 -144
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +60 -80
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +94 -274
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +458 -161
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +154 -86
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +229 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +87 -88
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +360 -171
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +84 -270
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +492 -333
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +98 -82
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +36 -162
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +57 -89
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +62 -242
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +263 -181
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +104 -100
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +147 -6
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +295 -119
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +43 -43
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +62 -57
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +406 -321
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +104 -100
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +118 -265
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +80 -120
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +62 -242
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +588 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +682 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +274 -22
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -183
- 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 +493 -80
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +263 -145
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +23 -313
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +52 -72
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +46 -5
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1061 -0
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +70 -12
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +15 -205
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +247 -161
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +105 -95
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +5 -112
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +15 -20
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +153 -0
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +34 -31
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +34 -216
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +41 -0
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +41 -0
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
- package/artifacts/contracts/shared/{NftIdSetManager.sol/NftIdSetManager.json → NftIdSet.sol/NftIdSet.json} +4 -4
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -57
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -97
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +5 -112
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +42 -21
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +73 -93
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +100 -256
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +45 -4
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +77 -88
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +31 -138
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +56 -76
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +176 -130
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +59 -23
- 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 +61 -8
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -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/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 +2 -2
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -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/StateId.sol/StateIdLib.json +15 -2
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +52 -2
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +586 -0
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +3 -3
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
- package/contracts/authorization/AccessAdmin.sol +31 -24
- package/contracts/authorization/Authorization.sol +5 -2
- package/contracts/authorization/IAccessAdmin.sol +3 -2
- package/contracts/authorization/IServiceAuthorization.sol +4 -2
- package/contracts/authorization/ServiceAuthorization.sol +27 -11
- package/contracts/distribution/BasicDistribution.sol +4 -15
- package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
- package/contracts/distribution/Distribution.sol +23 -11
- package/contracts/distribution/DistributionService.sol +76 -42
- package/contracts/distribution/DistributionServiceManager.sol +8 -11
- package/contracts/distribution/IDistributionComponent.sol +8 -4
- package/contracts/distribution/IDistributionService.sol +18 -2
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +75 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
- package/contracts/examples/fire/FireProduct.sol +411 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
- package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
- package/contracts/instance/IInstance.sol +11 -34
- package/contracts/instance/IInstanceService.sol +5 -5
- package/contracts/instance/Instance.sol +13 -38
- package/contracts/instance/InstanceAdmin.sol +31 -9
- package/contracts/instance/InstanceAuthorizationV3.sol +16 -14
- package/contracts/instance/InstanceReader.sol +115 -25
- package/contracts/instance/InstanceService.sol +71 -49
- package/contracts/instance/InstanceServiceManager.sol +8 -13
- package/contracts/instance/InstanceStore.sol +12 -1
- package/contracts/instance/base/ObjectLifecycle.sol +9 -4
- package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +5 -5
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +4 -8
- package/contracts/instance/module/IDistribution.sol +0 -1
- package/contracts/instance/module/IPolicy.sol +24 -24
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/IOracleComponent.sol +2 -1
- package/contracts/oracle/Oracle.sol +17 -7
- package/contracts/oracle/OracleService.sol +11 -8
- package/contracts/oracle/OracleServiceManager.sol +8 -11
- package/contracts/pool/BasicPool.sol +7 -5
- package/contracts/pool/BasicPoolAuthorization.sol +11 -2
- package/contracts/pool/BundleService.sol +221 -56
- package/contracts/pool/BundleServiceManager.sol +8 -11
- package/contracts/pool/IBundleService.sol +42 -5
- package/contracts/pool/IPoolComponent.sol +24 -8
- package/contracts/pool/IPoolService.sol +57 -36
- package/contracts/pool/Pool.sol +72 -30
- package/contracts/pool/PoolService.sol +240 -129
- package/contracts/pool/PoolServiceManager.sol +6 -9
- package/contracts/product/ApplicationService.sol +62 -65
- package/contracts/product/ApplicationServiceManager.sol +6 -6
- package/contracts/product/BasicProduct.sol +3 -32
- package/contracts/product/BasicProductAuthorization.sol +3 -0
- package/contracts/product/ClaimService.sol +254 -115
- package/contracts/product/ClaimServiceManager.sol +6 -6
- package/contracts/product/IApplicationService.sol +1 -0
- package/contracts/product/IClaimService.sol +31 -7
- package/contracts/product/IPolicyService.sol +34 -32
- package/contracts/product/IPricingService.sol +7 -7
- package/contracts/product/IProductComponent.sol +18 -4
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +404 -193
- package/contracts/product/PolicyServiceManager.sol +6 -9
- package/contracts/product/PricingService.sol +46 -46
- package/contracts/product/PricingServiceManager.sol +5 -8
- package/contracts/product/Product.sol +90 -50
- package/contracts/product/{ProductService.sol → RiskService.sol} +13 -41
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +65 -32
- package/contracts/registry/IRegistry.sol +65 -19
- package/contracts/registry/IRegistryService.sol +0 -9
- package/contracts/registry/Registry.sol +340 -211
- package/contracts/registry/RegistryAdmin.sol +155 -72
- package/contracts/registry/RegistryService.sol +59 -66
- package/contracts/registry/RegistryServiceManager.sol +4 -4
- package/contracts/registry/ReleaseLifecycle.sol +6 -3
- package/contracts/registry/ReleaseRegistry.sol +496 -0
- package/contracts/registry/ServiceAuthorizationV3.sol +13 -15
- package/contracts/registry/TokenRegistry.sol +2 -2
- package/contracts/shared/Component.sol +38 -43
- package/contracts/shared/ComponentService.sol +88 -28
- package/contracts/shared/ComponentServiceManager.sol +10 -7
- package/contracts/shared/ComponentVerifyingService.sol +2 -3
- package/contracts/shared/ContractLib.sol +38 -0
- package/contracts/shared/IComponent.sol +7 -4
- package/contracts/shared/IComponentService.sol +15 -9
- package/contracts/shared/IInstanceLinkedComponent.sol +9 -10
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/IService.sol +1 -1
- package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +3 -3
- package/contracts/shared/InstanceLinkedComponent.sol +26 -6
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +13 -2
- package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
- package/contracts/shared/NftOwnable.sol +7 -7
- package/contracts/shared/PolicyHolder.sol +17 -57
- package/contracts/shared/Registerable.sol +4 -4
- package/contracts/shared/RegistryLinked.sol +3 -2
- package/contracts/shared/Service.sol +19 -15
- package/contracts/shared/TokenHandler.sol +100 -19
- package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
- package/contracts/staking/IStaking.sol +3 -3
- package/contracts/staking/IStakingService.sol +12 -5
- package/contracts/staking/StakeManagerLib.sol +18 -25
- package/contracts/staking/Staking.sol +27 -42
- package/contracts/staking/StakingManager.sol +10 -12
- package/contracts/staking/StakingReader.sol +23 -20
- package/contracts/staking/StakingService.sol +10 -14
- package/contracts/staking/StakingServiceManager.sol +4 -4
- package/contracts/staking/StakingStore.sol +12 -22
- package/contracts/staking/TargetManagerLib.sol +7 -3
- package/contracts/type/Amount.sol +27 -5
- package/contracts/type/Blocknumber.sol +7 -1
- package/contracts/type/ClaimId.sol +6 -1
- package/contracts/type/NftId.sol +1 -0
- package/contracts/type/ObjectType.sol +19 -18
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/Referral.sol +1 -0
- package/contracts/type/RiskId.sol +15 -1
- package/contracts/type/Seconds.sol +21 -1
- package/contracts/type/StateId.sol +15 -1
- package/contracts/type/Timestamp.sol +11 -1
- package/contracts/type/UFixed.sol +33 -10
- package/contracts/type/Version.sol +3 -1
- package/contracts/{shared → upgradeability}/ProxyManager.sol +70 -38
- package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
- package/contracts/{shared → upgradeability}/Versionable.sol +2 -2
- package/package.json +2 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -703
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1159
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
- package/contracts/product/ProductServiceManager.sol +0 -42
- package/contracts/registry/ReleaseManager.sol +0 -487
- package/contracts/shared/InitializableCustom.sol +0 -177
- /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
| @@ -0,0 +1,12 @@ | |
| 1 | 
            +
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 | 
            +
            pragma solidity ^0.8.20;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            import {TokenHandler} from "./TokenHandler.sol";
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            library TokenHandlerDeployerLib {
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                function deployTokenHandler(address token, address authority) public returns (TokenHandler) {
         | 
| 9 | 
            +
                    return new TokenHandler(address(token), authority);
         | 
| 10 | 
            +
                }
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            }
         | 
| @@ -3,9 +3,8 @@ pragma solidity ^0.8.20; | |
| 3 3 |  | 
| 4 4 | 
             
            import {Amount} from "../type/Amount.sol";
         | 
| 5 5 | 
             
            import {IComponent} from "../shared/IComponent.sol";
         | 
| 6 | 
            -
            import {IVersionable} from "../ | 
| 6 | 
            +
            import {IVersionable} from "../upgradeability/IVersionable.sol";
         | 
| 7 7 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 8 | 
            -
            import {NftIdSetManager} from "../shared/NftIdSetManager.sol";
         | 
| 9 8 | 
             
            import {ObjectType} from "../type/ObjectType.sol";
         | 
| 10 9 | 
             
            import {Seconds} from "../type/Seconds.sol";
         | 
| 11 10 | 
             
            import {StakingReader} from "./StakingReader.sol";
         | 
| @@ -43,8 +42,9 @@ interface IStaking is | |
| 43 42 | 
             
                error ErrorStakingTargetNftIdZero();
         | 
| 44 43 | 
             
                error ErrorStakingTargetTypeNotSupported(NftId targetNftId, ObjectType objectType);
         | 
| 45 44 | 
             
                error ErrorStakingTargetUnexpectedObjectType(NftId targetNftId, ObjectType expectedObjectType, ObjectType actualObjectType);
         | 
| 46 | 
            -
                error  | 
| 45 | 
            +
                error ErrorStakingLockingPeriodTooShort(NftId targetNftId, Seconds minLockingPeriod, Seconds lockingPeriod);
         | 
| 47 46 | 
             
                error ErrorStakingLockingPeriodTooLong(NftId targetNftId, Seconds maxLockingPeriod, Seconds lockingPeriod);
         | 
| 47 | 
            +
                error ErrorStakingStakeLocked(NftId stakeNftId, Timestamp lockedUntil);
         | 
| 48 48 | 
             
                error ErrorStakingRewardRateTooHigh(NftId targetNftId, UFixed maxRewardRate, UFixed rewardRate);
         | 
| 49 49 | 
             
                error ErrorStakingTargetNotFound(NftId targetNftId);
         | 
| 50 50 | 
             
                error ErrorStakingTargetTokenNotFound(NftId targetNftId, uint256 chainId, address token);
         | 
| @@ -44,6 +44,13 @@ interface IStakingService is IService | |
| 44 44 | 
             
                error ErrorStakingServiceDipBalanceInsufficient(NftId targetNftId, uint256 amount, uint256 balance);
         | 
| 45 45 | 
             
                error ErrorStakingServiceDipAllowanceInsufficient(NftId targetNftId, address tokenHandler, uint256 amount, uint256 allowance);
         | 
| 46 46 |  | 
| 47 | 
            +
                /// @dev Set the protocol reward rate stake locking period to the specified duration.
         | 
| 48 | 
            +
                /// Permissioned: only staking owner
         | 
| 49 | 
            +
                // TODO implement
         | 
| 50 | 
            +
                // function setProtocolRewardRate(UFixed rewardRate) external;
         | 
| 51 | 
            +
                // function setProtocolLockingPeriod(Seconds lockingPeriod) external;
         | 
| 52 | 
            +
                // TODO also make sure that protocol rewards can be refilled and withdrawn
         | 
| 53 | 
            +
             | 
| 47 54 | 
             
                /// @dev creates/registers an on-chain instance staking target.
         | 
| 48 55 | 
             
                /// function granted to instance service
         | 
| 49 56 | 
             
                function createInstanceTarget(
         | 
| @@ -53,11 +60,11 @@ interface IStakingService is IService | |
| 53 60 | 
             
                ) external;
         | 
| 54 61 |  | 
| 55 62 | 
             
                /// @dev Set the instance stake locking period to the specified duration.
         | 
| 56 | 
            -
                ///  | 
| 63 | 
            +
                /// Permissioned: Only owner of the specified target.
         | 
| 57 64 | 
             
                function setInstanceLockingPeriod(NftId instanceNftId, Seconds lockingPeriod) external;
         | 
| 58 65 |  | 
| 59 | 
            -
                /// @dev Set the instance reward rate to the specified value
         | 
| 60 | 
            -
                ///  | 
| 66 | 
            +
                /// @dev Set the instance reward rate to the specified value.
         | 
| 67 | 
            +
                /// Permissioned: Only owner of the specified target.
         | 
| 61 68 | 
             
                function setInstanceRewardRate(NftId instanceNftId, UFixed rewardRate) external;
         | 
| 62 69 |  | 
| 63 70 | 
             
                /// @dev (Re)fills the staking reward reserves for the specified target using the dips provided by the reward provider.
         | 
| @@ -68,8 +75,8 @@ interface IStakingService is IService | |
| 68 75 | 
             
                /// unpermissioned: anybody may fill up staking reward reserves
         | 
| 69 76 | 
             
                function refillRewardReservesBySender(NftId targetNftId, Amount dipAmount) external returns (Amount newBalance);
         | 
| 70 77 |  | 
| 71 | 
            -
                /// @dev  | 
| 72 | 
            -
                ///  | 
| 78 | 
            +
                /// @dev Defunds the staking reward reserves for the specified target
         | 
| 79 | 
            +
                /// Permissioned: only the target owner may call this function
         | 
| 73 80 | 
             
                function withdrawInstanceRewardReserves(NftId instanceNftId, Amount dipAmount) external returns (Amount newBalance);
         | 
| 74 81 |  | 
| 75 82 | 
             
                /// @dev create a new stake with amount DIP to the specified target
         | 
| @@ -114,6 +114,24 @@ library StakeManagerLib { | |
| 114 114 | 
             
                    lockingPeriod = info.lockingPeriod;
         | 
| 115 115 | 
             
                }
         | 
| 116 116 |  | 
| 117 | 
            +
                function checkUnstakeParameters(
         | 
| 118 | 
            +
                    StakingReader stakingReader,
         | 
| 119 | 
            +
                    NftId stakeNftId
         | 
| 120 | 
            +
                )
         | 
| 121 | 
            +
                    public
         | 
| 122 | 
            +
                    view
         | 
| 123 | 
            +
                    returns (
         | 
| 124 | 
            +
                        UFixed rewardRate,
         | 
| 125 | 
            +
                        Seconds lockingPeriod
         | 
| 126 | 
            +
                    )
         | 
| 127 | 
            +
                {
         | 
| 128 | 
            +
                    IStaking.StakeInfo memory stakeInfo = stakingReader.getStakeInfo(stakeNftId);
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                    if (stakeInfo.lockedUntil > TimestampLib.blockTimestamp()) {
         | 
| 131 | 
            +
                        revert IStaking.ErrorStakingStakeLocked(stakeNftId, stakeInfo.lockedUntil);
         | 
| 132 | 
            +
                    }
         | 
| 133 | 
            +
                }
         | 
| 134 | 
            +
             | 
| 117 135 |  | 
| 118 136 | 
             
                function checkTarget(
         | 
| 119 137 | 
             
                    StakingReader stakingReader,
         | 
| @@ -153,31 +171,6 @@ library StakeManagerLib { | |
| 153 171 | 
             
                    // TODO add check for target specific max dip amount (min stake + tvl * stake rate + buffer)
         | 
| 154 172 | 
             
                }
         | 
| 155 173 |  | 
| 156 | 
            -
             | 
| 157 | 
            -
                function checkDipBalanceAndAllowance(
         | 
| 158 | 
            -
                    IERC20Metadata dip, 
         | 
| 159 | 
            -
                    address owner, 
         | 
| 160 | 
            -
                    address tokenHandlerAddress, 
         | 
| 161 | 
            -
                    Amount dipAmount
         | 
| 162 | 
            -
                )
         | 
| 163 | 
            -
                    public
         | 
| 164 | 
            -
                    view
         | 
| 165 | 
            -
                {
         | 
| 166 | 
            -
                    // check balance
         | 
| 167 | 
            -
                    uint256 amount = dipAmount.toInt();
         | 
| 168 | 
            -
                    uint256 dipBalance = dip.balanceOf(owner);
         | 
| 169 | 
            -
                    if (dipBalance < amount) {
         | 
| 170 | 
            -
                        revert IStaking.ErrorStakingDipBalanceInsufficient(owner, amount, dipBalance);
         | 
| 171 | 
            -
                    }
         | 
| 172 | 
            -
             | 
| 173 | 
            -
                    // check allowance
         | 
| 174 | 
            -
                    uint256 dipAllowance = dip.allowance(owner, tokenHandlerAddress);
         | 
| 175 | 
            -
                    if (dipAllowance < amount) {
         | 
| 176 | 
            -
                        revert IStaking.ErrorStakingDipAllowanceInsufficient(owner, tokenHandlerAddress, amount, dipAllowance);
         | 
| 177 | 
            -
                    }
         | 
| 178 | 
            -
                }
         | 
| 179 | 
            -
             | 
| 180 | 
            -
             | 
| 181 174 | 
             
                function calculateRewardIncrease(
         | 
| 182 175 | 
             
                    StakingReader stakingReader,
         | 
| 183 176 | 
             
                    NftId stakeNftId,
         | 
| @@ -1,29 +1,28 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 5 | 
            -
            import {ChainNft} from "../registry/ChainNft.sol";
         | 
| 6 | 
            -
            import {Component} from "../shared/Component.sol";
         | 
| 7 4 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 8 5 | 
             
            import {IRegistryService} from "../registry/IRegistryService.sol";
         | 
| 9 6 | 
             
            import {IStaking} from "./IStaking.sol";
         | 
| 10 | 
            -
            import {IVersionable} from "../ | 
| 11 | 
            -
             | 
| 12 | 
            -
            import { | 
| 13 | 
            -
            import { | 
| 14 | 
            -
            import { | 
| 15 | 
            -
            import { | 
| 16 | 
            -
            import { | 
| 7 | 
            +
            import {IVersionable} from "../upgradeability/IVersionable.sol";
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 10 | 
            +
            import {Component} from "../shared/Component.sol";
         | 
| 11 | 
            +
            import {IComponent} from "../shared/IComponent.sol";
         | 
| 12 | 
            +
            import {NftId} from "../type/NftId.sol";
         | 
| 13 | 
            +
            import {ObjectType, STAKING} from "../type/ObjectType.sol";
         | 
| 14 | 
            +
            import {Seconds} from "../type/Seconds.sol";
         | 
| 17 15 | 
             
            import {StakeManagerLib} from "./StakeManagerLib.sol";
         | 
| 18 16 | 
             
            import {StakingReader} from "./StakingReader.sol";
         | 
| 19 17 | 
             
            import {StakingStore} from "./StakingStore.sol";
         | 
| 20 18 | 
             
            import {TargetManagerLib} from "./TargetManagerLib.sol";
         | 
| 21 | 
            -
            import {Timestamp | 
| 19 | 
            +
            import {Timestamp} from "../type/Timestamp.sol";
         | 
| 22 20 | 
             
            import {TokenHandler} from "../shared/TokenHandler.sol";
         | 
| 21 | 
            +
            import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
         | 
| 23 22 | 
             
            import {TokenRegistry} from "../registry/TokenRegistry.sol";
         | 
| 24 | 
            -
            import {UFixed | 
| 23 | 
            +
            import {UFixed} from "../type/UFixed.sol";
         | 
| 25 24 | 
             
            import {Version, VersionLib} from "../type/Version.sol";
         | 
| 26 | 
            -
            import {Versionable} from "../ | 
| 25 | 
            +
            import {Versionable} from "../upgradeability/Versionable.sol";
         | 
| 27 26 |  | 
| 28 27 | 
             
            contract Staking is 
         | 
| 29 28 | 
             
                Component,
         | 
| @@ -39,6 +38,7 @@ contract Staking is | |
| 39 38 | 
             
                struct StakingStorage {
         | 
| 40 39 | 
             
                    IRegistryService _registryService;
         | 
| 41 40 | 
             
                    TokenRegistry _tokenRegistry;
         | 
| 41 | 
            +
                    TokenHandler _tokenHandler;
         | 
| 42 42 | 
             
                    StakingStore _store;
         | 
| 43 43 | 
             
                    StakingReader _reader;
         | 
| 44 44 | 
             
                    NftId _protocolNftId;
         | 
| @@ -54,7 +54,7 @@ contract Staking is | |
| 54 54 |  | 
| 55 55 |  | 
| 56 56 | 
             
                modifier onlyTarget(NftId targetNftId) {
         | 
| 57 | 
            -
                    if (!_getStakingStorage()._store. | 
| 57 | 
            +
                    if (!_getStakingStorage()._store.getTargetNftIdSet().exists(targetNftId)) {
         | 
| 58 58 | 
             
                        revert ErrorStakingNotTarget(targetNftId);
         | 
| 59 59 | 
             
                    }
         | 
| 60 60 | 
             
                    _;
         | 
| @@ -301,7 +301,7 @@ contract Staking is | |
| 301 301 | 
             
                    StakingStorage storage $ = _getStakingStorage();
         | 
| 302 302 |  | 
| 303 303 | 
             
                    // TODO implement
         | 
| 304 | 
            -
             | 
| 304 | 
            +
                }
         | 
| 305 305 |  | 
| 306 306 |  | 
| 307 307 | 
             
                function updateRewards(NftId stakeNftId)
         | 
| @@ -350,9 +350,10 @@ contract Staking is | |
| 350 350 | 
             
                        Amount rewardsClaimedAmount
         | 
| 351 351 | 
             
                    )
         | 
| 352 352 | 
             
                {
         | 
| 353 | 
            -
                    // TODO add check that stake locking is in the past
         | 
| 354 353 | 
             
                    StakingStorage storage $ = _getStakingStorage();
         | 
| 355 | 
            -
             | 
| 354 | 
            +
                    
         | 
| 355 | 
            +
                    StakeManagerLib.checkUnstakeParameters($._reader, stakeNftId);
         | 
| 356 | 
            +
                    
         | 
| 356 357 | 
             
                    // update rewards since last update
         | 
| 357 358 | 
             
                    NftId targetNftId = _updateRewards($._reader, $._store, stakeNftId);
         | 
| 358 359 |  | 
| @@ -378,16 +379,7 @@ contract Staking is | |
| 378 379 | 
             
                    external
         | 
| 379 380 | 
             
                    restricted() // only staking service
         | 
| 380 381 | 
             
                {
         | 
| 381 | 
            -
                     | 
| 382 | 
            -
                    address stakingWallet = getWallet();
         | 
| 383 | 
            -
             | 
| 384 | 
            -
                    StakeManagerLib.checkDipBalanceAndAllowance(
         | 
| 385 | 
            -
                        getToken(), 
         | 
| 386 | 
            -
                        from, 
         | 
| 387 | 
            -
                        address(tokenHandler), 
         | 
| 388 | 
            -
                        dipAmount);
         | 
| 389 | 
            -
             | 
| 390 | 
            -
                    tokenHandler.transfer(from, stakingWallet, dipAmount);
         | 
| 382 | 
            +
                    getTokenHandler().collectTokens(from, getWallet(), dipAmount);
         | 
| 391 383 | 
             
                }
         | 
| 392 384 |  | 
| 393 385 |  | 
| @@ -395,16 +387,7 @@ contract Staking is | |
| 395 387 | 
             
                    external
         | 
| 396 388 | 
             
                    restricted() // only staking service
         | 
| 397 389 | 
             
                {
         | 
| 398 | 
            -
                     | 
| 399 | 
            -
                    address stakingWallet = getWallet();
         | 
| 400 | 
            -
             | 
| 401 | 
            -
                    StakeManagerLib.checkDipBalanceAndAllowance(
         | 
| 402 | 
            -
                        getToken(), 
         | 
| 403 | 
            -
                        stakingWallet, 
         | 
| 404 | 
            -
                        address(tokenHandler), 
         | 
| 405 | 
            -
                        dipAmount);
         | 
| 406 | 
            -
             | 
| 407 | 
            -
                    tokenHandler.transfer(stakingWallet, to, dipAmount);
         | 
| 390 | 
            +
                    getTokenHandler().distributeTokens(getWallet(), to, dipAmount);
         | 
| 408 391 | 
             
                }
         | 
| 409 392 |  | 
| 410 393 |  | 
| @@ -422,6 +405,9 @@ contract Staking is | |
| 422 405 | 
             
                    return address(_getStakingStorage()._tokenRegistry);
         | 
| 423 406 | 
             
                }
         | 
| 424 407 |  | 
| 408 | 
            +
                function getTokenHandler() public virtual override(Component, IComponent) view returns (TokenHandler tokenHandler) {
         | 
| 409 | 
            +
                    return _getStakingStorage()._tokenHandler;
         | 
| 410 | 
            +
                }
         | 
| 425 411 |  | 
| 426 412 | 
             
                // from Versionable
         | 
| 427 413 | 
             
                function getVersion()
         | 
| @@ -465,7 +451,7 @@ contract Staking is | |
| 465 451 | 
             
                )
         | 
| 466 452 | 
             
                    internal
         | 
| 467 453 | 
             
                    virtual override
         | 
| 468 | 
            -
                    initializer
         | 
| 454 | 
            +
                    initializer()
         | 
| 469 455 | 
             
                {
         | 
| 470 456 | 
             
                    (
         | 
| 471 457 | 
             
                        address registryAddress,
         | 
| @@ -480,7 +466,7 @@ contract Staking is | |
| 480 466 | 
             
                    TokenRegistry tokenRegistry = TokenRegistry(tokenRegistryAddress);
         | 
| 481 467 | 
             
                    address dipTokenAddress = tokenRegistry.getDipTokenAddress();
         | 
| 482 468 |  | 
| 483 | 
            -
                     | 
| 469 | 
            +
                    _initializeComponent(
         | 
| 484 470 | 
             
                        authority,
         | 
| 485 471 | 
             
                        registryAddress, 
         | 
| 486 472 | 
             
                        registry.getNftId(), 
         | 
| @@ -492,16 +478,15 @@ contract Staking is | |
| 492 478 | 
             
                        "", // registry data
         | 
| 493 479 | 
             
                        ""); // component data
         | 
| 494 480 |  | 
| 495 | 
            -
                    _createAndSetTokenHandler();
         | 
| 496 | 
            -
             | 
| 497 481 | 
             
                    // wiring to external contracts
         | 
| 498 482 | 
             
                    StakingStorage storage $ = _getStakingStorage();
         | 
| 499 483 | 
             
                    $._protocolNftId = getRegistry().getProtocolNftId();
         | 
| 500 484 | 
             
                    $._store = StakingStore(stakingStoreAddress);
         | 
| 501 485 | 
             
                    $._reader = StakingStore(stakingStoreAddress).getStakingReader();
         | 
| 502 486 | 
             
                    $._tokenRegistry = TokenRegistry(tokenRegistryAddress);
         | 
| 487 | 
            +
                    $._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(dipTokenAddress, authority);
         | 
| 503 488 |  | 
| 504 | 
            -
                     | 
| 489 | 
            +
                    _registerInterface(type(IStaking).interfaceId);
         | 
| 505 490 | 
             
                }
         | 
| 506 491 |  | 
| 507 492 |  | 
| @@ -1,14 +1,10 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import {IVersionable} from "../ | 
| 5 | 
            -
            import {ProxyManager} from "../ | 
| 6 | 
            -
            import {ReleaseManager} from "../registry/ReleaseManager.sol";
         | 
| 4 | 
            +
            import {IVersionable} from "../upgradeability/IVersionable.sol";
         | 
| 5 | 
            +
            import {ProxyManager} from "../upgradeability/ProxyManager.sol";
         | 
| 7 6 | 
             
            import {Staking} from "./Staking.sol";
         | 
| 8 | 
            -
            import {StakingReader} from "./StakingReader.sol";
         | 
| 9 | 
            -
            import {StakingStore} from "./StakingStore.sol";
         | 
| 10 7 |  | 
| 11 | 
            -
            import {RegistryAdmin} from "../registry/RegistryAdmin.sol";
         | 
| 12 8 |  | 
| 13 9 | 
             
            contract StakingManager is
         | 
| 14 10 | 
             
                ProxyManager
         | 
| @@ -22,9 +18,9 @@ contract StakingManager is | |
| 22 18 | 
             
                    address registry,
         | 
| 23 19 | 
             
                    address tokenRegistry,
         | 
| 24 20 | 
             
                    address stakingStore,
         | 
| 25 | 
            -
                    address initialOwner
         | 
| 21 | 
            +
                    address initialOwner,
         | 
| 22 | 
            +
                    bytes32 salt
         | 
| 26 23 | 
             
                )
         | 
| 27 | 
            -
                    ProxyManager(registry)
         | 
| 28 24 | 
             
                {
         | 
| 29 25 | 
             
                    Staking stakingImplementation = new Staking();
         | 
| 30 26 |  | 
| @@ -34,10 +30,12 @@ contract StakingManager is | |
| 34 30 | 
             
                        tokenRegistry,
         | 
| 35 31 | 
             
                        stakingStore,
         | 
| 36 32 | 
             
                        initialOwner);
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                    IVersionable versionable =  | 
| 39 | 
            -
                         | 
| 40 | 
            -
                         | 
| 33 | 
            +
                    
         | 
| 34 | 
            +
                    IVersionable versionable = initialize(
         | 
| 35 | 
            +
                        registry,
         | 
| 36 | 
            +
                        _initialImplementation,
         | 
| 37 | 
            +
                        _initializationData,
         | 
| 38 | 
            +
                        salt);
         | 
| 41 39 |  | 
| 42 40 | 
             
                    _staking = Staking(address(versionable));
         | 
| 43 41 | 
             
                }
         | 
| @@ -1,35 +1,34 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import { | 
| 5 | 
            -
             | 
| 6 | 
            -
            import {IKeyValueStore} from "../shared/IKeyValueStore.sol";
         | 
| 7 | 
            -
            import {IComponent} from "../shared/IComponent.sol";
         | 
| 8 | 
            -
            import {InitializableCustom} from "../shared/InitializableCustom.sol";
         | 
| 4 | 
            +
            import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; 
         | 
| 5 | 
            +
             | 
| 9 6 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 10 7 | 
             
            import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
         | 
| 11 8 | 
             
            import {IStaking} from "../staking/IStaking.sol";
         | 
| 12 | 
            -
             | 
| 9 | 
            +
             | 
| 10 | 
            +
            import {Amount} from "../type/Amount.sol";
         | 
| 11 | 
            +
            import {Blocknumber}  from "../type/Blocknumber.sol";
         | 
| 13 12 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 14 | 
            -
            import { | 
| 15 | 
            -
            import {ObjectType, STAKE, TARGET} from "../type/ObjectType.sol";
         | 
| 16 | 
            -
            import {Seconds} from "../type/Seconds.sol";
         | 
| 13 | 
            +
            import {STAKE, TARGET} from "../type/ObjectType.sol";
         | 
| 17 14 | 
             
            import {StakingStore} from "./StakingStore.sol";
         | 
| 18 15 | 
             
            import {Timestamp} from "../type/Timestamp.sol";
         | 
| 19 | 
            -
            import {UFixed | 
| 16 | 
            +
            import {UFixed} from "../type/UFixed.sol";
         | 
| 20 17 |  | 
| 21 18 | 
             
            contract StakingReader is
         | 
| 22 19 | 
             
                IRegistryLinked,
         | 
| 23 | 
            -
                 | 
| 20 | 
            +
                Initializable
         | 
| 24 21 | 
             
            {
         | 
| 25 22 |  | 
| 26 | 
            -
                error  | 
| 23 | 
            +
                error ErrorStakingReaderUnauthorizedCaler();
         | 
| 27 24 |  | 
| 25 | 
            +
                address private _initializeOwner;
         | 
| 28 26 | 
             
                IRegistry private _registry;
         | 
| 29 27 | 
             
                IStaking private _staking;
         | 
| 30 28 | 
             
                StakingStore private _store;
         | 
| 31 29 |  | 
| 32 | 
            -
                constructor(IRegistry registry)  | 
| 30 | 
            +
                constructor(IRegistry registry) {
         | 
| 31 | 
            +
                    _initializeOwner = msg.sender;
         | 
| 33 32 | 
             
                    _registry = registry;
         | 
| 34 33 | 
             
                }
         | 
| 35 34 |  | 
| @@ -38,8 +37,12 @@ contract StakingReader is | |
| 38 37 | 
             
                    address stakingStoreAddress
         | 
| 39 38 | 
             
                )
         | 
| 40 39 | 
             
                    external
         | 
| 41 | 
            -
                    initializer
         | 
| 40 | 
            +
                    initializer()
         | 
| 42 41 | 
             
                {
         | 
| 42 | 
            +
                    if (msg.sender != _initializeOwner) {
         | 
| 43 | 
            +
                        revert ErrorStakingReaderUnauthorizedCaler();
         | 
| 44 | 
            +
                    }
         | 
| 45 | 
            +
             | 
| 43 46 | 
             
                    _staking = IStaking(stakingAddress);
         | 
| 44 47 | 
             
                    _store = StakingStore(stakingStoreAddress);
         | 
| 45 48 | 
             
                }
         | 
| @@ -60,32 +63,32 @@ contract StakingReader is | |
| 60 63 |  | 
| 61 64 |  | 
| 62 65 | 
             
                function isTarget(NftId targetNftId) external view returns (bool) {
         | 
| 63 | 
            -
                    return _store. | 
| 66 | 
            +
                    return _store.getTargetNftIdSet().exists(targetNftId);
         | 
| 64 67 | 
             
                }
         | 
| 65 68 |  | 
| 66 69 |  | 
| 67 70 | 
             
                function targets() external view returns (uint256) {
         | 
| 68 | 
            -
                    return _store. | 
| 71 | 
            +
                    return _store.getTargetNftIdSet().nftIds();
         | 
| 69 72 | 
             
                }
         | 
| 70 73 |  | 
| 71 74 |  | 
| 72 75 | 
             
                function getTargetNftId(uint256 idx) external view returns (NftId) {
         | 
| 73 | 
            -
                    return _store. | 
| 76 | 
            +
                    return _store.getTargetNftIdSet().getNftId(idx);
         | 
| 74 77 | 
             
                }
         | 
| 75 78 |  | 
| 76 79 |  | 
| 77 80 | 
             
                function isActive(NftId targetNftId) external view returns (bool) {
         | 
| 78 | 
            -
                    return _store. | 
| 81 | 
            +
                    return _store.getTargetNftIdSet().isActive(targetNftId);
         | 
| 79 82 | 
             
                }
         | 
| 80 83 |  | 
| 81 84 |  | 
| 82 85 | 
             
                function activeTargets() external view returns (uint256) {
         | 
| 83 | 
            -
                    return _store. | 
| 86 | 
            +
                    return _store.getTargetNftIdSet().activeNftIds();
         | 
| 84 87 | 
             
                }
         | 
| 85 88 |  | 
| 86 89 |  | 
| 87 90 | 
             
                function getActiveTargetNftId(uint256 idx) external view returns (NftId) {
         | 
| 88 | 
            -
                    return _store. | 
| 91 | 
            +
                    return _store.getTargetNftIdSet().getActiveNftId(idx);
         | 
| 89 92 | 
             
                }
         | 
| 90 93 |  | 
| 91 94 |  | 
| @@ -122,11 +122,10 @@ contract StakingService is | |
| 122 122 |  | 
| 123 123 | 
             
                    // transfer withdrawal amount to target owner
         | 
| 124 124 | 
             
                    address instanceOwner = getRegistry().ownerOf(instanceNftId);
         | 
| 125 | 
            +
                    emit LogStakingServiceRewardReservesDecreased(instanceNftId, instanceOwner, dipAmount, newBalance);
         | 
| 125 126 | 
             
                    $._staking.transferDipAmount(
         | 
| 126 127 | 
             
                        instanceOwner,
         | 
| 127 128 | 
             
                        dipAmount);
         | 
| 128 | 
            -
             | 
| 129 | 
            -
                    emit LogStakingServiceRewardReservesDecreased(instanceNftId, instanceOwner, dipAmount, newBalance);
         | 
| 130 129 | 
             
                }
         | 
| 131 130 |  | 
| 132 131 |  | 
| @@ -169,12 +168,12 @@ contract StakingService is | |
| 169 168 | 
             
                        targetNftId,
         | 
| 170 169 | 
             
                        dipAmount);
         | 
| 171 170 |  | 
| 171 | 
            +
                    emit LogStakingServiceStakeCreated(stakeNftId, targetNftId, stakeOwner, dipAmount);
         | 
| 172 | 
            +
             | 
| 172 173 | 
             
                    // collect staked dip by staking
         | 
| 173 174 | 
             
                    $._staking.collectDipAmount(
         | 
| 174 175 | 
             
                        stakeOwner,
         | 
| 175 176 | 
             
                        dipAmount);
         | 
| 176 | 
            -
             | 
| 177 | 
            -
                    emit LogStakingServiceStakeCreated(stakeNftId, targetNftId, stakeOwner, dipAmount);
         | 
| 178 177 | 
             
                }
         | 
| 179 178 |  | 
| 180 179 |  | 
| @@ -197,12 +196,11 @@ contract StakingService is | |
| 197 196 |  | 
| 198 197 | 
             
                    // collect staked dip by staking
         | 
| 199 198 | 
             
                    if (dipAmount.gtz()) {
         | 
| 199 | 
            +
                        emit LogStakingServiceStakeIncreased(stakeNftId, stakeOwner, dipAmount, stakeBalance);
         | 
| 200 200 | 
             
                        $._staking.collectDipAmount(
         | 
| 201 201 | 
             
                            stakeOwner,
         | 
| 202 202 | 
             
                            dipAmount);
         | 
| 203 203 | 
             
                    }
         | 
| 204 | 
            -
             | 
| 205 | 
            -
                    emit LogStakingServiceStakeIncreased(stakeNftId, stakeOwner, dipAmount, stakeBalance);
         | 
| 206 204 | 
             
                }
         | 
| 207 205 |  | 
| 208 206 |  | 
| @@ -247,11 +245,10 @@ contract StakingService is | |
| 247 245 | 
             
                    address stakeOwner = msg.sender;
         | 
| 248 246 |  | 
| 249 247 | 
             
                    Amount rewardsClaimedAmount = $._staking.claimRewards(stakeNftId);
         | 
| 248 | 
            +
                    emit LogStakingServiceRewardsClaimed(stakeNftId, stakeOwner, rewardsClaimedAmount);
         | 
| 250 249 | 
             
                    $._staking.transferDipAmount(
         | 
| 251 250 | 
             
                        stakeOwner,
         | 
| 252 251 | 
             
                        rewardsClaimedAmount);
         | 
| 253 | 
            -
             | 
| 254 | 
            -
                    emit LogStakingServiceRewardsClaimed(stakeNftId, stakeOwner, rewardsClaimedAmount);
         | 
| 255 252 | 
             
                }
         | 
| 256 253 |  | 
| 257 254 |  | 
| @@ -270,11 +267,10 @@ contract StakingService is | |
| 270 267 | 
             
                    ) = $._staking.unstake(stakeNftId);
         | 
| 271 268 |  | 
| 272 269 | 
             
                    Amount totalAmount = unstakedAmount + rewardsClaimedAmount;
         | 
| 270 | 
            +
                    emit LogStakingServiceUnstaked(stakeNftId, stakeOwner, totalAmount);
         | 
| 273 271 | 
             
                    $._staking.transferDipAmount(
         | 
| 274 272 | 
             
                        stakeOwner,
         | 
| 275 273 | 
             
                        totalAmount);
         | 
| 276 | 
            -
             | 
| 277 | 
            -
                    emit LogStakingServiceUnstaked(stakeNftId, stakeOwner, totalAmount);
         | 
| 278 274 | 
             
                }
         | 
| 279 275 |  | 
| 280 276 |  | 
| @@ -335,7 +331,7 @@ contract StakingService is | |
| 335 331 | 
             
                        address stakingAddress
         | 
| 336 332 | 
             
                    ) = abi.decode(data, (address, address, address));
         | 
| 337 333 |  | 
| 338 | 
            -
                     | 
| 334 | 
            +
                    _initializeService(registryAddress, authority, owner);
         | 
| 339 335 |  | 
| 340 336 | 
             
                    StakingServiceStorage storage $ = _getStakingServiceStorage();
         | 
| 341 337 | 
             
                    $._registryService = RegistryService(_getServiceAddress(REGISTRY()));
         | 
| @@ -343,7 +339,7 @@ contract StakingService is | |
| 343 339 | 
             
                    $._dip = $._staking.getToken();
         | 
| 344 340 | 
             
                    $._tokenHandler = $._staking.getTokenHandler();
         | 
| 345 341 |  | 
| 346 | 
            -
                     | 
| 342 | 
            +
                    _registerInterface(type(IStakingService).interfaceId);
         | 
| 347 343 | 
             
                }
         | 
| 348 344 |  | 
| 349 345 |  | 
| @@ -389,12 +385,12 @@ contract StakingService is | |
| 389 385 | 
             
                    StakingServiceStorage storage $ = _getStakingServiceStorage();
         | 
| 390 386 | 
             
                    newBalance = $._staking.refillRewardReserves(targetNftId, dipAmount);
         | 
| 391 387 |  | 
| 388 | 
            +
                    emit LogStakingServiceRewardReservesIncreased(targetNftId, rewardProvider, dipAmount, newBalance);
         | 
| 389 | 
            +
             | 
| 392 390 | 
             
                    // collect reward dip from provider
         | 
| 393 391 | 
             
                    $._staking.collectDipAmount(
         | 
| 394 392 | 
             
                        rewardProvider,
         | 
| 395 393 | 
             
                        dipAmount);
         | 
| 396 | 
            -
             | 
| 397 | 
            -
                    emit LogStakingServiceRewardReservesIncreased(targetNftId, rewardProvider, dipAmount, newBalance);
         | 
| 398 394 | 
             
                }
         | 
| 399 395 |  | 
| 400 396 |  | 
| @@ -2,8 +2,8 @@ | |
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 4 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 5 | 
            -
            import {IVersionable} from "../ | 
| 6 | 
            -
            import {ProxyManager} from "../ | 
| 5 | 
            +
            import {IVersionable} from "../upgradeability/IVersionable.sol";
         | 
| 6 | 
            +
            import {ProxyManager} from "../upgradeability/ProxyManager.sol";
         | 
| 7 7 | 
             
            import {StakingService} from "./StakingService.sol";
         | 
| 8 8 |  | 
| 9 9 | 
             
            contract StakingServiceManager is
         | 
| @@ -18,14 +18,14 @@ contract StakingServiceManager is | |
| 18 18 | 
             
                    address registryAddress,
         | 
| 19 19 | 
             
                    bytes32 salt
         | 
| 20 20 | 
             
                )
         | 
| 21 | 
            -
                    ProxyManager(registryAddress)
         | 
| 22 21 | 
             
                {
         | 
| 23 22 | 
             
                    StakingService svc = new StakingService();
         | 
| 24 23 | 
             
                    bytes memory data = abi.encode(
         | 
| 25 24 | 
             
                        authority, 
         | 
| 26 25 | 
             
                        registryAddress, 
         | 
| 27 26 | 
             
                        IRegistry(registryAddress).getStakingAddress());
         | 
| 28 | 
            -
                    IVersionable versionable =  | 
| 27 | 
            +
                    IVersionable versionable = initialize(
         | 
| 28 | 
            +
                        registryAddress,
         | 
| 29 29 | 
             
                        address(svc), 
         | 
| 30 30 | 
             
                        data,
         | 
| 31 31 | 
             
                        salt);
         | 
| @@ -3,32 +3,21 @@ pragma solidity ^0.8.20; | |
| 3 3 |  | 
| 4 4 | 
             
            import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
         | 
| 5 5 |  | 
| 6 | 
            -
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 7 | 
            -
            import {Blocknumber, BlocknumberLib} from "../type/Blocknumber.sol";
         | 
| 8 | 
            -
            import {ChainNft} from "../registry/ChainNft.sol";
         | 
| 9 | 
            -
            import {Component} from "../shared/Component.sol";
         | 
| 10 6 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 11 | 
            -
            import {IRegistryService} from "../registry/IRegistryService.sol";
         | 
| 12 7 | 
             
            import {IStaking} from "./IStaking.sol";
         | 
| 13 | 
            -
             | 
| 14 | 
            -
            import { | 
| 8 | 
            +
             | 
| 9 | 
            +
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 10 | 
            +
            import {Blocknumber, BlocknumberLib} from "../type/Blocknumber.sol";
         | 
| 15 11 | 
             
            import {KeyValueStore} from "../shared/KeyValueStore.sol";
         | 
| 16 12 | 
             
            import {KEEP_STATE} from "../type/StateId.sol";
         | 
| 17 | 
            -
            import {LibNftIdSet} from "../type/NftIdSet.sol";
         | 
| 18 13 | 
             
            import {NftId, NftIdLib} from "../type/NftId.sol";
         | 
| 19 | 
            -
            import { | 
| 20 | 
            -
            import { | 
| 21 | 
            -
            import {Seconds, SecondsLib} from "../type/Seconds.sol";
         | 
| 14 | 
            +
            import {NftIdSet} from "../shared/NftIdSet.sol";
         | 
| 15 | 
            +
            import {PROTOCOL, STAKE, TARGET} from "../type/ObjectType.sol";
         | 
| 22 16 | 
             
            import {StakingReader} from "./StakingReader.sol";
         | 
| 23 17 | 
             
            import {TargetManagerLib} from "./TargetManagerLib.sol";
         | 
| 24 18 | 
             
            import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
         | 
| 25 | 
            -
            import {TokenRegistry} from "../registry/TokenRegistry.sol";
         | 
| 26 | 
            -
            import {UFixed, UFixedLib} from "../type/UFixed.sol";
         | 
| 27 | 
            -
            import {Version, VersionLib} from "../type/Version.sol";
         | 
| 28 | 
            -
            import {Versionable} from "../shared/Versionable.sol";
         | 
| 29 | 
            -
             | 
| 30 | 
            -
            import {RegistryAdmin} from "../registry/RegistryAdmin.sol";
         | 
| 31 19 | 
             
            import {StakingLifecycle} from "./StakingLifecycle.sol";
         | 
| 20 | 
            +
            import {UFixed} from "../type/UFixed.sol";
         | 
| 32 21 |  | 
| 33 22 |  | 
| 34 23 | 
             
            contract StakingStore is 
         | 
| @@ -63,7 +52,7 @@ contract StakingStore is | |
| 63 52 | 
             
                error ErrorStakingStoreTvlBalanceNotInitialized(NftId nftId);
         | 
| 64 53 |  | 
| 65 54 | 
             
                IRegistry private _registry;
         | 
| 66 | 
            -
                 | 
| 55 | 
            +
                NftIdSet private _targetNftIdSet;
         | 
| 67 56 | 
             
                StakingReader private _reader;
         | 
| 68 57 |  | 
| 69 58 | 
             
                // staking rate
         | 
| @@ -93,7 +82,7 @@ contract StakingStore is | |
| 93 82 | 
             
                    // set internal variables
         | 
| 94 83 | 
             
                    _registry = registry; //TODO if keeps registry -> RegistryLinked and checks registry address
         | 
| 95 84 | 
             
                    _reader = reader;
         | 
| 96 | 
            -
                     | 
| 85 | 
            +
                    _targetNftIdSet = new NftIdSet();
         | 
| 97 86 |  | 
| 98 87 | 
             
                    // register protocol target
         | 
| 99 88 | 
             
                    _createTarget(
         | 
| @@ -428,8 +417,9 @@ contract StakingStore is | |
| 428 417 | 
             
                    return _reader;
         | 
| 429 418 | 
             
                }
         | 
| 430 419 |  | 
| 431 | 
            -
                 | 
| 432 | 
            -
             | 
| 420 | 
            +
                // TODO rename
         | 
| 421 | 
            +
                function getTargetNftIdSet() external view returns (NftIdSet targetNftIdSet){
         | 
| 422 | 
            +
                    return _targetNftIdSet;
         | 
| 433 423 | 
             
                }
         | 
| 434 424 |  | 
| 435 425 | 
             
                function getStakingRate(uint256 chainId, address token) external view returns (UFixed stakingRate) { return _stakingRate[chainId][token]; }
         | 
| @@ -493,7 +483,7 @@ contract StakingStore is | |
| 493 483 | 
             
                    _tvlLastUpdatedIn[targetNftId]= BlocknumberLib.currentBlocknumber();
         | 
| 494 484 | 
             
                    _createTargetBalance(targetNftId);
         | 
| 495 485 |  | 
| 496 | 
            -
                     | 
| 486 | 
            +
                    _targetNftIdSet.add(targetNftId);
         | 
| 497 487 | 
             
                }
         | 
| 498 488 |  | 
| 499 489 | 
             
                function _updateReserves(
         | 
| @@ -132,9 +132,9 @@ library TargetManagerLib { | |
| 132 132 | 
             
                    public 
         | 
| 133 133 | 
             
                    pure
         | 
| 134 134 | 
             
                {
         | 
| 135 | 
            -
                    // check locking period is  | 
| 136 | 
            -
                    if (lockingPeriod. | 
| 137 | 
            -
                        revert IStaking. | 
| 135 | 
            +
                    // check locking period is >= min locking period
         | 
| 136 | 
            +
                    if (lockingPeriod.lt(getMinimumLockingPeriod())) {
         | 
| 137 | 
            +
                        revert IStaking.ErrorStakingLockingPeriodTooShort(targetNftId, getMinimumLockingPeriod(), lockingPeriod);
         | 
| 138 138 | 
             
                    }
         | 
| 139 139 |  | 
| 140 140 | 
             
                    // check locking period <= max locking period
         | 
| @@ -190,6 +190,10 @@ library TargetManagerLib { | |
| 190 190 | 
             
                    return SecondsLib.toSeconds(365 * 24 * 3600 / 2);
         | 
| 191 191 | 
             
                }
         | 
| 192 192 |  | 
| 193 | 
            +
                /// @dev the minimum locking period is 24 hours
         | 
| 194 | 
            +
                function getMinimumLockingPeriod() public pure returns (Seconds minLockingPeriod) {
         | 
| 195 | 
            +
                    return SecondsLib.toSeconds(24 * 3600);
         | 
| 196 | 
            +
                }
         | 
| 193 197 |  | 
| 194 198 | 
             
                function getMaxRewardRate() public pure returns (UFixed maxRewardRate) {
         | 
| 195 199 | 
             
                    return UFixedLib.toUFixed(33, -2);
         |