@etherisc/gif-next 0.0.2-f13c010-035 → 0.0.2-f13fd28-503
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 +27 -6
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1007 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +744 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +791 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +148 -62
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +233 -5
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +149 -21
- 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 +82 -12
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +68 -13
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +106 -186
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +152 -33
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +57 -89
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +154 -108
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +75 -53
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +44 -58
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +50 -3
- 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 +101 -164
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +152 -33
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +258 -290
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +152 -33
- 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 +137 -129
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +589 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +90 -126
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +225 -162
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +589 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +641 -310
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +193 -45
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +118 -39
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +77 -20
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +163 -56
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +362 -99
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +140 -40
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +550 -224
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +104 -74
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +49 -27
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +410 -370
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +853 -0
- 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 +2 -2
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +16 -5
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
- 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 +74 -154
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +126 -35
- 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 +44 -58
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +27 -3
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +58 -90
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +112 -81
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +69 -27
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +57 -104
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +152 -33
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +127 -331
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +53 -87
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +56 -136
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +44 -97
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +164 -217
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +57 -128
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +456 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +302 -353
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +93 -51
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +105 -63
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +45 -27
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +163 -175
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +152 -33
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +244 -179
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +74 -64
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +61 -10
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +142 -20
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +112 -56
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +27 -3
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +150 -144
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +27 -3
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +211 -180
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +293 -0
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +76 -50
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +99 -76
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +60 -38
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +163 -175
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +88 -73
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +54 -24
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +50 -2
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +31 -7
- package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
- package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
- 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 +88 -40
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +262 -220
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +69 -46
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +42 -20
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +1849 -0
- 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 +318 -52
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +4 -4
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +57 -75
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +225 -439
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +74 -64
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +27 -16
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +454 -5
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +44 -44
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +125 -282
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +44 -58
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- 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/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 +120 -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/IService.sol/IService.json +27 -3
- 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 +57 -89
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- 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 +2 -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 +118 -62
- 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 +27 -16
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +289 -112
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +70 -30
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +65 -83
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +98 -3
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +49 -33
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +145 -176
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +62 -46
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +4 -4
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +151 -49
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +51 -25
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +129 -129
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +23 -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 +3 -3
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- 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 +3 -3
- 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 +4 -0
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
- 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 +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 +62 -5
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +79 -15
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
- 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/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +3 -3
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.json +47 -2
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +18 -2
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/contracts/accounting/AccountingService.sol +262 -0
- package/contracts/accounting/AccountingServiceManager.sol +38 -0
- package/contracts/accounting/IAccountingService.sol +45 -0
- package/contracts/authorization/AccessAdmin.sol +177 -84
- package/contracts/authorization/AccessManagerCloneable.sol +136 -3
- package/contracts/authorization/Authorization.sol +277 -229
- package/contracts/authorization/IAccessAdmin.sol +13 -7
- package/contracts/authorization/IAuthorization.sol +15 -1
- package/contracts/distribution/BasicDistribution.sol +6 -6
- package/contracts/distribution/BasicDistributionAuthorization.sol +22 -9
- package/contracts/distribution/Distribution.sol +32 -30
- package/contracts/distribution/DistributionService.sol +36 -34
- package/contracts/distribution/DistributionServiceManager.sol +1 -1
- package/contracts/distribution/IDistributionService.sol +5 -6
- package/contracts/examples/fire/FirePool.sol +22 -5
- package/contracts/examples/fire/FirePoolAuthorization.sol +2 -1
- package/contracts/examples/fire/FireProduct.sol +31 -8
- package/contracts/examples/fire/FireProductAuthorization.sol +2 -1
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +7 -0
- package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +33 -3
- package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +47 -21
- package/contracts/instance/BundleSet.sol +42 -38
- package/contracts/instance/IInstance.sol +13 -9
- package/contracts/instance/IInstanceService.sol +9 -9
- package/contracts/instance/Instance.sol +33 -18
- package/contracts/instance/InstanceAdmin.sol +247 -84
- package/contracts/instance/InstanceAuthorizationV3.sol +50 -31
- package/contracts/instance/InstanceReader.sol +162 -32
- package/contracts/instance/InstanceService.sol +73 -82
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/InstanceStore.sol +13 -2
- package/contracts/instance/RiskSet.sol +118 -0
- package/contracts/instance/base/ObjectCounter.sol +1 -2
- package/contracts/instance/base/ObjectLifecycle.sol +4 -2
- package/contracts/instance/base/ObjectSet.sol +31 -33
- package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
- package/contracts/instance/module/IComponents.sol +4 -4
- package/contracts/instance/module/IPolicy.sol +2 -1
- package/contracts/instance/module/IRisk.sol +3 -0
- package/contracts/oracle/BasicOracleAuthorization.sol +3 -12
- package/contracts/oracle/Oracle.sol +1 -1
- package/contracts/oracle/OracleService.sol +92 -73
- package/contracts/oracle/OracleServiceManager.sol +1 -1
- package/contracts/pool/BasicPool.sol +24 -3
- package/contracts/pool/BasicPoolAuthorization.sol +27 -8
- package/contracts/pool/BundleService.sol +47 -145
- package/contracts/pool/BundleServiceManager.sol +1 -1
- package/contracts/pool/IBundleService.sol +15 -43
- package/contracts/pool/IPoolComponent.sol +1 -7
- package/contracts/pool/IPoolService.sol +58 -60
- package/contracts/pool/Pool.sol +106 -96
- package/contracts/pool/PoolLib.sol +216 -0
- package/contracts/pool/PoolService.sol +427 -214
- package/contracts/pool/PoolServiceManager.sol +1 -1
- package/contracts/product/ApplicationService.sol +15 -15
- package/contracts/product/ApplicationServiceManager.sol +1 -1
- package/contracts/product/BasicProduct.sol +9 -11
- package/contracts/product/BasicProductAuthorization.sol +24 -10
- package/contracts/product/ClaimService.sol +157 -137
- package/contracts/product/ClaimServiceManager.sol +1 -1
- package/contracts/product/IApplicationService.sol +5 -2
- package/contracts/product/IClaimService.sol +14 -2
- package/contracts/product/IPolicyService.sol +26 -11
- package/contracts/product/IProductComponent.sol +4 -1
- package/contracts/product/PolicyService.sol +277 -261
- package/contracts/product/PolicyServiceLib.sol +65 -0
- package/contracts/product/PolicyServiceManager.sol +1 -1
- package/contracts/product/PricingService.sol +23 -19
- package/contracts/product/PricingServiceManager.sol +3 -3
- package/contracts/product/Product.sol +62 -39
- package/contracts/product/RiskService.sol +74 -25
- package/contracts/product/RiskServiceManager.sol +1 -1
- package/contracts/registry/ChainNft.sol +4 -2
- package/contracts/registry/IRegistry.sol +10 -15
- package/contracts/registry/IRelease.sol +26 -0
- package/contracts/registry/Registry.sol +16 -3
- package/contracts/registry/RegistryAdmin.sol +132 -226
- package/contracts/registry/RegistryService.sol +3 -3
- package/contracts/registry/RegistryServiceManager.sol +1 -1
- package/contracts/registry/ReleaseAdmin.sol +245 -0
- package/contracts/registry/ReleaseLifecycle.sol +2 -0
- package/contracts/registry/ReleaseRegistry.sol +129 -119
- package/contracts/registry/ServiceAuthorizationV3.sol +93 -40
- package/contracts/registry/TokenRegistry.sol +6 -8
- package/contracts/shared/Component.sol +61 -105
- package/contracts/shared/ComponentService.sol +301 -295
- package/contracts/shared/ComponentServiceManager.sol +1 -1
- package/contracts/shared/ComponentVerifyingService.sol +16 -14
- package/contracts/shared/ContractLib.sol +224 -9
- package/contracts/shared/IComponent.sol +4 -17
- package/contracts/shared/IComponentService.sol +16 -25
- package/contracts/shared/IInstanceLinkedComponent.sol +0 -11
- package/contracts/shared/IRegisterable.sol +15 -4
- package/contracts/shared/IService.sol +3 -5
- package/contracts/shared/InstanceLinkedComponent.sol +4 -20
- package/contracts/shared/NftOwnable.sol +4 -4
- package/contracts/shared/PolicyHolder.sol +1 -1
- package/contracts/shared/Registerable.sol +44 -20
- package/contracts/shared/RegistryLinked.sol +7 -13
- package/contracts/shared/Service.sol +8 -27
- package/contracts/shared/TokenHandler.sol +263 -105
- package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
- package/contracts/staking/IStaking.sol +6 -9
- package/contracts/staking/IStakingService.sol +11 -1
- package/contracts/staking/StakeManagerLib.sol +63 -7
- package/contracts/staking/Staking.sol +72 -39
- package/contracts/staking/StakingReader.sol +1 -1
- package/contracts/staking/StakingService.sol +56 -14
- package/contracts/staking/StakingServiceManager.sol +5 -4
- package/contracts/type/Key32.sol +2 -2
- package/contracts/type/Key32Set.sol +62 -0
- package/contracts/type/NftId.sol +6 -0
- package/contracts/type/ObjectType.sol +48 -21
- package/contracts/type/RiskId.sol +23 -6
- package/contracts/type/RoleId.sol +24 -4
- package/contracts/type/Selector.sol +5 -0
- package/contracts/type/Timestamp.sol +0 -5
- package/contracts/type/UFixed.sol +9 -119
- package/contracts/type/Version.sol +15 -5
- package/contracts/upgradeability/ProxyManager.sol +1 -1
- package/package.json +3 -3
- package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +0 -4
- package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +0 -1196
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
- package/artifacts/contracts/shared/ComponentServiceHelperLib.sol/ComponentServiceHelperLib.dbg.json +0 -4
- package/artifacts/contracts/shared/ComponentServiceHelperLib.sol/ComponentServiceHelperLib.json +0 -206
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
- package/contracts/authorization/ReleaseAccessManager.sol +0 -38
- package/contracts/instance/module/IAccess.sol +0 -46
- package/contracts/shared/ComponentServiceHelperLib.sol +0 -118
| @@ -5,8 +5,16 @@ import {TokenHandler} from "./TokenHandler.sol"; | |
| 5 5 |  | 
| 6 6 | 
             
            library TokenHandlerDeployerLib {
         | 
| 7 7 |  | 
| 8 | 
            -
                function deployTokenHandler( | 
| 9 | 
            -
                     | 
| 8 | 
            +
                function deployTokenHandler(
         | 
| 9 | 
            +
                    address registry,
         | 
| 10 | 
            +
                    address component,
         | 
| 11 | 
            +
                    address token, 
         | 
| 12 | 
            +
                    address authority
         | 
| 13 | 
            +
                )
         | 
| 14 | 
            +
                    public 
         | 
| 15 | 
            +
                    returns (TokenHandler)
         | 
| 16 | 
            +
                {
         | 
| 17 | 
            +
                    return new TokenHandler(registry, component, token, authority);
         | 
| 10 18 | 
             
                }
         | 
| 11 19 |  | 
| 12 20 | 
             
            }
         | 
| @@ -30,6 +30,9 @@ interface IStaking is | |
| 30 30 | 
             
                error ErrorStakingNotStakingOwner();
         | 
| 31 31 | 
             
                error ErrorStakingNotNftOwner(NftId nftId);
         | 
| 32 32 |  | 
| 33 | 
            +
                // initializeTokenHandler
         | 
| 34 | 
            +
                error ErrorStakingNotRegistry(address registry);
         | 
| 35 | 
            +
             | 
| 33 36 | 
             
                // staking rate
         | 
| 34 37 | 
             
                error ErrorStakingTokenNotRegistered(uint256 chainId, address token);
         | 
| 35 38 |  | 
| @@ -64,6 +67,8 @@ interface IStaking is | |
| 64 67 | 
             
                    UFixed rewardRate;
         | 
| 65 68 | 
             
                }
         | 
