@etherisc/gif-next 0.0.2-f12cf4d-104 → 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 +23 -1
- 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 +100 -102
- 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 +51 -53
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +140 -110
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +46 -48
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +38 -40
- 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 +102 -56
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +127 -40
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +260 -199
- 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 +140 -91
- 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 +95 -77
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +111 -62
- 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 +306 -161
- 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 +75 -18
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +150 -59
- 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 +549 -218
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +87 -73
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +20 -22
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +403 -353
- 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 +68 -70
- 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 +38 -40
- 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 +52 -54
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +98 -83
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +40 -22
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +51 -53
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +127 -40
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +102 -310
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +33 -83
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +38 -122
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +38 -40
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +120 -175
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +51 -53
- 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 +241 -302
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +67 -45
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +91 -65
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +16 -22
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +157 -144
- 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 -187
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +55 -65
- 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 +105 -55
- 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 +144 -131
- 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 +198 -181
- 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 +51 -45
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +85 -78
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +31 -33
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +157 -144
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +76 -77
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +25 -19
- 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 +26 -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 +64 -40
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +250 -221
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +51 -44
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +11 -13
- 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 +316 -50
- 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 +51 -39
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +200 -472
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +50 -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 +435 -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 +38 -26
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +106 -305
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +38 -40
- 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 +51 -53
- 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 +63 -162
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +118 -29
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +32 -32
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +41 -29
- 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 +101 -60
- 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 +31 -19
- 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 +137 -51
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +22 -20
- 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 +2 -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 +32 -30
- package/contracts/distribution/DistributionServiceManager.sol +1 -1
- package/contracts/distribution/IDistributionService.sol +5 -6
- package/contracts/examples/fire/FirePool.sol +6 -2
- package/contracts/examples/fire/FirePoolAuthorization.sol +2 -1
- package/contracts/examples/fire/FireProduct.sol +8 -1
- package/contracts/examples/fire/FireProductAuthorization.sol +2 -1
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +6 -7
- package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +7 -9
- package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +32 -0
- package/contracts/instance/BundleSet.sol +42 -38
- package/contracts/instance/IInstance.sol +13 -9
- package/contracts/instance/IInstanceService.sol +7 -6
- package/contracts/instance/Instance.sol +33 -18
- package/contracts/instance/InstanceAdmin.sol +247 -82
- package/contracts/instance/InstanceAuthorizationV3.sol +50 -31
- package/contracts/instance/InstanceReader.sol +162 -32
- package/contracts/instance/InstanceService.sol +62 -72
- 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 +3 -2
- 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 -74
- package/contracts/oracle/OracleServiceManager.sol +1 -1
- package/contracts/pool/BasicPoolAuthorization.sol +21 -13
- package/contracts/pool/BundleService.sol +35 -125
- package/contracts/pool/BundleServiceManager.sol +1 -1
- package/contracts/pool/IBundleService.sol +13 -38
- package/contracts/pool/IPoolService.sol +49 -56
- package/contracts/pool/Pool.sol +9 -9
- package/contracts/pool/PoolLib.sol +216 -0
- package/contracts/pool/PoolService.sol +323 -186
- 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 +2 -0
- package/contracts/product/BasicProductAuthorization.sol +24 -10
- package/contracts/product/ClaimService.sol +157 -139
- 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 +23 -10
- package/contracts/product/IProductComponent.sol +4 -1
- package/contracts/product/PolicyService.sol +269 -257
- 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 +53 -7
- 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 +8 -15
- package/contracts/registry/IRelease.sol +26 -0
- package/contracts/registry/Registry.sol +7 -2
- package/contracts/registry/RegistryAdmin.sol +129 -237
- 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 +127 -101
- package/contracts/registry/ServiceAuthorizationV3.sol +84 -40
- package/contracts/registry/TokenRegistry.sol +6 -8
- package/contracts/shared/Component.sol +40 -42
- package/contracts/shared/ComponentService.sol +199 -286
- package/contracts/shared/ComponentServiceManager.sol +1 -1
- package/contracts/shared/ComponentVerifyingService.sol +1 -1
- package/contracts/shared/ContractLib.sol +208 -9
- package/contracts/shared/IComponent.sol +3 -9
- package/contracts/shared/IComponentService.sol +9 -27
- 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 +3 -11
- package/contracts/shared/NftOwnable.sol +4 -4
- package/contracts/shared/PolicyHolder.sol +1 -1
- package/contracts/shared/Registerable.sol +45 -19
- package/contracts/shared/RegistryLinked.sol +1 -1
- package/contracts/shared/Service.sol +8 -27
- package/contracts/shared/TokenHandler.sol +40 -96
- package/contracts/staking/IStaking.sol +1 -9
- package/contracts/staking/IStakingService.sol +11 -1
- package/contracts/staking/StakeManagerLib.sol +63 -7
- package/contracts/staking/Staking.sol +45 -20
- package/contracts/staking/StakingReader.sol +1 -1
- package/contracts/staking/StakingService.sol +53 -57
- 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 +1 -1
- 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/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
| @@ -1,7 +1,6 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
         | 
