@etherisc/gif-next 0.0.2-bafc958-412 → 0.0.2-bb3faee-097
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 +84 -7
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1075 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +790 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +843 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +673 -262
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +1289 -0
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +202 -5
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +456 -24
- 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 +549 -209
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +215 -18
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +265 -16
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +473 -17
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +204 -302
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +431 -36
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +123 -186
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +634 -225
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +229 -86
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +102 -160
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +429 -77
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +247 -226
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +430 -35
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +711 -318
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +430 -35
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +2 -2
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +293 -265
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +805 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +175 -175
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +363 -233
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +805 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +986 -379
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +805 -0
- 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 +567 -67
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +385 -60
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +597 -100
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1034 -311
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +369 -68
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1612 -816
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +411 -131
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +153 -64
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +830 -625
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +866 -0
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +8 -8
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
- 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 +161 -183
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +429 -37
- 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 +116 -109
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +98 -11
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +137 -135
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +201 -81
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +187 -56
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +185 -191
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +430 -35
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +355 -279
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +182 -87
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +247 -121
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +152 -156
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +478 -227
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +165 -174
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +522 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +743 -379
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +237 -66
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +361 -57
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +176 -53
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +297 -234
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +430 -35
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +370 -159
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +194 -83
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +296 -9
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +242 -24
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +299 -48
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +140 -37
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +270 -202
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +286 -21
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +451 -151
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +783 -0
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +213 -74
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +201 -129
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +167 -68
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +287 -224
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +372 -82
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +176 -53
- 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 +144 -33
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +169 -37
- 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/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +188 -69
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +753 -454
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1074 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +139 -181
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +151 -48
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +2152 -0
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +478 -258
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +489 -20
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +120 -60
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +113 -93
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +502 -519
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +198 -89
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +632 -0
- 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 +93 -68
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +432 -290
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +116 -109
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +42 -6
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +35 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +16 -6
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +167 -0
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +84 -2
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -2
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +136 -134
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +48 -7
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -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 +37 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +18 -8
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +171 -38
- 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 +89 -2
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +327 -73
- 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 +88 -24
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1492 -173
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +235 -123
- package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.dbg.json +4 -0
- package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.json +50 -0
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +1657 -284
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +470 -0
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +210 -69
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +295 -183
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +286 -173
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +154 -55
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +1588 -765
- package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +4 -0
- package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +309 -0
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +160 -88
- 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 +35 -11
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +45 -19
- package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +193 -0
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +94 -38
- 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 +33 -31
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +69 -7
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +42 -157
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +45 -2
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/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/StateId.sol/StateIdLib.json +15 -2
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/String.sol/StrLib.json +50 -2
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +3 -3
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +73 -36
- 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 +101 -2
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.json +10 -0
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +128 -38
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +15 -2
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.json +10 -0
- package/contracts/accounting/AccountingService.sol +274 -0
- package/contracts/accounting/AccountingServiceManager.sol +38 -0
- package/contracts/accounting/IAccountingService.sol +47 -0
- package/contracts/authorization/AccessAdmin.sol +457 -266
- package/contracts/authorization/AccessAdminLib.sol +396 -0
- package/contracts/authorization/AccessManagerCloneable.sol +146 -4
- package/contracts/authorization/Authorization.sol +159 -207
- package/contracts/authorization/IAccess.sol +25 -6
- package/contracts/authorization/IAccessAdmin.sol +87 -79
- package/contracts/authorization/IAuthorization.sol +9 -37
- package/contracts/authorization/IServiceAuthorization.sol +57 -17
- package/contracts/authorization/ServiceAuthorization.sol +255 -25
- package/contracts/distribution/BasicDistribution.sol +20 -17
- package/contracts/distribution/BasicDistributionAuthorization.sol +30 -10
- package/contracts/distribution/Distribution.sol +43 -91
- package/contracts/distribution/DistributionService.sol +224 -112
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionComponent.sol +4 -11
- package/contracts/distribution/IDistributionService.sol +38 -24
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +24 -14
- package/contracts/examples/fire/FirePoolAuthorization.sol +2 -1
- package/contracts/examples/fire/FireProduct.sol +223 -106
- package/contracts/examples/fire/FireProductAuthorization.sol +29 -0
- package/contracts/examples/fire/FireUSD.sol +1 -1
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +43 -12
- package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +8 -12
- package/contracts/examples/unpermissioned/SimplePool.sol +36 -10
- package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +134 -48
- package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
- package/contracts/instance/BundleSet.sol +42 -38
- package/contracts/instance/IInstance.sol +100 -18
- package/contracts/instance/IInstanceService.sol +59 -34
- package/contracts/instance/Instance.sol +188 -70
- package/contracts/instance/InstanceAdmin.sol +276 -178
- package/contracts/instance/InstanceAuthorizationV3.sol +118 -56
- package/contracts/instance/InstanceReader.sol +472 -270
- package/contracts/instance/InstanceService.sol +273 -240
- package/contracts/instance/InstanceServiceManager.sol +6 -7
- package/contracts/instance/InstanceStore.sol +13 -2
- package/contracts/instance/RiskSet.sol +126 -0
- package/contracts/instance/base/BalanceStore.sol +4 -6
- package/contracts/instance/base/ObjectCounter.sol +1 -2
- package/contracts/instance/base/ObjectLifecycle.sol +6 -8
- package/contracts/instance/base/ObjectSet.sol +31 -33
- package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
- package/contracts/instance/module/IBundle.sol +6 -5
- package/contracts/instance/module/IComponents.sol +29 -13
- package/contracts/instance/module/IDistribution.sol +21 -8
- package/contracts/instance/module/IPolicy.sol +30 -9
- package/contracts/instance/module/IRisk.sol +5 -0
- package/contracts/oracle/BasicOracle.sol +2 -5
- package/contracts/oracle/BasicOracleAuthorization.sol +15 -8
- package/contracts/oracle/IOracle.sol +9 -4
- package/contracts/oracle/IOracleService.sol +2 -1
- package/contracts/oracle/Oracle.sol +7 -20
- package/contracts/oracle/OracleService.sol +117 -86
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +34 -38
- package/contracts/pool/BasicPoolAuthorization.sol +34 -11
- package/contracts/pool/BundleService.sol +115 -167
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +28 -46
- package/contracts/pool/IPoolComponent.sol +19 -15
- package/contracts/pool/IPoolService.sol +77 -67
- package/contracts/pool/Pool.sol +140 -133
- package/contracts/pool/PoolLib.sol +341 -0
- package/contracts/pool/PoolService.sol +355 -250
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +108 -29
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +10 -14
- package/contracts/product/BasicProductAuthorization.sol +32 -12
- package/contracts/product/ClaimService.sol +318 -175
- package/contracts/product/ClaimServiceManager.sol +4 -4
- package/contracts/product/IApplicationService.sol +28 -3
- package/contracts/product/IClaimService.sol +21 -7
- package/contracts/product/IPolicyService.sol +41 -12
- package/contracts/product/IPricingService.sol +10 -9
- package/contracts/product/IProductComponent.sol +27 -4
- package/contracts/product/IRiskService.sol +25 -10
- package/contracts/product/PolicyService.sol +350 -278
- package/contracts/product/PolicyServiceLib.sol +139 -0
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +59 -54
- package/contracts/product/PricingServiceManager.sol +4 -4
- package/contracts/product/Product.sol +153 -85
- package/contracts/product/RiskService.sol +129 -36
- package/contracts/product/RiskServiceManager.sol +4 -4
- package/contracts/registry/ChainNft.sol +10 -11
- package/contracts/registry/IRegistry.sol +31 -27
- package/contracts/registry/IRegistryService.sol +5 -12
- package/contracts/registry/IRelease.sol +29 -0
- package/contracts/registry/ITransferInterceptor.sol +1 -2
- package/contracts/registry/Registry.sol +51 -17
- package/contracts/registry/RegistryAdmin.sol +107 -380
- package/contracts/registry/RegistryAuthorization.sol +336 -0
- package/contracts/registry/RegistryService.sol +37 -48
- package/contracts/registry/RegistryServiceManager.sol +3 -3
- package/contracts/registry/ReleaseAdmin.sol +195 -0
- package/contracts/registry/ReleaseLifecycle.sol +8 -3
- package/contracts/registry/ReleaseRegistry.sol +278 -244
- package/contracts/registry/ServiceAuthorizationV3.sol +204 -61
- package/contracts/registry/TokenRegistry.sol +61 -59
- package/contracts/shared/Component.sol +65 -119
- package/contracts/shared/ComponentService.sol +422 -376
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ContractLib.sol +312 -0
- package/contracts/shared/IComponent.sol +6 -18
- package/contracts/shared/IComponentService.sol +43 -40
- package/contracts/shared/IInstanceLinkedComponent.sol +3 -22
- package/contracts/shared/IKeyValueStore.sol +1 -1
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/INftOwnable.sol +4 -0
- package/contracts/shared/IPolicyHolder.sol +12 -13
- package/contracts/shared/IRegisterable.sol +22 -1
- package/contracts/shared/IService.sol +3 -5
- package/contracts/shared/InitializableERC165.sol +9 -1
- package/contracts/shared/InstanceLinkedComponent.sol +71 -49
- package/contracts/shared/KeyValueStore.sol +4 -4
- package/contracts/shared/Lifecycle.sol +15 -4
- package/contracts/shared/NftOwnable.sol +29 -7
- package/contracts/shared/PolicyHolder.sol +15 -8
- package/contracts/shared/Registerable.sol +50 -19
- package/contracts/shared/RegistryLinked.sol +7 -13
- package/contracts/shared/Service.sol +18 -33
- package/contracts/shared/TokenHandler.sol +275 -72
- package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
- package/contracts/staking/IStaking.sol +271 -72
- package/contracts/staking/IStakingService.sol +45 -78
- package/contracts/staking/ITargetLimitHandler.sol +17 -0
- package/contracts/staking/Staking.sol +522 -223
- package/contracts/staking/{StakeManagerLib.sol → StakingLib.sol} +55 -84
- package/contracts/staking/StakingManager.sol +12 -9
- package/contracts/staking/StakingReader.sol +70 -82
- package/contracts/staking/StakingService.sol +62 -148
- package/contracts/staking/StakingServiceManager.sol +7 -5
- package/contracts/staking/StakingStore.sol +1087 -330
- package/contracts/staking/TargetHandler.sol +132 -0
- package/contracts/staking/TargetManagerLib.sol +69 -46
- package/contracts/type/Amount.sol +19 -0
- package/contracts/type/Blocknumber.sol +15 -15
- package/contracts/type/ChainId.sol +101 -0
- package/contracts/type/ClaimId.sol +6 -1
- package/contracts/type/Fee.sol +8 -8
- package/contracts/type/Key32.sol +2 -2
- package/contracts/type/Key32Set.sol +62 -0
- package/contracts/type/NftId.sol +7 -0
- package/contracts/type/ObjectType.sol +70 -38
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/RiskId.sol +27 -9
- package/contracts/type/RoleId.sol +61 -55
- package/contracts/type/Seconds.sol +19 -0
- package/contracts/type/Selector.sol +5 -0
- package/contracts/type/StateId.sol +14 -1
- package/contracts/type/String.sol +12 -0
- package/contracts/type/Timestamp.sol +4 -7
- package/contracts/type/UFixed.sol +38 -126
- package/contracts/type/Version.sol +54 -5
- package/contracts/upgradeability/IVersionable.sol +3 -0
- package/contracts/upgradeability/ProxyManager.sol +93 -45
- package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +12 -2
- package/contracts/upgradeability/Versionable.sol +8 -5
- package/package.json +5 -4
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
- 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/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +0 -427
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -440
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +0 -4
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +0 -164
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
- package/contracts/authorization/IModuleAuthorization.sol +0 -21
- package/contracts/authorization/ModuleAuthorization.sol +0 -78
- package/contracts/instance/module/IAccess.sol +0 -46
- package/contracts/shared/ComponentVerifyingService.sol +0 -117
- package/contracts/shared/InitializableCustom.sol +0 -177
- package/contracts/staking/StakingLifecycle.sol +0 -23
@@ -1,128 +1,360 @@
|
|
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";
|
9
|
+
import {IStakingService} from "./IStakingService.sol";
|
10
|
+
import {ITargetLimitHandler} from "./ITargetLimitHandler.sol";
|
7
11
|
import {IVersionable} from "../upgradeability/IVersionable.sol";
|
8
12
|
|
9
13
|
import {Amount, AmountLib} from "../type/Amount.sol";
|
14
|
+
import {Blocknumber} from "../type/Blocknumber.sol";
|
15
|
+
import {ChainId, ChainIdLib} from "../type/ChainId.sol";
|
10
16
|
import {Component} from "../shared/Component.sol";
|
11
17
|
import {IComponent} from "../shared/IComponent.sol";
|
12
18
|
import {NftId} from "../type/NftId.sol";
|
13
|
-
import {ObjectType, STAKING} from "../type/ObjectType.sol";
|
14
|
-
import {Seconds} from "../type/Seconds.sol";
|
15
|
-
import {
|
19
|
+
import {ObjectType, PROTOCOL, INSTANCE, STAKE, STAKING, TARGET} from "../type/ObjectType.sol";
|
20
|
+
import {Seconds, SecondsLib} from "../type/Seconds.sol";
|
21
|
+
import {Registerable} from "../shared/Registerable.sol";
|
22
|
+
import {StakingLib} from "./StakingLib.sol";
|
16
23
|
import {StakingReader} from "./StakingReader.sol";
|
17
24
|
import {StakingStore} from "./StakingStore.sol";
|
18
|
-
import {
|
19
|
-
import {Timestamp} from "../type/Timestamp.sol";
|
25
|
+
import {TargetHandler} from "./TargetHandler.sol";
|
20
26
|
import {TokenHandler} from "../shared/TokenHandler.sol";
|
21
27
|
import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
|
22
28
|
import {TokenRegistry} from "../registry/TokenRegistry.sol";
|
23
|
-
import {UFixed} from "../type/UFixed.sol";
|
24
|
-
import {Version, VersionLib} from "../type/Version.sol";
|
29
|
+
import {UFixed, UFixedLib} from "../type/UFixed.sol";
|
30
|
+
import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
|
25
31
|
import {Versionable} from "../upgradeability/Versionable.sol";
|
26
32
|
|
33
|
+
|
27
34
|
contract Staking is
|
28
35
|
Component,
|
29
36
|
Versionable,
|
30
37
|
IStaking
|
31
38
|
{
|
32
39
|
string public constant CONTRACT_NAME = "Staking";
|
33
|
-
uint8 private constant GIF_MAJOR_VERSION = 3;
|
34
40
|
|
35
41
|
// keccak256(abi.encode(uint256(keccak256("gif-next.contracts.component.Staking.sol")) - 1)) & ~bytes32(uint256(0xff));
|
36
42
|
bytes32 public constant STAKING_LOCATION_V1 = 0xafe8d4462b2ed26a47154f4b8f6d1497d2f772496965791d25bd456e342b7f00;
|
37
43
|
|
38
44
|
struct StakingStorage {
|
39
|
-
IRegistryService _registryService;
|
40
45
|
TokenRegistry _tokenRegistry;
|
41
46
|
TokenHandler _tokenHandler;
|
47
|
+
IStakingService _stakingService;
|
48
|
+
TargetHandler _targetHandler;
|
42
49
|
StakingStore _store;
|
43
50
|
StakingReader _reader;
|
44
51
|
NftId _protocolNftId;
|
45
52
|
}
|
46
53
|
|
47
54
|
|
48
|
-
modifier
|
49
|
-
|
50
|
-
revert ErrorStakingNotStake(stakeNftId);
|
51
|
-
}
|
55
|
+
modifier onlyStakeOwner(NftId stakeNftId) {
|
56
|
+
_checkTypeAndOwner(stakeNftId, STAKE(), true);
|
52
57
|
_;
|
53
58
|
}
|
54
59
|
|
55
60
|
|
56
61
|
modifier onlyTarget(NftId targetNftId) {
|
57
|
-
|
58
|
-
revert ErrorStakingNotTarget(targetNftId);
|
59
|
-
}
|
62
|
+
_checkTypeAndOwner(targetNftId, TARGET(), false);
|
60
63
|
_;
|
61
64
|
}
|
62
65
|
|
63
|
-
|
64
|
-
|
66
|
+
|
67
|
+
modifier onlyTargetOwner(NftId targetNftId) {
|
68
|
+
_checkTypeAndOwner(targetNftId, TARGET(), true);
|
69
|
+
_;
|
70
|
+
}
|
71
|
+
|
72
|
+
//--- contract intitialization -------------------------------------------
|
73
|
+
|
74
|
+
function initializeTokenHandler()
|
75
|
+
external
|
76
|
+
virtual
|
77
|
+
{
|
78
|
+
if (msg.sender != address(getRegistry())) {
|
79
|
+
revert ErrorStakingNotRegistry(msg.sender);
|
80
|
+
}
|
81
|
+
|
82
|
+
StakingStorage storage $ = _getStakingStorage();
|
83
|
+
address dipToken = _getStakingStorage()._tokenRegistry.getDipTokenAddress();
|
84
|
+
$._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
|
85
|
+
address(getRegistry()),
|
86
|
+
address(this),
|
87
|
+
dipToken,
|
88
|
+
getRegistry().getAuthority());
|
89
|
+
}
|
90
|
+
|
91
|
+
|
92
|
+
//--- staking owner functions -------------------------------------------//
|
93
|
+
|
94
|
+
function setSupportInfo(
|
95
|
+
ObjectType targetType,
|
96
|
+
bool isSupported,
|
97
|
+
bool allowNewTargets,
|
98
|
+
bool allowCrossChain,
|
99
|
+
Amount minStakingAmount,
|
100
|
+
Amount maxStakingAmount,
|
101
|
+
Seconds minLockingPeriod,
|
102
|
+
Seconds maxLockingPeriod,
|
103
|
+
UFixed minRewardRate,
|
104
|
+
UFixed maxRewardRate
|
105
|
+
)
|
106
|
+
external
|
107
|
+
virtual
|
108
|
+
restricted()
|
109
|
+
onlyOwner()
|
110
|
+
{
|
111
|
+
StakingStorage storage $ = _getStakingStorage();
|
112
|
+
$._store.setSupportInfo(
|
113
|
+
targetType,
|
114
|
+
isSupported,
|
115
|
+
allowNewTargets,
|
116
|
+
allowCrossChain,
|
117
|
+
minStakingAmount,
|
118
|
+
maxStakingAmount,
|
119
|
+
minLockingPeriod,
|
120
|
+
maxLockingPeriod,
|
121
|
+
minRewardRate,
|
122
|
+
maxRewardRate);
|
123
|
+
}
|
124
|
+
|
125
|
+
|
126
|
+
/// @inheritdoc IStaking
|
127
|
+
function setUpdateTriggers(
|
128
|
+
uint16 tvlUpdatesTrigger,
|
129
|
+
UFixed minTvlRatioTrigger
|
130
|
+
)
|
131
|
+
external
|
132
|
+
restricted()
|
133
|
+
{
|
134
|
+
StakingStorage storage $ = _getStakingStorage();
|
135
|
+
$._targetHandler.setUpdateTriggers(tvlUpdatesTrigger, minTvlRatioTrigger);
|
136
|
+
}
|
137
|
+
|
138
|
+
|
139
|
+
/// @inheritdoc IStaking
|
140
|
+
function setProtocolLockingPeriod(Seconds newLockingPeriod)
|
141
|
+
external
|
142
|
+
virtual
|
143
|
+
restricted()
|
144
|
+
onlyOwner()
|
145
|
+
{
|
146
|
+
StakingStorage storage $ = _getStakingStorage();
|
147
|
+
$._store.setLockingPeriod($._protocolNftId, newLockingPeriod);
|
148
|
+
}
|
149
|
+
|
150
|
+
|
151
|
+
/// @inheritdoc IStaking
|
152
|
+
function setProtocolRewardRate(UFixed newRewardRate)
|
153
|
+
external
|
154
|
+
virtual
|
155
|
+
restricted()
|
156
|
+
onlyOwner()
|
157
|
+
{
|
158
|
+
StakingStorage storage $ = _getStakingStorage();
|
159
|
+
$._store.setRewardRate($._protocolNftId, newRewardRate);
|
160
|
+
}
|
161
|
+
|
162
|
+
|
163
|
+
/// @inheritdoc IStaking
|
164
|
+
function setStakingRate(
|
165
|
+
ChainId chainId,
|
166
|
+
address token,
|
167
|
+
UFixed stakingRate
|
168
|
+
)
|
169
|
+
external
|
170
|
+
virtual
|
171
|
+
restricted()
|
172
|
+
onlyOwner()
|
173
|
+
{
|
174
|
+
(
|
175
|
+
UFixed oldStakingRate,
|
176
|
+
Blocknumber lastUpdateIn
|
177
|
+
) = _getStakingStorage()._store.setStakingRate(chainId, token, stakingRate);
|
178
|
+
|
179
|
+
emit LogStakingStakingRateSet(chainId, token, stakingRate, oldStakingRate, lastUpdateIn);
|
180
|
+
}
|
181
|
+
|
182
|
+
|
183
|
+
/// @inheritdoc IStaking
|
184
|
+
function setStakingService(VersionPart release)
|
185
|
+
external
|
186
|
+
virtual
|
187
|
+
restricted()
|
188
|
+
onlyOwner()
|
189
|
+
{
|
190
|
+
// effects
|
191
|
+
StakingStorage storage $ = _getStakingStorage();
|
192
|
+
address oldStakingService = address($._stakingService);
|
193
|
+
$._stakingService = StakingLib.checkAndGetStakingService(getRegistry(), release);
|
194
|
+
|
195
|
+
emit LogStakingStakingServiceSet(address($._stakingService), release, oldStakingService);
|
196
|
+
}
|
197
|
+
|
198
|
+
|
199
|
+
/// @inheritdoc IStaking
|
200
|
+
function setStakingReader(address reader)
|
65
201
|
external
|
66
202
|
virtual
|
203
|
+
restricted()
|
67
204
|
onlyOwner()
|
68
205
|
{
|
206
|
+
StakingReader stakingReader = StakingReader(reader);
|
207
|
+
|
69
208
|
if(stakingReader.getStaking() != IStaking(this)) {
|
70
209
|
revert ErrorStakingStakingReaderStakingMismatch(address(stakingReader.getStaking()));
|
71
210
|
}
|
72
211
|
|
73
|
-
_getStakingStorage()
|
212
|
+
StakingStorage storage $ = _getStakingStorage();
|
213
|
+
$._reader = stakingReader;
|
214
|
+
$._store.setStakingReader(reader);
|
74
215
|
}
|
75
216
|
|
76
217
|
|
77
|
-
//
|
78
|
-
|
218
|
+
// TODO move to TargetHandler?
|
219
|
+
/// @inheritdoc IStaking
|
220
|
+
function addToken(
|
221
|
+
ChainId chainId,
|
222
|
+
address token
|
223
|
+
)
|
79
224
|
external
|
80
225
|
virtual
|
226
|
+
restricted()
|
227
|
+
onlyOwner()
|
228
|
+
{
|
229
|
+
_addToken(
|
230
|
+
_getStakingStorage(), chainId, token);
|
231
|
+
}
|
232
|
+
|
233
|
+
|
234
|
+
/// @inheritdoc IStaking
|
235
|
+
function approveTokenHandler(IERC20Metadata token, Amount amount)
|
236
|
+
public
|
237
|
+
virtual
|
238
|
+
restricted()
|
81
239
|
onlyOwner()
|
82
240
|
{
|
83
241
|
StakingStorage storage $ = _getStakingStorage();
|
84
|
-
|
85
|
-
|
86
|
-
|
242
|
+
Amount oldAllowanceAmount = AmountLib.toAmount(
|
243
|
+
token.allowance(
|
244
|
+
address(this),
|
245
|
+
address($._tokenHandler)));
|
246
|
+
|
247
|
+
// staking token handler approval via its own implementation in staking service
|
248
|
+
$._stakingService.approveTokenHandler(
|
249
|
+
token,
|
250
|
+
amount);
|
251
|
+
|
252
|
+
emit LogStakingTokenHandlerApproved(address(token), amount, oldAllowanceAmount);
|
253
|
+
}
|
254
|
+
|
255
|
+
//--- target management -------------------------------------------------//
|
256
|
+
|
257
|
+
|
258
|
+
/// @inheritdoc IStaking
|
259
|
+
function refillRewardReserves(NftId targetNftId, Amount dipAmount)
|
260
|
+
external
|
261
|
+
virtual
|
262
|
+
restricted()
|
263
|
+
onlyTarget(targetNftId)
|
264
|
+
returns (Amount newBalance)
|
265
|
+
{
|
266
|
+
address transferFrom = msg.sender;
|
267
|
+
_refillRewardReserves(targetNftId, dipAmount, transferFrom);
|
268
|
+
}
|
269
|
+
|
270
|
+
|
271
|
+
/// @inheritdoc IStaking
|
272
|
+
function withdrawRewardReserves(NftId targetNftId, Amount dipAmount)
|
273
|
+
external
|
274
|
+
virtual
|
275
|
+
restricted()
|
276
|
+
onlyTarget(targetNftId)
|
277
|
+
returns (Amount newBalance)
|
278
|
+
{
|
279
|
+
address transferTo;
|
280
|
+
|
281
|
+
// case 1: protocol target: staking owner is recipient
|
282
|
+
if (targetNftId == getRegistry().getProtocolNftId()) {
|
283
|
+
// verify that the caller is the staking owner
|
284
|
+
transferTo = getOwner();
|
285
|
+
if (msg.sender != transferTo) {
|
286
|
+
revert ErrorStakingNotStakingOwner();
|
287
|
+
}
|
288
|
+
|
289
|
+
// case 2: same chain target: target owner is recipient
|
290
|
+
} else if (ChainIdLib.isCurrentChain(targetNftId)) {
|
291
|
+
// verify that the caller is the target owner
|
292
|
+
transferTo = getRegistry().ownerOf(targetNftId);
|
293
|
+
if (msg.sender != transferTo) {
|
294
|
+
revert ErrorStakingNotNftOwner(targetNftId);
|
295
|
+
}
|
296
|
+
|
297
|
+
// case 3: cross-chain target: TODO decide how to handle and implement
|
298
|
+
} else {
|
299
|
+
revert("Cross-chain target not supported");
|
87
300
|
}
|
88
301
|
|
89
|
-
|
90
|
-
|
302
|
+
newBalance = _withdrawRewardReserves(targetNftId, dipAmount, transferTo);
|
303
|
+
}
|
304
|
+
|
305
|
+
|
306
|
+
/// @inheritdoc IStaking
|
307
|
+
function refillRewardReservesByService(NftId targetNftId, Amount dipAmount, address transferFrom)
|
308
|
+
external
|
309
|
+
virtual
|
310
|
+
restricted()
|
311
|
+
onlyTarget(targetNftId)
|
312
|
+
returns (Amount newBalance)
|
313
|
+
{
|
314
|
+
_refillRewardReserves(targetNftId, dipAmount, transferFrom);
|
315
|
+
}
|
316
|
+
|
317
|
+
|
318
|
+
/// @inheritdoc IStaking
|
319
|
+
function withdrawRewardReservesByService(NftId targetNftId, Amount dipAmount, address transferTo)
|
320
|
+
external
|
321
|
+
virtual
|
322
|
+
restricted()
|
323
|
+
onlyTarget(targetNftId)
|
324
|
+
returns (Amount newBalance)
|
325
|
+
{
|
326
|
+
// check that service does not withdraw from protocol target
|
327
|
+
if (targetNftId == getRegistry().getProtocolNftId()) {
|
328
|
+
revert ErrorStakingTargetTypeNotSupported(targetNftId, PROTOCOL());
|
329
|
+
}
|
91
330
|
|
92
|
-
|
331
|
+
// default: on-chain target owner is recipient
|
332
|
+
address targetOwner = getRegistry().ownerOf(targetNftId);
|
333
|
+
return _withdrawRewardReserves(targetNftId, dipAmount, targetOwner);
|
93
334
|
}
|
94
335
|
|
95
|
-
// target management
|
96
336
|
|
337
|
+
/// @inheritdoc IStaking
|
97
338
|
function registerTarget(
|
98
339
|
NftId targetNftId,
|
99
340
|
ObjectType expectedObjectType,
|
100
|
-
uint256 chainId,
|
101
341
|
Seconds initialLockingPeriod,
|
102
342
|
UFixed initialRewardRate
|
103
343
|
)
|
104
344
|
external
|
105
345
|
virtual
|
106
|
-
restricted()
|
346
|
+
restricted() // staking service
|
107
347
|
{
|
108
|
-
|
109
|
-
getRegistry(),
|
110
|
-
_getStakingStorage()._reader,
|
111
|
-
targetNftId,
|
112
|
-
expectedObjectType,
|
113
|
-
initialLockingPeriod,
|
114
|
-
initialRewardRate);
|
115
|
-
|
348
|
+
// checks done by staking store
|
116
349
|
_getStakingStorage()._store.createTarget(
|
117
350
|
targetNftId,
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
lockingPeriod: initialLockingPeriod,
|
122
|
-
rewardRate: initialRewardRate}));
|
351
|
+
expectedObjectType,
|
352
|
+
initialLockingPeriod,
|
353
|
+
initialRewardRate);
|
123
354
|
}
|
124
355
|
|
125
356
|
|
357
|
+
/// @inheritdoc IStaking
|
126
358
|
function setLockingPeriod(
|
127
359
|
NftId targetNftId,
|
128
360
|
Seconds lockingPeriod
|
@@ -132,92 +364,88 @@ contract Staking is
|
|
132
364
|
restricted()
|
133
365
|
onlyTarget(targetNftId)
|
134
366
|
{
|
135
|
-
(
|
136
|
-
Seconds oldLockingPeriod,
|
137
|
-
TargetInfo memory targetInfo
|
138
|
-
) = TargetManagerLib.updateLockingPeriod(
|
139
|
-
this,
|
140
|
-
targetNftId,
|
141
|
-
lockingPeriod);
|
142
|
-
|
143
|
-
_getStakingStorage()._store.updateTarget(targetNftId, targetInfo);
|
144
|
-
|
145
|
-
emit LogStakingLockingPeriodSet(targetNftId, oldLockingPeriod, lockingPeriod);
|
367
|
+
_getStakingStorage()._store.setLockingPeriod(targetNftId, lockingPeriod);
|
146
368
|
}
|
147
369
|
|
148
|
-
// TODO add function to set protocol reward rate: onlyOwner
|
149
|
-
// get protocol nft id (from where)
|
150
370
|
|
371
|
+
/// @inheritdoc IStaking
|
151
372
|
function setRewardRate(NftId targetNftId, UFixed rewardRate)
|
152
373
|
external
|
153
374
|
virtual
|
154
375
|
restricted()
|
155
376
|
onlyTarget(targetNftId)
|
156
377
|
{
|
157
|
-
(
|
158
|
-
|
159
|
-
|
160
|
-
) = TargetManagerLib.updateRewardRate(
|
161
|
-
this,
|
162
|
-
targetNftId,
|
163
|
-
rewardRate);
|
164
|
-
|
165
|
-
_getStakingStorage()._store.updateTarget(targetNftId, targetInfo);
|
378
|
+
_getStakingStorage()._store.setRewardRate(targetNftId, rewardRate);
|
379
|
+
}
|
380
|
+
|
166
381
|
|
167
|
-
|
382
|
+
// TODO refactor into setTargetLimits
|
383
|
+
/// @inheritdoc IStaking
|
384
|
+
function setMaxStakedAmount(NftId targetNftId, Amount stakeLimitAmount)
|
385
|
+
external
|
386
|
+
virtual
|
387
|
+
restricted()
|
388
|
+
onlyTarget(targetNftId)
|
389
|
+
{
|
390
|
+
StakingStorage storage $ = _getStakingStorage();
|
391
|
+
$._store.setMaxStakedAmount(targetNftId, stakeLimitAmount);
|
168
392
|
}
|
169
393
|
|
170
394
|
|
171
|
-
|
395
|
+
/// @inheritdoc IStaking
|
396
|
+
function setTargetLimits(NftId targetNftId, Amount marginAmount, Amount limitAmount)
|
172
397
|
external
|
173
398
|
virtual
|
174
399
|
restricted()
|
175
|
-
|
400
|
+
onlyTargetOwner(targetNftId)
|
176
401
|
{
|
177
|
-
// update book keeping of reward reserves
|
178
402
|
StakingStorage storage $ = _getStakingStorage();
|
179
|
-
|
403
|
+
$._store.setTargetLimits(targetNftId, marginAmount, limitAmount);
|
180
404
|
}
|
181
405
|
|
182
406
|
|
183
|
-
|
407
|
+
/// @inheritdoc IStaking
|
408
|
+
function addTargetToken(NftId targetNftId, address token)
|
184
409
|
external
|
185
410
|
virtual
|
186
411
|
restricted()
|
187
|
-
|
412
|
+
onlyTarget(targetNftId)
|
188
413
|
{
|
189
|
-
// update book keeping of reward reserves
|
190
414
|
StakingStorage storage $ = _getStakingStorage();
|
191
|
-
|
415
|
+
ChainId chainId = ChainIdLib.fromNftId(targetNftId);
|
416
|
+
_addToken($, chainId, token);
|
417
|
+
|
418
|
+
$._store.addTargetToken(targetNftId, token);
|
419
|
+
|
420
|
+
// TODO move logging to store
|
421
|
+
emit LogStakingTargetTokenAdded(targetNftId, chainId, token);
|
192
422
|
}
|
193
423
|
|
194
424
|
|
425
|
+
/// @inheritdoc IStaking
|
195
426
|
function increaseTotalValueLocked(NftId targetNftId, address token, Amount amount)
|
196
427
|
external
|
197
428
|
virtual
|
198
429
|
restricted() // only pool service
|
199
|
-
returns (Amount newBalance)
|
200
430
|
{
|
201
431
|
StakingStorage storage $ = _getStakingStorage();
|
202
|
-
|
203
|
-
UFixed stakingRate = $._reader.getStakingRate(chainId, token);
|
204
|
-
newBalance = $._store.increaseTotalValueLocked(targetNftId, stakingRate, token, amount);
|
432
|
+
$._store.increaseTotalValueLocked(targetNftId, token, amount);
|
205
433
|
}
|
206
434
|
|
207
435
|
|
436
|
+
/// @inheritdoc IStaking
|
208
437
|
function decreaseTotalValueLocked(NftId targetNftId, address token, Amount amount)
|
209
438
|
external
|
210
439
|
virtual
|
211
440
|
restricted() // only pool service
|
212
|
-
returns (Amount newBalance)
|
213
441
|
{
|
214
442
|
StakingStorage storage $ = _getStakingStorage();
|
215
|
-
|
216
|
-
UFixed stakingRate = $._reader.getStakingRate(chainId, token);
|
217
|
-
newBalance = $._store.decreaseTotalValueLocked(targetNftId, stakingRate, token, amount);
|
443
|
+
$._store.decreaseTotalValueLocked(targetNftId, token, amount);
|
218
444
|
}
|
219
445
|
|
220
446
|
|
447
|
+
// TODO add to interface and implement
|
448
|
+
/// inheritdoc IStaking
|
221
449
|
function registerRemoteTarget(NftId targetNftId, TargetInfo memory targetInfo)
|
222
450
|
external
|
223
451
|
virtual
|
@@ -227,6 +455,8 @@ contract Staking is
|
|
227
455
|
|
228
456
|
}
|
229
457
|
|
458
|
+
// TODO add to interface and implement
|
459
|
+
/// @inheritdoc IStaking
|
230
460
|
function updateRemoteTvl(NftId targetNftId, address token, Amount amount)
|
231
461
|
external
|
232
462
|
virtual
|
@@ -236,172 +466,179 @@ contract Staking is
|
|
236
466
|
|
237
467
|
}
|
238
468
|
|
239
|
-
//---
|
469
|
+
//--- public functions --------------------------------------------------//
|
240
470
|
|
241
|
-
|
242
|
-
|
243
|
-
NftId targetNftId,
|
244
|
-
Amount stakeAmount
|
245
|
-
)
|
471
|
+
/// @inheritdoc IStaking
|
472
|
+
function updateTargetLimit(NftId targetNftId)
|
246
473
|
external
|
247
|
-
|
248
|
-
restricted() // only staking service
|
474
|
+
restricted()
|
249
475
|
{
|
250
476
|
StakingStorage storage $ = _getStakingStorage();
|
251
|
-
|
252
|
-
$._reader,
|
253
|
-
targetNftId,
|
254
|
-
stakeAmount);
|
255
|
-
|
256
|
-
// create new stake
|
257
|
-
$._store.create(
|
258
|
-
stakeNftId,
|
259
|
-
StakeInfo({
|
260
|
-
lockedUntil: lockedUntil}));
|
261
|
-
|
262
|
-
// update target stake balance
|
263
|
-
$._store.increaseStake(
|
264
|
-
stakeNftId,
|
265
|
-
targetNftId,
|
266
|
-
stakeAmount);
|
477
|
+
$._store.updateTargetLimit(targetNftId);
|
267
478
|
}
|
268
479
|
|
269
480
|
|
270
|
-
|
271
|
-
|
272
|
-
|
481
|
+
/// @inheritdoc IStaking
|
482
|
+
function createStake(
|
483
|
+
NftId targetNftId,
|
484
|
+
Amount stakeAmount,
|
485
|
+
address stakeOwner
|
273
486
|
)
|
274
487
|
external
|
275
488
|
virtual
|
276
|
-
restricted()
|
277
|
-
|
278
|
-
returns (
|
489
|
+
restricted()
|
490
|
+
onlyTarget(targetNftId)
|
491
|
+
returns (NftId stakeNftId)
|
279
492
|
{
|
493
|
+
// effects (includes further checks in service)
|
280
494
|
StakingStorage storage $ = _getStakingStorage();
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
stakeAmount);
|
495
|
+
stakeNftId = $._stakingService.createStakeObject(targetNftId, stakeOwner);
|
496
|
+
$._store.createStake(stakeNftId, targetNftId, stakeOwner, stakeAmount);
|
497
|
+
|
498
|
+
// interactions
|
499
|
+
if (stakeAmount.gtz()) {
|
500
|
+
$._stakingService.pullDipToken(stakeAmount, stakeOwner);
|
501
|
+
}
|
287
502
|
}
|
288
503
|
|
504
|
+
//--- stake owner functions ---------------------------------------------//
|
289
505
|
|
290
|
-
|
506
|
+
|
507
|
+
/// @inheritdoc IStaking
|
508
|
+
function stake(
|
291
509
|
NftId stakeNftId,
|
292
|
-
|
510
|
+
Amount stakeAmount
|
293
511
|
)
|
294
512
|
external
|
295
513
|
virtual
|
296
|
-
restricted()
|
297
|
-
|
298
|
-
returns (
|
514
|
+
restricted()
|
515
|
+
onlyStakeOwner(stakeNftId)
|
516
|
+
returns (Amount newStakeBalance)
|
299
517
|
{
|
300
|
-
// TODO add check that allows additional staking amount
|
301
518
|
StakingStorage storage $ = _getStakingStorage();
|
519
|
+
$._store.stake(
|
520
|
+
stakeNftId,
|
521
|
+
true, // update rewards
|
522
|
+
true, // restake rewards
|
523
|
+
SecondsLib.max(), // max additional locking duration
|
524
|
+
stakeAmount);
|
302
525
|
|
303
|
-
//
|
526
|
+
// collect staked DIP token via staking service
|
527
|
+
if (stakeAmount.gtz()) {
|
528
|
+
address stakeOwner = getRegistry().ownerOf(stakeNftId);
|
529
|
+
$._stakingService.pullDipToken(stakeAmount, stakeOwner);
|
530
|
+
}
|
304
531
|
}
|
305
532
|
|
306
533
|
|
307
|
-
|
534
|
+
/// @inheritdoc IStaking
|
535
|
+
function unstake(NftId stakeNftId)
|
308
536
|
external
|
309
537
|
virtual
|
310
|
-
restricted()
|
311
|
-
|
538
|
+
restricted()
|
539
|
+
onlyStakeOwner(stakeNftId)
|
540
|
+
returns (Amount unstakedAmount)
|
312
541
|
{
|
313
542
|
StakingStorage storage $ = _getStakingStorage();
|
314
|
-
|
543
|
+
unstakedAmount = $._store.unstake(
|
544
|
+
stakeNftId,
|
545
|
+
true, // update rewards
|
546
|
+
true, // restake rewards
|
547
|
+
AmountLib.max()); // unstake up to this amount
|
548
|
+
|
549
|
+
// transfer unstaked DIP token via staking service
|
550
|
+
if (unstakedAmount.gtz()) {
|
551
|
+
address stakeOwner = getRegistry().ownerOf(stakeNftId);
|
552
|
+
$._stakingService.pushDipToken(unstakedAmount, stakeOwner);
|
553
|
+
}
|
315
554
|
}
|
316
555
|
|
317
556
|
|
318
|
-
|
557
|
+
/// @inheritdoc IStaking
|
558
|
+
function restake(
|
559
|
+
NftId stakeNftId,
|
560
|
+
NftId newTargetNftId
|
561
|
+
)
|
319
562
|
external
|
320
563
|
virtual
|
321
564
|
restricted() // only staking service
|
322
|
-
|
565
|
+
onlyStakeOwner(stakeNftId)
|
566
|
+
onlyTarget(newTargetNftId)
|
323
567
|
returns (
|
324
|
-
|
568
|
+
NftId newStakeNftId,
|
569
|
+
Amount newStakedAmount
|
325
570
|
)
|
326
571
|
{
|
327
572
|
StakingStorage storage $ = _getStakingStorage();
|
328
573
|
|
329
|
-
//
|
330
|
-
|
574
|
+
// step 1: unstake as much as possible
|
575
|
+
newStakedAmount = $._store.unstake(
|
576
|
+
stakeNftId,
|
577
|
+
true, // update rewards
|
578
|
+
true, // restake rewards
|
579
|
+
AmountLib.max()); // unstake up to this amount
|
331
580
|
|
332
|
-
//
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
AmountLib.max());
|
581
|
+
// step 2: create new stake with full unstaked amount
|
582
|
+
address stakeOwner = getRegistry().ownerOf(stakeNftId);
|
583
|
+
newStakeNftId = $._stakingService.createStakeObject(newTargetNftId, stakeOwner);
|
584
|
+
$._store.createStake(newStakeNftId, newTargetNftId, stakeOwner, newStakedAmount);
|
337
585
|
|
338
|
-
//
|
339
|
-
|
586
|
+
// logging
|
587
|
+
emit LogStakingStakeRestaked(newStakeNftId, newTargetNftId, newStakedAmount, stakeOwner, stakeNftId);
|
340
588
|
}
|
341
589
|
|
342
590
|
|
343
|
-
function
|
591
|
+
function updateRewards(NftId stakeNftId)
|
344
592
|
external
|
345
593
|
virtual
|
346
|
-
restricted()
|
347
|
-
|
348
|
-
returns (
|
349
|
-
Amount unstakedAmount,
|
350
|
-
Amount rewardsClaimedAmount
|
351
|
-
)
|
594
|
+
restricted()
|
595
|
+
onlyStakeOwner(stakeNftId)
|
596
|
+
returns (Amount newRewardAmount)
|
352
597
|
{
|
353
598
|
StakingStorage storage $ = _getStakingStorage();
|
354
|
-
|
355
|
-
StakeManagerLib.checkUnstakeParameters($._reader, stakeNftId);
|
356
|
-
|
357
|
-
// update rewards since last update
|
358
|
-
NftId targetNftId = _updateRewards($._reader, $._store, stakeNftId);
|
359
|
-
|
360
|
-
// unstake all available dips
|
361
|
-
(
|
362
|
-
unstakedAmount,
|
363
|
-
rewardsClaimedAmount
|
364
|
-
) = $._store.unstakeUpTo(
|
365
|
-
stakeNftId,
|
366
|
-
targetNftId,
|
367
|
-
AmountLib.max(), // unstake all stakes
|
368
|
-
AmountLib.max()); // claim all rewards
|
369
|
-
|
370
|
-
// update reward reserves
|
371
|
-
$._store.decreaseReserves(targetNftId, rewardsClaimedAmount);
|
599
|
+
$._store.updateRewards(stakeNftId);
|
372
600
|
}
|
373
601
|
|
374
602
|
|
375
|
-
|
376
|
-
//--- other functions ---------------------------------------------------//
|
377
|
-
|
378
|
-
function collectDipAmount(address from, Amount dipAmount)
|
603
|
+
function claimRewards(NftId stakeNftId)
|
379
604
|
external
|
380
|
-
|
605
|
+
virtual
|
606
|
+
restricted()
|
607
|
+
onlyStakeOwner(stakeNftId)
|
608
|
+
returns (
|
609
|
+
Amount claimedAmount
|
610
|
+
)
|
381
611
|
{
|
382
|
-
|
383
|
-
|
384
|
-
|
612
|
+
StakingStorage storage $ = _getStakingStorage();
|
613
|
+
claimedAmount = $._store.claimRewards(
|
614
|
+
stakeNftId,
|
615
|
+
true,
|
616
|
+
AmountLib.max());
|
385
617
|
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
618
|
+
// collect staked DIP token by staking service
|
619
|
+
if (claimedAmount.gtz()) {
|
620
|
+
// interactions
|
621
|
+
address stakeOwner = getRegistry().ownerOf(stakeNftId);
|
622
|
+
$._stakingService.pushDipToken(claimedAmount, stakeOwner);
|
623
|
+
}
|
391
624
|
}
|
392
625
|
|
393
626
|
|
394
627
|
//--- view functions ----------------------------------------------------//
|
395
628
|
|
396
|
-
function getStakingReader() public view returns (StakingReader reader) {
|
629
|
+
function getStakingReader() public virtual view returns (StakingReader reader) {
|
397
630
|
return _getStakingStorage()._reader;
|
398
631
|
}
|
399
632
|
|
400
|
-
function
|
633
|
+
function getTargetHandler() external virtual view returns (TargetHandler targetHandler) {
|
634
|
+
return _getStakingStorage()._targetHandler;
|
635
|
+
}
|
636
|
+
|
637
|
+
function getStakingStore() external virtual view returns (StakingStore stakingStore) {
|
401
638
|
return _getStakingStorage()._store;
|
402
639
|
}
|
403
640
|
|
404
|
-
function getTokenRegistryAddress() external view returns (address tokenRegistry) {
|
641
|
+
function getTokenRegistryAddress() external virtual view returns (address tokenRegistry) {
|
405
642
|
return address(_getStakingStorage()._tokenRegistry);
|
406
643
|
}
|
407
644
|
|
@@ -409,87 +646,149 @@ contract Staking is
|
|
409
646
|
return _getStakingStorage()._tokenHandler;
|
410
647
|
}
|
411
648
|
|
412
|
-
// from
|
649
|
+
// from IRegisterable
|
650
|
+
function getRelease()
|
651
|
+
public
|
652
|
+
pure
|
653
|
+
virtual override (IRelease, Registerable)
|
654
|
+
returns(VersionPart)
|
655
|
+
{
|
656
|
+
return VersionPartLib.toVersionPart(3);
|
657
|
+
}
|
658
|
+
|
659
|
+
// from IVersionable
|
413
660
|
function getVersion()
|
414
661
|
public
|
415
662
|
pure
|
416
|
-
virtual override (IVersionable, Versionable)
|
663
|
+
virtual override (Component, IVersionable, Versionable)
|
417
664
|
returns(Version)
|
418
665
|
{
|
419
|
-
return VersionLib.toVersion(
|
666
|
+
return VersionLib.toVersion(3,0,0);
|
420
667
|
}
|
421
668
|
|
422
669
|
//--- internal functions ------------------------------------------------//
|
423
670
|
|
424
|
-
|
425
|
-
|
426
|
-
StakingStore store,
|
427
|
-
NftId stakeNftId
|
428
|
-
)
|
671
|
+
|
672
|
+
function _refillRewardReserves(NftId targetNftId, Amount dipAmount, address transferFrom)
|
429
673
|
internal
|
430
674
|
virtual
|
431
|
-
returns (
|
675
|
+
returns (Amount newBalance)
|
432
676
|
{
|
433
|
-
|
677
|
+
// checks + effects
|
678
|
+
StakingStorage storage $ = _getStakingStorage();
|
679
|
+
newBalance = $._store.refillRewardReserves(targetNftId, dipAmount);
|
434
680
|
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
681
|
+
// interactions
|
682
|
+
// collect DIP token from target owner
|
683
|
+
if (dipAmount.gtz()) {
|
684
|
+
$._stakingService.pullDipToken(dipAmount, transferFrom);
|
685
|
+
}
|
686
|
+
}
|
440
687
|
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
688
|
+
|
689
|
+
function _withdrawRewardReserves(NftId targetNftId, Amount dipAmount, address transferTo)
|
690
|
+
internal
|
691
|
+
virtual
|
692
|
+
returns (Amount newBalance)
|
693
|
+
{
|
694
|
+
// checks + effects
|
695
|
+
StakingStorage storage $ = _getStakingStorage();
|
696
|
+
newBalance = $._store.withdrawRewardReserves(targetNftId, dipAmount);
|
697
|
+
|
698
|
+
// interactions
|
699
|
+
// transfer DIP token to designated address
|
700
|
+
if (dipAmount.gtz()) {
|
701
|
+
$._stakingService.pushDipToken(dipAmount, transferTo);
|
702
|
+
}
|
703
|
+
}
|
704
|
+
|
705
|
+
|
706
|
+
function _addToken(
|
707
|
+
StakingStorage storage $,
|
708
|
+
ChainId chainId,
|
709
|
+
address token
|
710
|
+
)
|
711
|
+
internal
|
712
|
+
virtual
|
713
|
+
{
|
714
|
+
if ($._store.getTokenInfo(chainId, token).lastUpdateIn.eqz()) {
|
715
|
+
$._store.addToken(chainId, token);
|
716
|
+
}
|
445
717
|
}
|
446
718
|
|
447
719
|
|
720
|
+
/// @dev top level initializer (upgradable contract)
|
448
721
|
function _initialize(
|
449
722
|
address owner,
|
450
723
|
bytes memory data
|
451
724
|
)
|
452
725
|
internal
|
453
726
|
virtual override
|
454
|
-
|
727
|
+
onlyInitializing()
|
455
728
|
{
|
456
729
|
(
|
457
730
|
address registryAddress,
|
458
|
-
address
|
731
|
+
address targetHandlerAddress,
|
459
732
|
address stakingStoreAddress,
|
460
|
-
address
|
733
|
+
address tokenRegistryAddress
|
461
734
|
) = abi.decode(data, (address, address, address, address));
|
462
735
|
|
463
|
-
//
|
736
|
+
// wiring to external contracts
|
464
737
|
IRegistry registry = IRegistry(registryAddress);
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
738
|
+
StakingStorage storage $ = _getStakingStorage();
|
739
|
+
$._protocolNftId = registry.getProtocolNftId();
|
740
|
+
$._targetHandler = TargetHandler(targetHandlerAddress);
|
741
|
+
$._store = StakingStore(stakingStoreAddress);
|
742
|
+
$._reader = StakingStore(stakingStoreAddress).getStakingReader();
|
743
|
+
$._tokenRegistry = TokenRegistry(tokenRegistryAddress);
|
744
|
+
// staking service has to be set via setStakingService after deploying the first GIF release
|
745
|
+
|
746
|
+
// initialize component
|
747
|
+
__Component_init(
|
748
|
+
registry.getAuthority(),
|
749
|
+
address(registry),
|
750
|
+
registry.getNftId(), // parent nft id
|
473
751
|
CONTRACT_NAME,
|
474
|
-
dipTokenAddress,
|
475
752
|
STAKING(),
|
476
753
|
false, // is interceptor
|
477
|
-
|
754
|
+
owner,
|
478
755
|
"", // registry data
|
479
756
|
""); // component data
|
480
757
|
|
481
|
-
//
|
482
|
-
|
483
|
-
|
484
|
-
$._store = StakingStore(stakingStoreAddress);
|
485
|
-
$._reader = StakingStore(stakingStoreAddress).getStakingReader();
|
486
|
-
$._tokenRegistry = TokenRegistry(tokenRegistryAddress);
|
487
|
-
$._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(dipTokenAddress, authority);
|
758
|
+
// Protocol target is created in the StakingStore constructor.
|
759
|
+
// This allows setting up the protocol target before the full
|
760
|
+
// staking authorization setup is in place.
|
488
761
|
|
489
762
|
_registerInterface(type(IStaking).interfaceId);
|
490
763
|
}
|
491
764
|
|
492
765
|
|
766
|
+
function _checkTypeAndOwner(NftId nftId, ObjectType expectedObjectType, bool checkOwner)
|
767
|
+
internal
|
768
|
+
view
|
769
|
+
{
|
770
|
+
StakingStorage storage $ = _getStakingStorage();
|
771
|
+
if (expectedObjectType == STAKE()) {
|
772
|
+
if (!$._store.exists(nftId)) {
|
773
|
+
revert ErrorStakingNotStake(nftId);
|
774
|
+
}
|
775
|
+
} else {
|
776
|
+
if (expectedObjectType == TARGET()) {
|
777
|
+
if (!$._store.getTargetSet().exists(nftId)) {
|
778
|
+
revert ErrorStakingNotTarget(nftId);
|
779
|
+
}
|
780
|
+
}
|
781
|
+
}
|
782
|
+
|
783
|
+
if (checkOwner) {
|
784
|
+
address nftOwner = getRegistry().ownerOf(nftId);
|
785
|
+
if (msg.sender != nftOwner) {
|
786
|
+
revert ErrorStakingNotOwner(nftId, nftOwner, msg.sender);
|
787
|
+
}
|
788
|
+
}
|
789
|
+
}
|
790
|
+
|
791
|
+
|
493
792
|
function _getStakingStorage() private pure returns (StakingStorage storage $) {
|
494
793
|
assembly {
|
495
794
|
$.slot := STAKING_LOCATION_V1
|