| 66 69 |  | 
| 70 | 
            +
                function initializeTokenHandler() external;
         | 
| 71 | 
            +
             | 
| 67 72 | 
             
                // staking rate management 
         | 
| 68 73 |  | 
| 69 74 | 
             
                /// @dev sets the rate that converts 1 token of total value locked into the
         | 
| @@ -127,7 +132,7 @@ interface IStaking is | |
| 127 132 | 
             
                /// @dev restakes the dips to a new target.
         | 
| 128 133 | 
             
                /// the sum of the staked dips and the accumulated rewards will be restaked.
         | 
| 129 134 | 
             
                /// permissioned: only staking service may call this function.
         | 
| 130 | 
            -
                function restake(NftId stakeNftId, NftId  | 
| 135 | 
            +
                function restake(NftId stakeNftId, NftId newStakeNftId) external returns (Amount newStakeBalance);
         | 
| 131 136 |  | 
| 132 137 | 
             
                /// @dev retuns the specified amount of dips to the holder of the specified stake nft.
         | 
| 133 138 | 
             
                /// if dipAmount is set to Amount.max() all staked dips and all rewards are transferred to 
         | 
| @@ -153,14 +158,6 @@ interface IStaking is | |
| 153 158 | 
             
                        Amount rewardsClaimedAmount
         | 
| 154 159 | 
             
                    );
         | 