| 5 4 | 
             
            import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
         | 
| 6 5 | 
             
            import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
         | 
| 7 6 |  | 
| @@ -19,14 +18,13 @@ import {Versionable} from "../upgradeability/Versionable.sol"; | |
| 19 18 | 
             
            abstract contract Service is 
         | 
| 20 19 | 
             
                Registerable,
         | 
| 21 20 | 
             
                Versionable,
         | 
| 22 | 
            -
                AccessManagedUpgradeable,
         | 
| 23 21 | 
             
                ReentrancyGuardUpgradeable,
         | 
| 24 22 | 
             
                IService
         | 
| 25 23 | 
             
            {
         | 
| 26 24 |  | 
| 27 | 
            -
                function  | 
| 28 | 
            -
                    address registry, 
         | 
| 25 | 
            +
                function __Service_init(
         | 
| 29 26 | 
             
                    address authority, // real authority for registry service adress(0) for other services
         | 
| 27 | 
            +
                    address registry, 
         | 
| 30 28 | 
             
                    address initialOwner
         | 
| 31 29 | 
             
                )
         | 
| 32 30 | 
             
                    internal
         | 
| @@ -35,17 +33,8 @@ abstract contract Service is | |
| 35 33 | 
             
                {
         | 
| 36 34 | 
             
                    __ReentrancyGuard_init();
         | 
| 37 35 |  | 
| 38 | 
            -
                     | 
| 39 | 
            -
             | 
| 40 | 
            -
                        __AccessManaged_init(authority);
         | 
| 41 | 
            -
                    } else {
         | 
| 42 | 
            -
                        address registryServiceAddress = _getServiceAddress(REGISTRY());
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                        // copy authority from already registered registry services
         | 
| 45 | 
            -
                        __AccessManaged_init(IAccessManaged(registryServiceAddress).authority());
         | 
| 46 | 
            -
                    }
         | 
| 47 | 
            -
             | 
| 48 | 
            -
                    _initializeRegisterable(
         | 
| 36 | 
            +
                    __Registerable_init(
         | 
| 37 | 
            +
                        authority,
         | 
| 49 38 | 
             
                        registry, 
         | 
| 50 39 | 
             
                        IRegistry(registry).getNftId(), 
         | 
| 51 40 | 
             
                        SERVICE(), 
         | 
| @@ -53,8 +42,6 @@ abstract contract Service is | |
| 53 42 | 
             
                        initialOwner, 
         | 
| 54 43 | 
             
                        ""); // data
         | 
| 55 44 |  | 
| 56 | 
            -
             | 
| 57 | 
            -
                    _registerInterface(type(IAccessManaged).interfaceId);
         | 
| 58 45 | 
             
                    _registerInterface(type(IService).interfaceId);
         | 
| 59 46 | 
             
                }
         | 
| 60 47 |  | 
| @@ -62,18 +49,12 @@ abstract contract Service is | |
| 62 49 | 
             
                    return _getDomain();
         | 
| 63 50 | 
             
                }
         | 
| 64 51 |  | 
| 65 | 
            -
                function  | 
| 66 | 
            -
                    return  | 
| 52 | 
            +
                function getVersion() public pure virtual override (IVersionable, Versionable) returns(Version) {
         | 
| 53 | 
            +
                    return VersionLib.toVersion(3, 0, 0);
         | 
| 67 54 | 
             
                }
         | 
| 68 55 |  | 
| 69 | 
            -
                 | 
| 70 | 
            -
             | 
| 71 | 
            -
                    public 
         | 
| 72 | 
            -
                    pure 
         | 
| 73 | 
            -
                    virtual override (IVersionable, Versionable)
         | 
| 74 | 
            -
                    returns(Version)
         | 