| 155 160 |  | 
| 156 | 
            -
                //--- helper functions --------------------------------------------------//
         | 
| 157 | 
            -
             | 
| 158 | 
            -
                /// @dev transfers the specified amount of dips from the from address to the staking wallet.
         | 
| 159 | 
            -
                function collectDipAmount(address from, Amount dipAmount) external;
         | 
| 160 | 
            -
             | 
| 161 | 
            -
                /// @dev transfers the specified amount of dips from the staking wallet to the to addess.
         | 
| 162 | 
            -
                function transferDipAmount(address to, Amount dipAmount) external;
         | 
| 163 | 
            -
             | 
| 164 161 | 
             
                //--- view and pure functions -------------------------------------------//
         | 
| 165 162 |  | 
| 166 163 | 
             
                function getStakingStore() external view returns (StakingStore stakingStore);
         | 
| @@ -26,11 +26,13 @@ interface IStakingService is IService | |
| 26 26 | 
             
                event LogStakingServiceStakeCreated(NftId stakeNftId, NftId targetNftId, address owner, Amount stakedAmount);
         | 
| 27 27 | 
             
                event LogStakingServiceStakeIncreased(NftId stakeNftId, address owner, Amount stakedAmount, Amount stakeBalance);
         | 
| 28 28 | 
             
                event LogStakingServiceUnstaked(NftId stakeNftId, address stakeOwner, Amount totalAmount);
         | 
| 29 | 
            +
                event LogStakingServiceStakeRestaked(address stakeOwner, NftId indexed stakeNftId, NftId newStakeNftId, NftId indexed newTargetNftId, Amount indexed newStakeBalance);
         | 
| 29 30 |  | 
| 30 31 | 
             
                event LogStakingServiceRewardsUpdated(NftId stakeNftId);
         | 
| 31 32 | 
             
                event LogStakingServiceRewardsClaimed(NftId stakeNftId, address stakeOwner, Amount rewardsClaimedAmount);
         | 
| 32 33 |  | 
| 33 34 | 
             
                // modifiers
         | 
| 35 | 
            +
                error ErrorStakingServiceNotStakingOwner(address account);
         | 
| 34 36 | 
             
                error ErrorStakingServiceNotStaking(address stakingAddress);
         | 
| 35 37 | 
             
                error ErrorStakingServiceNotSupportingIStaking(address stakingAddress);
         | 
| 36 38 |  | 
| @@ -48,6 +50,13 @@ interface IStakingService is IService | |
| 48 50 | 
             
                // function setProtocolLockingPeriod(Seconds lockingPeriod) external;
         | 
| 49 51 | 
             
                // TODO also make sure that protocol rewards can be refilled and withdrawn
         | 
| 50 52 |  | 
| 53 | 
            +
                /// @dev Approves the staking token handler.
         | 
| 54 | 
            +
                /// Reverts if the staking token handler wallet is not the token handler itself.
         | 
| 55 | 
            +
                function approveTokenHandler(
         | 
| 56 | 
            +
                    IERC20Metadata token,
         | 
| 57 | 
            +
                    Amount amount
         | 
| 58 | 
            +
                ) external;
         | 
| 59 | 
            +
             | 
| 51 60 | 
             
                /// @dev creates/registers an on-chain instance staking target.
         | 
| 52 61 | 
             
                /// function granted to instance service
         | 
| 53 62 | 
             
                function createInstanceTarget(
         | 
| @@ -108,7 +117,8 @@ interface IStakingService is IService | |
| 108 117 | 
             
                )
         | 
| 109 118 | 
             
                    external
         | 
| 110 119 | 
             
                    returns (
         | 
| 111 | 
            -
                        NftId newStakeNftId
         | 
| 120 | 
            +
                        NftId newStakeNftId,
         | 
| 121 | 
            +
                        Amount newStakeBalance
         | 
| 112 122 | 
             
                    );
         | 
| 113 123 |  | 
| 114 124 |  | 
| @@ -1,16 +1,10 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 5 | 
            -
             | 
| 6 4 | 
             
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 7 | 
            -
            import {Component} from "../shared/Component.sol";
         | 
| 8 5 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 9 | 
            -
            import {IRegistryService} from "../registry/IRegistryService.sol";
         | 
| 10 6 | 
             
            import {IStaking} from "./IStaking.sol";
         | 
| 11 | 
            -
            import {Key32} from "../type/Key32.sol";
         | 
| 12 7 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 13 | 
            -
            import {ObjectType, INSTANCE, PROTOCOL, TARGET} from "../type/ObjectType.sol";
         | 
| 14 8 | 
             
            import {Seconds, SecondsLib} from "../type/Seconds.sol";
         | 
| 15 9 | 
             
            import {StakingReader} from "./StakingReader.sol";
         | 
| 16 10 | 
             
            import {StakingStore} from "./StakingStore.sol";
         | 
| @@ -51,7 +45,7 @@ library StakeManagerLib { | |
| 51 45 |  | 
| 52 46 | 
             
                    // TODO check that additional dip, rewards and rewards increment 
         | 
| 53 47 | 
             
                    // are still ok with max target staking amount
         | 
| 54 | 
            -
                    NftId targetNftId = registry. | 
| 48 | 
            +
                    NftId targetNftId = registry.getParentNftId(stakeNftId);
         | 
| 55 49 |  | 
| 56 50 | 
             
                    stakingStore.restakeRewards(
         | 
| 57 51 | 
             
                        stakeNftId, 
         | 
| @@ -72,6 +66,55 @@ library StakeManagerLib { | |
| 72 66 |  | 
| 73 67 | 
             
                }
         | 
| 74 68 |  | 
| 69 | 
            +
                function restake(
         | 
| 70 | 
            +
                    StakingReader stakingReader,
         | 
| 71 | 
            +
                    StakingStore stakingStore,
         | 
| 72 | 
            +
                    NftId oldStakeNftId,
         | 
| 73 | 
            +
                    NftId newStakeNftId
         | 
| 74 | 
            +
                )
         | 
| 75 | 
            +
                    external
         | 
| 76 | 
            +
                    returns (Amount newStakeBalance)
         | 
| 77 | 
            +
                {
         | 
| 78 | 
            +
                    NftId oldTargetNftId = stakingReader.getTargetNftId(oldStakeNftId);
         | 
| 79 | 
            +
                    (UFixed oldRewardRate,) = checkUnstakeParameters(stakingReader, oldStakeNftId);
         | 
| 80 | 
            +
                    
         | 
| 81 | 
            +
                    // calculate new rewards update and unstake full amount
         | 
| 82 | 
            +
                    (
         | 
| 83 | 
            +
                        Amount rewardIncrementAmount,
         | 
| 84 | 
            +
                    ) = calculateRewardIncrease(
         | 
| 85 | 
            +
                        stakingReader, 
         | 
| 86 | 
            +
                        oldStakeNftId,
         | 
| 87 | 
            +
                        oldRewardRate);
         | 
| 88 | 
            +
                    stakingStore.updateRewards(
         | 
| 89 | 
            +
                        oldStakeNftId, 
         | 
| 90 | 
            +
                        oldTargetNftId, 
         | 
| 91 | 
            +
                        rewardIncrementAmount);
         | 
| 92 | 
            +
                    (
         | 
| 93 | 
            +
                        Amount unstakedAmount, 
         | 
| 94 | 
            +
                        Amount rewardsAmount
         | 
| 95 | 
            +
                    ) = stakingStore.unstakeUpTo(
         | 
| 96 | 
            +
                        oldStakeNftId,
         | 
| 97 | 
            +
                        oldTargetNftId,
         | 
| 98 | 
            +
                        AmountLib.max(), // unstake all stakes
         | 
| 99 | 
            +
                        AmountLib.max()); // claim all rewards
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                    // calculate full restake amount
         | 
| 102 | 
            +
                    newStakeBalance = unstakedAmount + rewardsAmount;
         | 
| 103 | 
            +
                    NftId newTargetNftId = stakingReader.getTargetNftId(newStakeNftId);
         | 
| 104 | 
            +
                    
         | 
| 105 | 
            +
                    // create new staking target and increase stake
         | 
| 106 | 
            +
                    Timestamp newLockedUntil = _checkCreateParameters(stakingReader, newTargetNftId, newStakeBalance);
         | 
| 107 | 
            +
                    stakingStore.create(
         | 
| 108 | 
            +
                        newStakeNftId, 
         | 
| 109 | 
            +
                        IStaking.StakeInfo({
         | 
| 110 | 
            +
                                lockedUntil: newLockedUntil
         | 
| 111 | 
            +
                            }));
         | 
| 112 | 
            +
                    stakingStore.increaseStake(
         | 
| 113 | 
            +
                        newStakeNftId, 
         | 
| 114 | 
            +
                        newTargetNftId, 
         | 
| 115 | 
            +
                        newStakeBalance);
         | 
| 116 | 
            +
                }
         | 
| 117 | 
            +
             | 
| 75 118 | 
             
                function checkCreateParameters(
         | 
| 76 119 | 
             
                    StakingReader stakingReader,
         | 
| 77 120 | 
             
                    NftId targetNftId, 
         | 
| @@ -82,6 +125,19 @@ library StakeManagerLib { | |
| 82 125 | 
             
                    returns (
         | 
| 83 126 | 
             
                        Timestamp lockedUntil
         | 
| 84 127 | 
             
                    )
         | 
| 128 | 
            +
                {
         | 
| 129 | 
            +
                    return _checkCreateParameters(stakingReader, targetNftId, dipAmount);
         | 
| 130 | 
            +
                }
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                function _checkCreateParameters(
         | 
| 133 | 
            +
                    StakingReader stakingReader,
         | 
| 134 | 
            +
                    NftId targetNftId, 
         | 
| 135 | 
            +
                    Amount dipAmount
         | 
| 136 | 
            +
                )
         | 
| 137 | 
            +
                    internal view
         | 
| 138 | 
            +
                    returns (
         | 
| 139 | 
            +
                        Timestamp lockedUntil
         | 
| 140 | 
            +
                    )
         | 
| 85 141 | 
             
                {
         | 
| 86 142 | 
             
                    Seconds lockingPeriod = checkTarget(stakingReader, targetNftId);
         | 
| 87 143 | 
             
                    checkDipAmount(stakingReader, targetNftId, dipAmount);
         | 
| @@ -1,17 +1,21 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            +
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 5 | 
            +
             | 
| 4 6 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 5 | 
            -
            import { | 
| 7 | 
            +
            import {IRelease} from "../registry/IRelease.sol";
         | 
| 6 8 | 
             
            import {IStaking} from "./IStaking.sol";
         | 
| 7 9 | 
             
            import {IVersionable} from "../upgradeability/IVersionable.sol";
         | 
| 8 10 |  | 
| 9 11 | 
             
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 10 12 | 
             
            import {Component} from "../shared/Component.sol";
         | 
| 11 13 | 
             
            import {IComponent} from "../shared/IComponent.sol";
         | 
| 14 | 
            +
            import {IComponentService} from "../shared/IComponentService.sol";
         | 
| 12 15 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 13 | 
            -
            import {ObjectType, STAKING} from "../type/ObjectType.sol";
         | 
| 16 | 
            +
            import {ObjectType, STAKE, STAKING} from "../type/ObjectType.sol";
         | 
| 14 17 | 
             
            import {Seconds} from "../type/Seconds.sol";
         | 
| 18 | 
            +
            import {Registerable} from "../shared/Registerable.sol";
         | 
| 15 19 | 
             
            import {StakeManagerLib} from "./StakeManagerLib.sol";
         | 
| 16 20 | 
             
            import {StakingReader} from "./StakingReader.sol";
         | 
| 17 21 | 
             
            import {StakingStore} from "./StakingStore.sol";
         | 
| @@ -21,7 +25,7 @@ import {TokenHandler} from "../shared/TokenHandler.sol"; | |
| 21 25 | 
             
            import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
         | 
| 22 26 | 
             
            import {TokenRegistry} from "../registry/TokenRegistry.sol";
         | 
| 23 27 | 
             
            import {UFixed} from "../type/UFixed.sol";
         | 
| 24 | 
            -
            import {Version, VersionLib} from "../type/Version.sol";
         | 
| 28 | 
            +
            import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
         | 
| 25 29 | 
             
            import {Versionable} from "../upgradeability/Versionable.sol";
         | 
| 26 30 |  | 
| 27 31 | 
             
            contract Staking is 
         | 
| @@ -35,7 +39,6 @@ contract Staking is | |
| 35 39 | 
             
                bytes32 public constant STAKING_LOCATION_V1 = 0xafe8d4462b2ed26a47154f4b8f6d1497d2f772496965791d25bd456e342b7f00;
         | 
| 36 40 |  | 
| 37 41 | 
             
                struct StakingStorage {
         | 
| 38 | 
            -
                    IRegistryService _registryService;
         | 
| 39 42 | 
             
                    TokenRegistry _tokenRegistry;
         | 
| 40 43 | 
             
                    TokenHandler _tokenHandler;
         | 
| 41 44 | 
             
                    StakingStore _store;
         | 
| @@ -59,6 +62,31 @@ contract Staking is | |
| 59 62 | 
             
                    _;
         | 
| 60 63 | 
             
                }
         | 
| 61 64 |  | 
| 65 | 
            +
                function initializeTokenHandler()
         | 
| 66 | 
            +
                    external
         | 
| 67 | 
            +
                {
         | 
| 68 | 
            +
                    if (msg.sender != address(getRegistry())) {
         | 
| 69 | 
            +
                        revert ErrorStakingNotRegistry(msg.sender);
         | 
| 70 | 
            +
                    }
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                    StakingStorage storage $ = _getStakingStorage();
         | 
| 73 | 
            +
                    $._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
         | 
| 74 | 
            +
                        address(getRegistry()),
         | 
| 75 | 
            +
                        address(this),
         | 
| 76 | 
            +
                        address(getToken()), 
         | 
| 77 | 
            +
                        getRegistry().getAuthority());
         | 
| 78 | 
            +
                }
         | 
| 79 | 
            +
             | 
| 80 | 
            +
             | 
| 81 | 
            +
                function approveTokenHandler(IERC20Metadata token, Amount amount)
         | 
| 82 | 
            +
                    public
         | 
| 83 | 
            +
                    restricted()
         | 
| 84 | 
            +
                    onlyOwner()
         | 
| 85 | 
            +
                {
         | 
| 86 | 
            +
                    _approveTokenHandler(token, amount);
         | 
| 87 | 
            +
                }
         | 
| 88 | 
            +
             | 
| 89 | 
            +
             | 
| 62 90 | 
             
                // set/update staking reader
         | 
| 63 91 | 
             
                function setStakingReader(StakingReader stakingReader)
         | 
| 64 92 | 
             
                    external
         | 
| @@ -288,21 +316,26 @@ contract Staking is | |
| 288 316 |  | 
| 289 317 | 
             
                function restake(
         | 
| 290 318 | 
             
                    NftId stakeNftId, 
         | 
| 291 | 
            -
                    NftId  | 
| 319 | 
            +
                    NftId newStakeNftId
         | 
| 292 320 | 
             
                )
         | 
| 293 321 | 
             
                    external
         | 
| 294 322 | 
             
                    virtual
         | 
| 295 323 | 
             
                    restricted() // only staking service
         | 
| 296 324 | 
             
                    onlyStake(stakeNftId)
         | 
| 297 | 
            -
                    returns ( | 
| 325 | 
            +
                    returns (Amount newStakeBalance)
         | 
| 298 326 | 
             
                {
         | 
| 327 | 
            +
                    _checkNftType(stakeNftId, STAKE());
         | 
| 328 | 
            +
                    _checkNftType(newStakeNftId, STAKE());
         | 
| 329 | 
            +
             | 
| 299 330 | 
             
                    // TODO add check that allows additional staking amount
         | 
| 300 331 | 
             
                    StakingStorage storage $ = _getStakingStorage();
         | 
| 301 | 
            -
             | 
| 302 | 
            -
             | 
| 332 | 
            +
                    newStakeBalance = StakeManagerLib.restake(
         | 
| 333 | 
            +
                        $._reader,
         | 
| 334 | 
            +
                        $._store,
         | 
| 335 | 
            +
                        stakeNftId,
         | 
| 336 | 
            +
                        newStakeNftId);    
         | 
| 303 337 | 
             
                }
         | 
| 304 338 |  | 
| 305 | 
            -
             | 
| 306 339 | 
             
                function updateRewards(NftId stakeNftId)
         | 
| 307 340 | 
             
                    external
         | 
| 308 341 | 
             
                    virtual
         | 
| @@ -371,25 +404,6 @@ contract Staking is | |
| 371 404 | 
             
                }
         | 
| 372 405 |  | 
| 373 406 |  | 
| 374 | 
            -
             | 
| 375 | 
            -
                //--- other functions ---------------------------------------------------//
         | 
| 376 | 
            -
             | 
| 377 | 
            -
                function collectDipAmount(address from, Amount dipAmount)
         | 
| 378 | 
            -
                    external
         | 
| 379 | 
            -
                    restricted() // only staking service
         | 
| 380 | 
            -
                {
         | 
| 381 | 
            -
                    getTokenHandler().collectTokens(from, getWallet(), dipAmount);
         | 
| 382 | 
            -
                }
         | 
| 383 | 
            -
             | 
| 384 | 
            -
             | 
| 385 | 
            -
                function transferDipAmount(address to, Amount dipAmount)
         | 
| 386 | 
            -
                    external
         | 
| 387 | 
            -
                    restricted() // only staking service
         | 
| 388 | 
            -
                {
         | 
| 389 | 
            -
                    getTokenHandler().distributeTokens(getWallet(), to, dipAmount);
         | 
| 390 | 
            -
                }
         | 
| 391 | 
            -
             | 
| 392 | 
            -
             | 
| 393 407 | 
             
                //--- view functions ----------------------------------------------------//
         | 
| 394 408 |  | 
| 395 409 | 
             
                function getStakingReader() public view returns (StakingReader reader) {
         | 
| @@ -408,14 +422,24 @@ contract Staking is | |
| 408 422 | 
             
                    return _getStakingStorage()._tokenHandler;
         | 
| 409 423 | 
             
                }
         | 
| 410 424 |  | 
| 411 | 
            -
                // from  | 
| 425 | 
            +
                // from IRegisterable
         | 
| 426 | 
            +
                function getRelease()
         | 
| 427 | 
            +
                    public 
         | 
| 428 | 
            +
                    pure 
         | 
| 429 | 
            +
                    virtual override (IRelease, Registerable)
         | 
| 430 | 
            +
                    returns(VersionPart)
         | 
| 431 | 
            +
                {
         | 
| 432 | 
            +
                    return VersionPartLib.toVersionPart(3);
         | 
| 433 | 
            +
                }
         | 
| 434 | 
            +
             | 
| 435 | 
            +
                // from IVersionable
         | 
| 412 436 | 
             
                function getVersion()
         | 
| 413 437 | 
             
                    public 
         | 
| 414 438 | 
             
                    pure 
         | 
| 415 | 
            -
                    virtual override (IVersionable, Versionable)
         | 
| 439 | 
            +
                    virtual override (Component, IVersionable, Versionable)
         | 
| 416 440 | 
             
                    returns(Version)
         | 
| 417 441 | 
             
                {
         | 
| 418 | 
            -
                    return VersionLib.toVersion( | 
| 442 | 
            +
                    return VersionLib.toVersion(3,0,0);
         | 
| 419 443 | 
             
                }
         | 
| 420 444 |  | 
| 421 445 | 
             
                //--- internal functions ------------------------------------------------//
         | 
| @@ -444,6 +468,16 @@ contract Staking is | |
| 444 468 | 
             
                }
         | 
| 445 469 |  | 
| 446 470 |  | 
| 471 | 
            +
                function _approveTokenHandler(IERC20Metadata token, Amount amount)
         | 
| 472 | 
            +
                    internal
         | 
| 473 | 
            +
                    virtual override
         | 
| 474 | 
            +
                {
         | 
| 475 | 
            +
                    IComponentService(_getServiceAddress(STAKING())).approveTokenHandler(
         | 
| 476 | 
            +
                        token, 
         | 
| 477 | 
            +
                        amount);
         | 
| 478 | 
            +
                }
         | 
| 479 | 
            +
             | 
| 480 | 
            +
             | 
| 447 481 | 
             
                function _initialize(
         | 
| 448 482 | 
             
                    address owner, 
         | 
| 449 483 | 
             
                    bytes memory data
         | 
| @@ -465,6 +499,13 @@ contract Staking is | |
| 465 499 | 
             
                    TokenRegistry tokenRegistry = TokenRegistry(tokenRegistryAddress);
         | 
| 466 500 | 
             
                    address dipTokenAddress = tokenRegistry.getDipTokenAddress();
         | 
| 467 501 |  | 
| 502 | 
            +
                    // wiring to external contracts
         | 
| 503 | 
            +
                    StakingStorage storage $ = _getStakingStorage();
         | 
| 504 | 
            +
                    $._protocolNftId = registry.getProtocolNftId();
         | 
| 505 | 
            +
                    $._store = StakingStore(stakingStoreAddress);
         | 
| 506 | 
            +
                    $._reader = StakingStore(stakingStoreAddress).getStakingReader();
         | 
| 507 | 
            +
                    $._tokenRegistry = TokenRegistry(tokenRegistryAddress);
         | 
| 508 | 
            +
             | 
| 468 509 | 
             
                    _initializeComponent(
         | 
| 469 510 | 
             
                        authority,
         | 
| 470 511 | 
             
                        registryAddress, 
         | 
| @@ -477,14 +518,6 @@ contract Staking is | |
| 477 518 | 
             
                        "", // registry data
         | 
| 478 519 | 
             
                        ""); // component data
         | 
| 479 520 |  | 
| 480 | 
            -
                    // wiring to external contracts
         | 
| 481 | 
            -
                    StakingStorage storage $ = _getStakingStorage();
         | 
| 482 | 
            -
                    $._protocolNftId = getRegistry().getProtocolNftId();
         | 
| 483 | 
            -
                    $._store = StakingStore(stakingStoreAddress);
         | 
| 484 | 
            -
                    $._reader = StakingStore(stakingStoreAddress).getStakingReader();
         | 
| 485 | 
            -
                    $._tokenRegistry = TokenRegistry(tokenRegistryAddress);
         | 
| 486 | 
            -
                    $._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(dipTokenAddress, authority, address(this));
         | 
| 487 | 
            -
             | 
| 488 521 | 
             
                    _registerInterface(type(IStaking).interfaceId);
         | 
| 489 522 | 
             
                }
         | 
| 490 523 |  | 
| @@ -32,6 +32,28 @@ contract StakingService is | |
| 32 32 | 
             
                    TokenHandler _tokenHandler;
         | 
| 33 33 | 
             
                }
         | 
| 34 34 |  | 
| 35 | 
            +
             | 
| 36 | 
            +
                modifier onlyStaking() {
         | 
| 37 | 
            +
                    if (msg.sender != address(_getStakingServiceStorage()._staking)) {
         | 
| 38 | 
            +
                        revert ErrorStakingServiceNotStaking(msg.sender);
         | 
| 39 | 
            +
                    }
         | 
| 40 | 
            +
                    _;
         | 
| 41 | 
            +
                }
         | 
| 42 | 
            +
             | 
| 43 | 
            +
             | 
| 44 | 
            +
                function approveTokenHandler(
         | 
| 45 | 
            +
                    IERC20Metadata token,
         | 
| 46 | 
            +
                    Amount amount
         | 
| 47 | 
            +
                )
         | 
| 48 | 
            +
                    external
         | 
| 49 | 
            +
                    virtual
         | 
| 50 | 
            +
                    onlyStaking()
         | 
| 51 | 
            +
                {
         | 
| 52 | 
            +
                    _getStakingServiceStorage()._tokenHandler.approve(
         | 
| 53 | 
            +
                        token, amount);
         | 
| 54 | 
            +
                }
         | 
| 55 | 
            +
             | 
| 56 | 
            +
             | 
| 35 57 | 
             
                function createInstanceTarget(
         | 
| 36 58 | 
             
                    NftId targetNftId,
         | 
| 37 59 | 
             
                    Seconds initialLockingPeriod,
         | 
| @@ -113,7 +135,7 @@ contract StakingService is | |
| 113 135 | 
             
                    // transfer withdrawal amount to target owner
         | 
| 114 136 | 
             
                    address instanceOwner = getRegistry().ownerOf(instanceNftId);
         | 
| 115 137 | 
             
                    emit LogStakingServiceRewardReservesDecreased(instanceNftId, instanceOwner, dipAmount, newBalance);
         | 
| 116 | 
            -
                    $. | 
| 138 | 
            +
                    $._tokenHandler.pushToken(
         | 
| 117 139 | 
             
                        instanceOwner,
         | 
| 118 140 | 
             
                        dipAmount);
         | 
| 119 141 | 
             
                }
         | 
| @@ -161,8 +183,8 @@ contract StakingService is | |
| 161 183 | 
             
                    emit LogStakingServiceStakeCreated(stakeNftId, targetNftId, stakeOwner, dipAmount);
         | 
| 162 184 |  | 
| 163 185 | 
             
                    // collect staked dip by staking
         | 
| 164 | 
            -
                    $. | 
| 165 | 
            -
                        stakeOwner,
         | 
| 186 | 
            +
                    $._tokenHandler.pullToken(
         | 
| 187 | 
            +
                        stakeOwner, 
         | 
| 166 188 | 
             
                        dipAmount);
         | 
| 167 189 | 
             
                }
         | 
| 168 190 |  | 
| @@ -189,7 +211,7 @@ contract StakingService is | |
| 189 211 | 
             
                    // collect staked dip by staking
         | 
| 190 212 | 
             
                    if (dipAmount.gtz()) {
         | 
| 191 213 | 
             
                        emit LogStakingServiceStakeIncreased(stakeNftId, stakeOwner, dipAmount, stakeBalance);
         | 
| 192 | 
            -
             | 
| 214 | 
            +
                    $._tokenHandler.pullToken(
         | 
| 193 215 | 
             
                            stakeOwner,
         | 
| 194 216 | 
             
                            dipAmount);
         | 
| 195 217 | 
             
                    }
         | 
| @@ -205,13 +227,32 @@ contract StakingService is | |
| 205 227 | 
             
                    restricted()
         | 
| 206 228 | 
             
                    onlyNftOwner(stakeNftId)
         | 
| 207 229 | 
             
                    returns (
         | 
| 208 | 
            -
                        NftId newStakeNftId
         | 
| 230 | 
            +
                        NftId newStakeNftId,
         | 
| 231 | 
            +
                        Amount newStakeBalance
         | 
| 209 232 | 
             
                    )
         | 
| 210 233 | 
             
                {
         | 
| 211 234 | 
             
                    _checkNftType(stakeNftId, STAKE());
         | 
| 212 235 |  | 
| 213 236 | 
             
                    StakingServiceStorage storage $ = _getStakingServiceStorage();
         | 
| 214 | 
            -
                     | 
| 237 | 
            +
                    address stakeOwner = msg.sender;
         | 
| 238 | 
            +
             | 
| 239 | 
            +
                    // register new stake object with registry
         | 
| 240 | 
            +
                    newStakeNftId = $._registryService.registerStake(
         | 
| 241 | 
            +
                        IRegistry.ObjectInfo({
         | 
| 242 | 
            +
                            nftId: NftIdLib.zero(),
         | 
| 243 | 
            +
                            parentNftId: newTargetNftId,
         | 
| 244 | 
            +
                            objectType: STAKE(),
         | 
| 245 | 
            +
                            isInterceptor: false,
         | 
| 246 | 
            +
                            objectAddress: address(0),
         | 
| 247 | 
            +
                            initialOwner: stakeOwner,
         | 
| 248 | 
            +
                            data: ""
         | 
| 249 | 
            +
                        }));
         | 
| 250 | 
            +
             | 
| 251 | 
            +
                    newStakeBalance = $._staking.restake(
         | 
| 252 | 
            +
                        stakeNftId, 
         | 
| 253 | 
            +
                        newStakeNftId);
         | 
| 254 | 
            +
             | 
| 255 | 
            +
                    emit LogStakingServiceStakeRestaked(stakeOwner, stakeNftId, newStakeNftId, newTargetNftId, newStakeBalance);
         | 
| 215 256 | 
             
                } 
         | 
| 216 257 |  | 
| 217 258 |  | 
| @@ -244,7 +285,7 @@ contract StakingService is | |
| 244 285 |  | 
| 245 286 | 
             
                    Amount rewardsClaimedAmount = $._staking.claimRewards(stakeNftId);
         | 
| 246 287 | 
             
                    emit LogStakingServiceRewardsClaimed(stakeNftId, stakeOwner, rewardsClaimedAmount);
         | 
| 247 | 
            -
                    $. | 
| 288 | 
            +
                    $._tokenHandler.pushToken(
         | 
| 248 289 | 
             
                        stakeOwner,
         | 
| 249 290 | 
             
                        rewardsClaimedAmount);
         | 
| 250 291 | 
             
                }
         | 
| @@ -268,8 +309,9 @@ contract StakingService is | |
| 268 309 |  | 
| 269 310 | 
             
                    Amount totalAmount = unstakedAmount + rewardsClaimedAmount;
         | 
| 270 311 | 
             
                    emit LogStakingServiceUnstaked(stakeNftId, stakeOwner, totalAmount);
         | 
| 271 | 
            -
             | 
| 272 | 
            -
             | 
| 312 | 
            +
             | 
| 313 | 
            +
                    $._tokenHandler.pushToken(
         | 
| 314 | 
            +
                        stakeOwner, 
         | 
| 273 315 | 
             
                        totalAmount);
         | 
| 274 316 | 
             
                }
         | 
| 275 317 |  | 
| @@ -327,15 +369,15 @@ contract StakingService is | |
| 327 369 | 
             
                {
         | 
| 328 370 | 
             
                    (
         | 
| 329 371 | 
             
                        address authority,
         | 
| 330 | 
            -
                        address  | 
| 331 | 
            -
                        address  | 
| 372 | 
            +
                        address registry,
         | 
| 373 | 
            +
                        address staking
         | 
| 332 374 | 
             
                    ) = abi.decode(data, (address, address, address));
         | 
| 333 375 |  | 
| 334 | 
            -
                     | 
| 376 | 
            +
                    __Service_init(authority, registry, owner);
         | 
| 335 377 |  | 
| 336 378 | 
             
                    StakingServiceStorage storage $ = _getStakingServiceStorage();
         | 
| 337 379 | 
             
                    $._registryService = RegistryService(_getServiceAddress(REGISTRY()));
         | 
| 338 | 
            -
                    $._staking = _registerStaking( | 
| 380 | 
            +
                    $._staking = _registerStaking(staking);
         | 
| 339 381 | 
             
                    $._dip = $._staking.getToken();
         | 
| 340 382 | 
             
                    $._tokenHandler = $._staking.getTokenHandler();
         | 
| 341 383 |  | 
| @@ -388,7 +430,7 @@ contract StakingService is | |
| 388 430 | 
             
                    emit LogStakingServiceRewardReservesIncreased(targetNftId, rewardProvider, dipAmount, newBalance);
         | 
| 389 431 |  | 
| 390 432 | 
             
                    // collect reward dip from provider
         | 
| 391 | 
            -
                    $. | 
| 433 | 
            +
                    $._tokenHandler.pullToken(
         | 
| 392 434 | 
             
                        rewardProvider,
         | 
| 393 435 | 
             
                        dipAmount);
         | 
| 394 436 | 
             
                }
         | 
| @@ -15,17 +15,18 @@ contract StakingServiceManager is | |
| 15 15 | 
             
                /// @dev initializes proxy manager with service implementation 
         | 
| 16 16 | 
             
                constructor(
         | 
| 17 17 | 
             
                    address authority,
         | 
| 18 | 
            -
                    address  | 
| 18 | 
            +
                    address registry,
         | 
| 19 19 | 
             
                    bytes32 salt
         | 
| 20 20 | 
             
                )
         | 
| 21 21 | 
             
                {
         | 
| 22 22 | 
             
                    StakingService svc = new StakingService();
         | 
| 23 23 | 
             
                    bytes memory data = abi.encode(
         | 
| 24 24 | 
             
                        authority, 
         | 
| 25 | 
            -
                         | 
| 26 | 
            -
                        IRegistry( | 
| 25 | 
            +
                        registry, 
         | 
| 26 | 
            +
                        IRegistry(registry).getStakingAddress());
         | 
| 27 | 
            +
             | 
| 27 28 | 
             
                    IVersionable versionable = initialize(
         | 
| 28 | 
            -
                         | 
| 29 | 
            +
                        registry,
         | 
| 29 30 | 
             
                        address(svc), 
         | 
| 30 31 | 
             
                        data,
         | 
| 31 32 | 
             
                        salt);
         | 
    
        package/contracts/type/Key32.sol
    CHANGED
    
    | @@ -28,8 +28,8 @@ library Key32Lib { | |
| 28 28 |  | 
| 29 29 | 
             
                uint8 public constant TYPE_SHIFT = 31 * 8;
         | 
| 30 30 | 
             
                uint8 public constant ID_SHIFT = uint8(32 * 8 - TYPE_SHIFT);
         | 
| 31 | 
            -
                bytes32 public constant TYPE_MASK = bytes32(bytes1(type(uint8).max)); //  | 
| 32 | 
            -
                bytes32 public constant ID_MASK = bytes32(~TYPE_MASK); //  | 
| 31 | 
            +
                bytes32 public constant TYPE_MASK = bytes32(bytes1(type(uint8).max)); // [32] byte in bytes32
         | 
| 32 | 
            +
                bytes32 public constant ID_MASK = bytes32(~TYPE_MASK); // [0..31] bytes in bytes32
         | 
| 33 33 |  | 
| 34 34 | 
             
                function toKey32(ObjectType objectType, KeyId id) public pure returns (Key32) {
         | 
| 35 35 | 
             
                    uint256 uintObjectType = ObjectType.unwrap(objectType);
         | 
| @@ -0,0 +1,62 @@ | |
| 1 | 
            +
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 | 
            +
            pragma solidity ^0.8.20;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            import {Key32} from "../type/Key32.sol";
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            // based on https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/structs/EnumerableSet.sol
         | 
| 7 | 
            +
            library LibKey32Set {
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                struct Set {
         | 
| 10 | 
            +
                    Key32[] keys;
         | 
| 11 | 
            +
                    mapping(Key32 key => uint256 index) at;
         | 
| 12 | 
            +
                }
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                error ErrorKey32SetAlreadyAdded(Key32 key);
         | 
| 15 | 
            +
                error ErrorKey32SetNotInSet(Key32 key);
         | 
| 16 | 
            +
             | 
| 17 | 
            +
             | 
| 18 | 
            +
                function add(Set storage set, Key32 key) external {
         | 
| 19 | 
            +
                    if (set.at[key] > 0) {
         | 
| 20 | 
            +
                        revert ErrorKey32SetAlreadyAdded(key);
         | 
| 21 | 
            +
                    }
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                    set.keys.push(key);
         | 
| 24 | 
            +
                    set.at[key] = set.keys.length;
         | 
| 25 | 
            +
                }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                function remove(Set storage set, Key32 key) external {
         | 
| 28 | 
            +
                    uint256 nftIdIndex = set.at[key];
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                    if (nftIdIndex == 0) {
         | 
| 31 | 
            +
                        revert ErrorKey32SetNotInSet(key);
         | 
| 32 | 
            +
                    }
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                    uint256 toDeleteIndex = nftIdIndex - 1;
         | 
| 35 | 
            +
                    uint256 lastIndex = set.keys.length - 1;
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                    if (lastIndex != toDeleteIndex) {
         | 
| 38 | 
            +
                        Key32 lastId = set.keys[lastIndex];
         | 
| 39 | 
            +
                        set.keys[toDeleteIndex] = lastId;
         | 
| 40 | 
            +
                        set.at[lastId] = nftIdIndex; // Replace lastValue's index to valueIndex
         | 
| 41 | 
            +
                    }
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                    set.keys.pop();
         | 
| 44 | 
            +
                    delete set.at[key];
         | 
| 45 | 
            +
                }
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                function isEmpty(Set storage set) external view returns(bool empty) {
         | 
| 48 | 
            +
                    return set.keys.length == 0;
         | 
| 49 | 
            +
                }
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                function contains(Set storage set, Key32 key) external view returns(bool inSet) {
         | 
| 52 | 
            +
                    return set.at[key] > 0;
         | 
| 53 | 
            +
                }
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                function size(Set storage set) external view returns(uint256 length) {
         | 
| 56 | 
            +
                    return set.keys.length;
         | 
| 57 | 
            +
                }
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                function getElementAt(Set storage set, uint256 index) external view returns(Key32 key) {
         | 
| 60 | 
            +
                    return set.keys[index];
         | 
| 61 | 
            +
                }
         | 
| 62 | 
            +
            }
         | 
    
        package/contracts/type/NftId.sol
    CHANGED
    
    | @@ -76,4 +76,10 @@ library NftIdLib { | |
| 76 76 | 
             
                function toKeyId(NftId id) public pure returns (KeyId keyId) {
         | 
| 77 77 | 
             
                    return KeyId.wrap(bytes31(uint248(NftId.unwrap(id))));
         | 
| 78 78 | 
             
                }
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                function toNftId(KeyId keyId) public pure returns (NftId nftId) {
         | 
| 81 | 
            +
                   uint248 keyIdInt = uint248(bytes31(KeyId.unwrap(keyId)));
         | 
| 82 | 
            +
                   assert(keyIdInt < type(uint96).max);
         | 
| 83 | 
            +
                   return NftId.wrap(uint96(keyIdInt));
         | 
| 84 | 
            +
                }
         | 
| 79 85 | 
             
            }
         |