| 75 | 
            -
                {
         | 
| 76 | 
            -
                    return VersionLib.toVersion(GIF_RELEASE,0,0);
         | 
| 56 | 
            +
                function getRoleId() external virtual view returns(RoleId serviceRoleId) {
         | 
| 57 | 
            +
                    return RoleIdLib.roleForTypeAndVersion(_getDomain(), getRelease());
         | 
| 77 58 | 
             
                }
         | 
| 78 59 |  | 
| 79 60 | 
             
                function _getDomain() internal virtual pure returns (ObjectType);
         | 
| @@ -12,6 +12,10 @@ import {NftId} from "../type/NftId.sol"; | |
| 12 12 | 
             
            import {SERVICE} from "../type/ObjectType.sol";
         | 
| 13 13 |  | 
| 14 14 |  | 
| 15 | 
            +
            /// @dev Token specific transfer helper base contract.
         | 
| 16 | 
            +
            /// A default token contract is provided via contract constructor.
         | 
| 17 | 
            +
            /// Relies internally on OpenZeppelin SafeERC20.safeTransferFrom.
         | 
| 18 | 
            +
            /// This base contract simplifies writing tests.
         | 
| 15 19 | 
             
            contract TokenHandlerBase {
         | 
| 16 20 |  | 
| 17 21 | 
             
                // _setWallet
         | 
| @@ -36,10 +40,6 @@ contract TokenHandlerBase { | |
| 36 40 | 
             
                // _approveTokenHandler
         | 
| 37 41 | 
             
                error ErrorTokenHandlerNotWallet(NftId nftId, address tokenHandler, address wallet);
         | 
| 38 42 |  | 
| 39 | 
            -
                // _pullAndPullToken
         | 
| 40 | 
            -
                error ErrorTokenHandlerWalletsNotDistinct(address from, address to1, address to2);
         | 
| 41 | 
            -
                error ErrorTokenHandlerPushAmountsTooLarge(Amount pushAmount, Amount pullAmount);
         | 
| 42 | 
            -
             | 
| 43 43 | 
             
                // _checkPreconditions
         | 
| 44 44 | 
             
                error ErrorTokenHandlerBalanceTooLow(address token, address from, uint256 balance, uint256 expectedBalance);
         | 
| 45 45 | 
             
                error ErrorTokenHandlerAllowanceTooSmall(address token, address from, address spender, uint256 allowance, uint256 expectedAllowance);
         | 
| @@ -75,6 +75,23 @@ contract TokenHandlerBase { | |
| 75 75 | 
             
                    }
         | 
| 76 76 |  | 
| 77 77 | 
             
                    TOKEN = IERC20Metadata(token);
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                    // self approval of token handler to max amount
         | 
| 80 | 
            +
                    _approve(TOKEN, AmountLib.max());
         | 
| 81 | 
            +
                }
         | 
| 82 | 
            +
             | 
| 83 | 
            +
             | 
| 84 | 
            +
                /// @dev Checks the balance and allowance for the from address and amount.
         | 
| 85 | 
            +
                /// When requiring amount > 0 set checkAmount to true.
         | 
| 86 | 
            +
                function checkBalanceAndAllowance(
         | 
| 87 | 
            +
                    address from,
         | 
| 88 | 
            +
                    Amount amount,
         | 
| 89 | 
            +
                    bool checkAmount
         | 
| 90 | 
            +
                )
         | 
| 91 | 
            +
                    external
         | 
| 92 | 
            +
                    view
         | 
| 93 | 
            +
                {
         | 
| 94 | 
            +
                    _checkBalanceAndAllowance(from, amount, checkAmount);
         | 
| 78 95 | 
             
                }
         | 
| 79 96 |  | 
| 80 97 |  | 
| @@ -159,33 +176,6 @@ contract TokenHandlerBase { | |
| 159 176 | 
             
                }
         | 
| 160 177 |  | 
| 161 178 |  | 
| 162 | 
            -
                function _pullAndPushToken(
         | 
| 163 | 
            -
                    address from, 
         | 
| 164 | 
            -
                    Amount pullAmount,
         | 
| 165 | 
            -
                    address to1,
         | 
| 166 | 
            -
                    Amount amount1,
         | 
| 167 | 
            -
                    address to2,
         | 
| 168 | 
            -
                    Amount amount2
         | 
| 169 | 
            -
                )
         | 
| 170 | 
            -
                    internal
         | 
| 171 | 
            -
                {
         | 
| 172 | 
            -
                    address wallet = getWallet();
         | 
| 173 | 
            -
             | 
| 174 | 
            -
                    if (wallet == to1 || wallet == to2 || to1 == to2) {
         | 
| 175 | 
            -
                        revert ErrorTokenHandlerWalletsNotDistinct(wallet, to1, to2);
         | 
| 176 | 
            -
                    }
         | 
| 177 | 
            -
             | 
| 178 | 
            -
                    if (amount1 + amount2 > pullAmount) {
         | 
| 179 | 
            -
                        revert ErrorTokenHandlerPushAmountsTooLarge(amount1 + amount2, pullAmount);
         | 
| 180 | 
            -
                    }
         | 
| 181 | 
            -
             | 
| 182 | 
            -
                    _pullToken(from, pullAmount);
         | 
| 183 | 
            -
             | 
| 184 | 
            -
                    if (amount1.gtz()) { _pushToken(to1, amount1); }
         | 
| 185 | 
            -
                    if (amount2.gtz()) { _pushToken(to2, amount2); }
         | 
| 186 | 
            -
                }
         | 
| 187 | 
            -
             | 
| 188 | 
            -
             | 
| 189 179 | 
             
                function _pullToken(address from, Amount amount)
         | 
| 190 180 | 
             
                    internal
         | 
| 191 181 | 
             
                {
         | 
| @@ -209,8 +199,8 @@ contract TokenHandlerBase { | |
| 209 199 | 
             
                    internal
         | 
| 210 200 | 
             
                {
         | 
| 211 201 | 
             
                    if (checkPreconditions) {
         | 
| 212 | 
            -
                         | 
| 213 | 
            -
                         | 
| 202 | 
            +
                        bool checkAmount = true;
         | 
| 203 | 
            +
                        _checkBalanceAndAllowance(from, amount, checkAmount);
         | 
| 214 204 | 
             
                    }
         | 
| 215 205 |  | 
| 216 206 | 
             
                    // transfer the tokens
         | 
| @@ -224,15 +214,16 @@ contract TokenHandlerBase { | |
| 224 214 | 
             
                }
         | 
| 225 215 |  | 
| 226 216 |  | 
| 227 | 
            -
                function  | 
| 217 | 
            +
                function _checkBalanceAndAllowance(
         | 
| 228 218 | 
             
                    address from,
         | 
| 229 | 
            -
                    Amount amount
         | 
| 219 | 
            +
                    Amount amount,
         | 
| 220 | 
            +
                    bool checkAmount
         | 
| 230 221 | 
             
                ) 
         | 
| 231 222 | 
             
                    internal
         | 
| 232 223 | 
             
                    view
         | 
| 233 224 | 
             
                {
         | 
| 234 225 | 
             
                    // amount must be greater than zero
         | 
| 235 | 
            -
                    if (amount.eqz()) {
         | 
| 226 | 
            +
                    if (checkAmount && amount.eqz()) {
         | 
| 236 227 | 
             
                        revert ErrorTokenHandlerAmountIsZero();
         | 
| 237 228 | 
             
                    }
         | 
| 238 229 |  | 
| @@ -251,9 +242,9 @@ contract TokenHandlerBase { | |
| 251 242 | 
             
            }
         | 
| 252 243 |  | 
| 253 244 |  | 
| 254 | 
            -
            /// @dev Token specific transfer helper
         | 
| 255 | 
            -
            ///  | 
| 256 | 
            -
            ///  | 
| 245 | 
            +
            /// @dev Token specific transfer helper.
         | 
| 246 | 
            +
            /// Contract is derived from TokenHandlerBase and adds 
         | 
| 247 | 
            +
            /// authorization based on OpenZeppelin AccessManaged.
         | 
| 257 248 | 
             
            contract TokenHandler is
         | 
| 258 249 | 
             
                AccessManaged,
         | 
| 259 250 | 
             
                TokenHandlerBase
         | 
| @@ -262,17 +253,6 @@ contract TokenHandler is | |
| 262 253 | 
             
                // onlyService
         | 
| 263 254 | 
             
                error ErrorTokenHandlerNotService(address service);
         | 
| 264 255 |  | 
| 265 | 
            -
             | 
| 266 | 
            -
                error ErrorTokenHandlerRecipientWalletsMustBeDistinct(address to, address to2, address to3);
         | 
| 267 | 
            -
             | 
| 268 | 
            -
                // TODO cleanup
         | 
| 269 | 
            -
                // IRegistry public immutable REGISTRY;
         | 
| 270 | 
            -
                // IERC20Metadata public immutable TOKEN;
         | 
| 271 | 
            -
                // address public immutable COMPONENT;
         | 
| 272 | 
            -
                // NftId public immutable NFT_ID;
         | 
| 273 | 
            -
             | 
| 274 | 
            -
                // address private _wallet;
         | 
| 275 | 
            -
             | 
| 276 256 | 
             
                modifier onlyService() {
         | 
| 277 257 | 
             
                    if (!REGISTRY.isObjectType(msg.sender, SERVICE())) {
         | 
| 278 258 | 
             
                        revert ErrorTokenHandlerNotService(msg.sender);
         | 
| @@ -297,7 +277,7 @@ contract TokenHandler is | |
| 297 277 | 
             
                /// covers the current component balance must exist
         | 
| 298 278 | 
             
                function setWallet(address newWallet)
         | 
| 299 279 | 
             
                    external
         | 
| 300 | 
            -
                     | 
| 280 | 
            +
                    restricted()
         | 
| 301 281 | 
             
                    onlyService()
         | 
| 302 282 | 
             
                {
         | 
| 303 283 | 
             
                    _setWallet(newWallet);
         | 
| @@ -313,7 +293,7 @@ contract TokenHandler is | |
| 313 293 | 
             
                    Amount amount
         | 
| 314 294 | 
             
                )
         | 
| 315 295 | 
             
                    external
         | 
| 316 | 
            -
                     | 
| 296 | 
            +
                    restricted()
         | 
| 317 297 | 
             
                    onlyService()
         | 
| 318 298 | 
             
                {
         | 
| 319 299 | 
             
                    _approve(token, amount);
         | 
| @@ -321,69 +301,34 @@ contract TokenHandler is | |
| 321 301 |  | 
| 322 302 | 
             
                /// @dev Collect tokens from outside of GIF and transfer them to the wallet.
         | 
| 323 303 | 
             
                /// This method also checks balance and allowance and makes sure the amount is greater than zero.
         | 
| 324 | 
            -
                function  | 
| 304 | 
            +
                function pullToken(
         | 
| 325 305 | 
             
                    address from,
         | 
| 326 306 | 
             
                    Amount amount
         | 
| 327 307 | 
             
                )
         | 
| 328 308 | 
             
                    external
         | 
| 329 | 
            -
                     | 
| 309 | 
            +
                    restricted()
         | 
| 330 310 | 
             
                    onlyService()
         | 
| 331 311 | 
             
                {
         | 
| 332 312 | 
             
                    _pullToken(from, amount);
         | 
| 333 313 | 
             
                }
         | 
| 334 314 |  | 
| 335 315 |  | 
| 336 | 
            -
                /// @dev  | 
| 337 | 
            -
                /// This method also checks balance and allowance and makes sure the amount is greater than zero.
         | 
| 316 | 
            +
                /// @dev Distribute tokens from a wallet within the scope of gif to some address.
         | 
| 338 317 | 
             
                function pushToken(
         | 
| 339 | 
            -
                    address from,
         | 
| 340 | 
            -
                    Amount amount
         | 
| 341 | 
            -
                )
         | 
| 342 | 
            -
                    external
         | 
| 343 | 
            -
                    // restricted() // TODO re-activate
         | 
| 344 | 
            -
                    onlyService()
         | 
| 345 | 
            -
                {
         | 
| 346 | 
            -
                    _pushToken(from, amount);
         | 
| 347 | 
            -
                }
         | 
| 348 | 
            -
             | 
| 349 | 
            -
             | 
| 350 | 
            -
                /// @dev collect tokens from outside of the gif and transfer them to three distinct wallets within the scope of gif
         | 
| 351 | 
            -
                /// This method also checks balance and allowance and makes sure the amount is greater than zero.
         | 
| 352 | 
            -
                function collectTokensToThreeRecipients( 
         | 
| 353 | 
            -
                    address from,
         | 
| 354 318 | 
             
                    address to,
         | 
| 355 | 
            -
                    Amount amount | 
| 356 | 
            -
                    address to2,
         | 
| 357 | 
            -
                    Amount amount2,
         | 
| 358 | 
            -
                    address to3,
         | 
| 359 | 
            -
                    Amount amount3
         | 
| 319 | 
            +
                    Amount amount
         | 
| 360 320 | 
             
                )
         | 
| 361 321 | 
             
                    external
         | 
| 362 322 | 
             
                    restricted()
         | 
| 363 323 | 
             
                    onlyService()
         | 
| 364 324 | 
             
                {
         | 
| 365 | 
            -
                     | 
| 366 | 
            -
                        revert ErrorTokenHandlerRecipientWalletsMustBeDistinct(to, to2, to3);
         | 
| 367 | 
            -
                    }
         | 
| 368 | 
            -
             | 
| 369 | 
            -
                    _checkPreconditions(from, amount + amount2 + amount3);
         | 
| 370 | 
            -
             | 
| 371 | 
            -
                    if (amount.gtz()) {
         | 
| 372 | 
            -
                        _transfer(from, to, amount, false);
         | 
| 373 | 
            -
                    }
         | 
| 374 | 
            -
                    if (amount2.gtz()) {
         | 
| 375 | 
            -
                        _transfer(from, to2, amount2, false);
         | 
| 376 | 
            -
                    }
         | 
| 377 | 
            -
                    if (amount3.gtz()) {
         | 
| 378 | 
            -
                        _transfer(from, to3, amount3, false);
         | 
| 379 | 
            -
                    }
         | 
| 325 | 
            +
                    _pushToken(to, amount);
         | 
| 380 326 | 
             
                }
         | 
| 381 327 |  | 
| 382 328 |  | 
| 383 | 
            -
                /// @dev  | 
| 384 | 
            -
                ///  | 
| 385 | 
            -
                function  | 
| 386 | 
            -
                    address from,
         | 
| 329 | 
            +
                /// @dev Distribute fee tokens from a wallet within the scope of gif to some address.
         | 
| 330 | 
            +
                /// Separate push function for component service.
         | 
| 331 | 
            +
                function pushFeeToken(
         | 
| 387 332 | 
             
                    address to,
         | 
| 388 333 | 
             
                    Amount amount
         | 
| 389 334 | 
             
                )
         | 
| @@ -391,7 +336,6 @@ contract TokenHandler is | |
| 391 336 | 
             
                    restricted()
         | 
| 392 337 | 
             
                    onlyService()
         | 
| 393 338 | 
             
                {
         | 
| 394 | 
            -
                    // _transfer(from, to, amount, true);
         | 
| 395 339 | 
             
                    _pushToken(to, amount);
         | 
| 396 340 | 
             
                }
         | 
| 397 341 | 
             
            }
         | 
| @@ -132,7 +132,7 @@ interface IStaking is | |
| 132 132 | 
             
                /// @dev restakes the dips to a new target.
         | 
| 133 133 | 
             
                /// the sum of the staked dips and the accumulated rewards will be restaked.
         | 
| 134 134 | 
             
                /// permissioned: only staking service may call this function.
         | 
| 135 | 
            -
                function restake(NftId stakeNftId, NftId  | 
| 135 | 
            +
                function restake(NftId stakeNftId, NftId newStakeNftId) external returns (Amount newStakeBalance);
         | 
| 136 136 |  | 
| 137 137 | 
             
                /// @dev retuns the specified amount of dips to the holder of the specified stake nft.
         | 
| 138 138 | 
             
                /// if dipAmount is set to Amount.max() all staked dips and all rewards are transferred to 
         | 
| @@ -158,14 +158,6 @@ interface IStaking is | |
| 158 158 | 
             
                        Amount rewardsClaimedAmount
         | 
| 159 159 | 
             
                    );
         | 
| 160 160 |  | 
| 161 | 
            -
                //--- helper functions --------------------------------------------------//
         | 
| 162 | 
            -
             | 
| 163 | 
            -
                // /// @dev transfers the specified amount of dips from the from address to the staking wallet.
         | 
| 164 | 
            -
                // function collectDipAmount(address from, Amount dipAmount) external;
         | 
| 165 | 
            -
             | 
| 166 | 
            -
                // /// @dev transfers the specified amount of dips from the staking wallet to the to addess.
         | 
| 167 | 
            -
                // function transferDipAmount(address to, Amount dipAmount) external;
         | 
| 168 | 
            -
             | 
| 169 161 | 
             
                //--- view and pure functions -------------------------------------------//
         | 
| 170 162 |  | 
| 171 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);
         | 
| @@ -4,7 +4,7 @@ pragma solidity ^0.8.20; | |
| 4 4 | 
             
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 5 5 |  | 
| 6 6 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 7 | 
            -
            import { | 
| 7 | 
            +
            import {IRelease} from "../registry/IRelease.sol";
         | 
| 8 8 | 
             
            import {IStaking} from "./IStaking.sol";
         | 
| 9 9 | 
             
            import {IVersionable} from "../upgradeability/IVersionable.sol";
         | 
| 10 10 |  | 
| @@ -13,8 +13,9 @@ import {Component} from "../shared/Component.sol"; | |
| 13 13 | 
             
            import {IComponent} from "../shared/IComponent.sol";
         | 
| 14 14 | 
             
            import {IComponentService} from "../shared/IComponentService.sol";
         | 
| 15 15 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 16 | 
            -
            import {ObjectType,  | 
| 16 | 
            +
            import {ObjectType, STAKE, STAKING} from "../type/ObjectType.sol";
         | 
| 17 17 | 
             
            import {Seconds} from "../type/Seconds.sol";
         | 
| 18 | 
            +
            import {Registerable} from "../shared/Registerable.sol";
         | 
| 18 19 | 
             
            import {StakeManagerLib} from "./StakeManagerLib.sol";
         | 
| 19 20 | 
             
            import {StakingReader} from "./StakingReader.sol";
         | 
| 20 21 | 
             
            import {StakingStore} from "./StakingStore.sol";
         | 
| @@ -24,7 +25,7 @@ import {TokenHandler} from "../shared/TokenHandler.sol"; | |
| 24 25 | 
             
            import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
         | 
| 25 26 | 
             
            import {TokenRegistry} from "../registry/TokenRegistry.sol";
         | 
| 26 27 | 
             
            import {UFixed} from "../type/UFixed.sol";
         | 
| 27 | 
            -
            import {Version, VersionLib} from "../type/Version.sol";
         | 
| 28 | 
            +
            import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
         | 
| 28 29 | 
             
            import {Versionable} from "../upgradeability/Versionable.sol";
         | 
| 29 30 |  | 
| 30 31 | 
             
            contract Staking is 
         | 
| @@ -38,7 +39,6 @@ contract Staking is | |
| 38 39 | 
             
                bytes32 public constant STAKING_LOCATION_V1 = 0xafe8d4462b2ed26a47154f4b8f6d1497d2f772496965791d25bd456e342b7f00;
         | 
| 39 40 |  | 
| 40 41 | 
             
                struct StakingStorage {
         | 
| 41 | 
            -
                    IRegistryService _registryService;
         | 
| 42 42 | 
             
                    TokenRegistry _tokenRegistry;
         | 
| 43 43 | 
             
                    TokenHandler _tokenHandler;
         | 
| 44 44 | 
             
                    StakingStore _store;
         | 
| @@ -77,6 +77,16 @@ contract Staking is | |
| 77 77 | 
             
                        getRegistry().getAuthority());
         | 
| 78 78 | 
             
                }
         | 
| 79 79 |  | 
| 80 | 
            +
             | 
| 81 | 
            +
                function approveTokenHandler(IERC20Metadata token, Amount amount)
         | 
| 82 | 
            +
                    public
         | 
| 83 | 
            +
                    restricted()
         | 
| 84 | 
            +
                    onlyOwner()
         | 
| 85 | 
            +
                {
         | 
| 86 | 
            +
                    _approveTokenHandler(token, amount);
         | 
| 87 | 
            +
                }
         | 
| 88 | 
            +
             | 
| 89 | 
            +
             | 
| 80 90 | 
             
                // set/update staking reader
         | 
| 81 91 | 
             
                function setStakingReader(StakingReader stakingReader)
         | 
| 82 92 | 
             
                    external
         | 
| @@ -306,21 +316,26 @@ contract Staking is | |
| 306 316 |  | 
| 307 317 | 
             
                function restake(
         | 
| 308 318 | 
             
                    NftId stakeNftId, 
         | 
| 309 | 
            -
                    NftId  | 
| 319 | 
            +
                    NftId newStakeNftId
         | 
| 310 320 | 
             
                )
         | 
| 311 321 | 
             
                    external
         | 
| 312 322 | 
             
                    virtual
         | 
| 313 323 | 
             
                    restricted() // only staking service
         | 
| 314 324 | 
             
                    onlyStake(stakeNftId)
         | 
| 315 | 
            -
                    returns ( | 
| 325 | 
            +
                    returns (Amount newStakeBalance)
         | 
| 316 326 | 
             
                {
         | 
| 327 | 
            +
                    _checkNftType(stakeNftId, STAKE());
         | 
| 328 | 
            +
                    _checkNftType(newStakeNftId, STAKE());
         | 
| 329 | 
            +
             | 
| 317 330 | 
             
                    // TODO add check that allows additional staking amount
         | 
| 318 331 | 
             
                    StakingStorage storage $ = _getStakingStorage();
         | 
| 319 | 
            -
             | 
| 320 | 
            -
             | 
| 332 | 
            +
                    newStakeBalance = StakeManagerLib.restake(
         | 
| 333 | 
            +
                        $._reader,
         | 
| 334 | 
            +
                        $._store,
         | 
| 335 | 
            +
                        stakeNftId,
         | 
| 336 | 
            +
                        newStakeNftId);    
         | 
| 321 337 | 
             
                }
         | 
| 322 338 |  | 
| 323 | 
            -
             | 
| 324 339 | 
             
                function updateRewards(NftId stakeNftId)
         | 
| 325 340 | 
             
                    external
         | 
| 326 341 | 
             
                    virtual
         | 
| @@ -407,14 +422,24 @@ contract Staking is | |
| 407 422 | 
             
                    return _getStakingStorage()._tokenHandler;
         | 
| 408 423 | 
             
                }
         | 
| 409 424 |  | 
| 410 | 
            -
                // 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
         | 
| 411 436 | 
             
                function getVersion()
         | 
| 412 437 | 
             
                    public 
         | 
| 413 438 | 
             
                    pure 
         | 
| 414 | 
            -
                    virtual override (IVersionable, Versionable)
         | 
| 439 | 
            +
                    virtual override (Component, IVersionable, Versionable)
         | 
| 415 440 | 
             
                    returns(Version)
         | 
| 416 441 | 
             
                {
         | 
| 417 | 
            -
                    return VersionLib.toVersion( | 
| 442 | 
            +
                    return VersionLib.toVersion(3,0,0);
         | 
| 418 443 | 
             
                }
         | 
| 419 444 |  | 
| 420 445 | 
             
                //--- internal functions ------------------------------------------------//
         | 
| @@ -447,7 +472,7 @@ contract Staking is | |
| 447 472 | 
             
                    internal
         | 
| 448 473 | 
             
                    virtual override
         | 
| 449 474 | 
             
                {
         | 
| 450 | 
            -
                    IComponentService(_getServiceAddress( | 
| 475 | 
            +
                    IComponentService(_getServiceAddress(STAKING())).approveTokenHandler(
         | 
| 451 476 | 
             
                        token, 
         | 
| 452 477 | 
             
                        amount);
         | 
| 453 478 | 
             
                }
         | 
| @@ -474,6 +499,13 @@ contract Staking is | |
| 474 499 | 
             
                    TokenRegistry tokenRegistry = TokenRegistry(tokenRegistryAddress);
         | 
| 475 500 | 
             
                    address dipTokenAddress = tokenRegistry.getDipTokenAddress();
         | 
| 476 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 | 
            +
             | 
| 477 509 | 
             
                    _initializeComponent(
         | 
| 478 510 | 
             
                        authority,
         | 
| 479 511 | 
             
                        registryAddress, 
         | 
| @@ -486,13 +518,6 @@ contract Staking is | |
| 486 518 | 
             
                        "", // registry data
         | 
| 487 519 | 
             
                        ""); // component data
         | 
| 488 520 |  | 
| 489 | 
            -
                    // wiring to external contracts
         | 
| 490 | 
            -
                    StakingStorage storage $ = _getStakingStorage();
         | 
| 491 | 
            -
                    $._protocolNftId = getRegistry().getProtocolNftId();
         | 
| 492 | 
            -
                    $._store = StakingStore(stakingStoreAddress);
         | 
| 493 | 
            -
                    $._reader = StakingStore(stakingStoreAddress).getStakingReader();
         | 
| 494 | 
            -
                    $._tokenRegistry = TokenRegistry(tokenRegistryAddress);
         | 
| 495 | 
            -
             | 
| 496 521 | 
             
                    _registerInterface(type(IStaking).interfaceId);
         | 
| 497 522 | 
             
                }
         | 
| 498 523 |  |