@etherisc/gif-next 0.0.2-858f0b8-208 → 0.0.2-85e1eb3-876
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 +89 -9
- 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 +190 -464
- 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 +109 -356
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +644 -392
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +209 -133
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +96 -191
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +476 -137
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1484 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +805 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2053 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +805 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1439 -0
- 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 +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1171 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1647 -0
- 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 +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2585 -0
- 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 +573 -165
- 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 +1696 -724
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +399 -231
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +143 -105
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +974 -651
- 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 +135 -333
- 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 +103 -133
- 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 +111 -293
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +198 -190
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +177 -97
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +164 -354
- 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 +386 -482
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +168 -144
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +259 -153
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +142 -183
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +524 -288
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +140 -333
- 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 +730 -549
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +206 -114
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +353 -180
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +159 -99
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +288 -409
- 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 +466 -245
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +187 -123
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +301 -9
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +350 -18
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +358 -127
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +183 -80
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +257 -226
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/{shared/ComponentVerifyingService.sol/ComponentVerifyingService.json → product/IRiskService.sol/IRiskService.json} +283 -157
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +477 -373
- 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 +196 -124
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +247 -332
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +165 -137
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +280 -401
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +873 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +774 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +359 -48
- 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 +565 -109
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +795 -394
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1061 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +136 -290
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +141 -89
- 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 +483 -253
- 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 +99 -252
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +493 -638
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +183 -133
- 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 +92 -93
- 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 +103 -133
- 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 +15 -47
- 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 -22
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +110 -292
- 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 +41 -57
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +141 -97
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +86 -111
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +585 -12
- 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 +4 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1087 -160
- 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/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +1285 -387
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +424 -0
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +222 -105
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +175 -223
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +282 -281
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +144 -96
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +960 -732
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +131 -50
- 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 +174 -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 +125 -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 +118 -79
- 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 +458 -269
- package/contracts/authorization/AccessAdminLib.sol +396 -0
- package/contracts/authorization/AccessManagerCloneable.sol +146 -4
- package/contracts/authorization/Authorization.sol +159 -208
- package/contracts/authorization/IAccess.sol +25 -6
- package/contracts/authorization/IAccessAdmin.sol +87 -79
- package/contracts/authorization/IAuthorization.sol +9 -36
- package/contracts/authorization/IServiceAuthorization.sol +57 -17
- package/contracts/authorization/ServiceAuthorization.sol +255 -25
- package/contracts/distribution/BasicDistribution.sol +21 -18
- package/contracts/distribution/BasicDistributionAuthorization.sol +30 -10
- package/contracts/distribution/Distribution.sol +44 -92
- package/contracts/distribution/DistributionService.sol +243 -131
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionComponent.sol +4 -11
- package/contracts/distribution/IDistributionService.sol +47 -29
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +86 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
- package/contracts/examples/fire/FireProduct.sol +433 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +81 -0
- package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +133 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +102 -0
- package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +437 -0
- package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
- package/contracts/instance/BundleSet.sol +42 -38
- package/contracts/instance/IInstance.sol +102 -43
- package/contracts/instance/IInstanceService.sol +59 -34
- package/contracts/instance/Instance.sol +193 -100
- package/contracts/instance/InstanceAdmin.sol +275 -158
- package/contracts/instance/InstanceAuthorizationV3.sol +120 -58
- package/contracts/instance/InstanceReader.sol +478 -251
- package/contracts/instance/InstanceService.sol +293 -236
- package/contracts/instance/InstanceServiceManager.sol +6 -7
- package/contracts/instance/InstanceStore.sol +23 -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 +13 -10
- 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 +30 -15
- package/contracts/instance/module/IDistribution.sol +21 -8
- package/contracts/instance/module/IPolicy.sol +50 -29
- 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 +9 -21
- package/contracts/oracle/OracleService.sol +119 -87
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +36 -40
- package/contracts/pool/BasicPoolAuthorization.sol +36 -13
- package/contracts/pool/BundleService.sol +140 -191
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +33 -50
- package/contracts/pool/IPoolComponent.sol +19 -15
- package/contracts/pool/IPoolService.sol +97 -76
- package/contracts/pool/Pool.sol +142 -137
- package/contracts/pool/PoolLib.sol +341 -0
- package/contracts/pool/PoolService.sol +390 -301
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +143 -46
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +11 -14
- package/contracts/product/BasicProductAuthorization.sol +32 -12
- package/contracts/product/ClaimService.sol +385 -172
- package/contracts/product/ClaimServiceManager.sol +4 -4
- package/contracts/product/IApplicationService.sol +29 -3
- package/contracts/product/IClaimService.sol +48 -11
- package/contracts/product/IPolicyService.sol +61 -43
- package/contracts/product/IPricingService.sol +11 -10
- package/contracts/product/IProductComponent.sol +27 -5
- package/contracts/product/IRiskService.sol +48 -0
- package/contracts/product/PolicyService.sol +423 -307
- package/contracts/product/PolicyServiceLib.sol +139 -0
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +90 -84
- package/contracts/product/PricingServiceManager.sol +4 -4
- package/contracts/product/Product.sol +188 -106
- package/contracts/product/RiskService.sol +190 -0
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +72 -40
- package/contracts/registry/IRegistry.sol +70 -32
- 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 +367 -207
- package/contracts/registry/RegistryAdmin.sol +110 -287
- package/contracts/registry/RegistryAuthorization.sol +308 -0
- package/contracts/registry/RegistryService.sol +38 -49
- 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 +279 -239
- package/contracts/registry/ServiceAuthorizationV3.sol +205 -63
- package/contracts/registry/TokenRegistry.sol +61 -59
- package/contracts/shared/Component.sol +69 -135
- package/contracts/shared/ComponentService.sol +424 -387
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ContractLib.sol +312 -0
- package/contracts/shared/IComponent.sol +6 -19
- package/contracts/shared/IComponentService.sol +43 -40
- package/contracts/shared/IInstanceLinkedComponent.sol +6 -32
- 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 -22
- package/contracts/shared/IRegisterable.sol +22 -1
- package/contracts/shared/IService.sol +3 -5
- package/contracts/shared/InitializableERC165.sol +10 -2
- package/contracts/shared/InstanceLinkedComponent.sol +73 -51
- package/contracts/shared/KeyValueStore.sol +4 -4
- package/contracts/shared/Lifecycle.sol +15 -4
- package/contracts/shared/NftOwnable.sol +31 -9
- package/contracts/shared/PolicyHolder.sol +18 -54
- package/contracts/shared/Registerable.sol +52 -21
- package/contracts/shared/RegistryLinked.sol +9 -14
- package/contracts/shared/Service.sol +20 -35
- package/contracts/shared/TokenHandler.sol +310 -26
- package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
- package/contracts/staking/IStaking.sol +163 -65
- package/contracts/staking/IStakingService.sol +45 -78
- package/contracts/staking/Staking.sol +629 -223
- package/contracts/staking/StakingLib.sol +168 -0
- package/contracts/staking/StakingManager.sol +9 -8
- package/contracts/staking/StakingReader.sol +53 -85
- package/contracts/staking/StakingService.sol +63 -149
- package/contracts/staking/StakingServiceManager.sol +7 -5
- package/contracts/staking/StakingStore.sol +639 -350
- package/contracts/staking/TargetManagerLib.sol +8 -4
- package/contracts/type/Amount.sol +19 -0
- package/contracts/type/Blocknumber.sol +15 -15
- package/contracts/type/ChainId.sol +92 -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 +73 -37
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/RiskId.sol +38 -6
- package/contracts/type/RoleId.sol +61 -55
- package/contracts/type/Seconds.sol +13 -0
- package/contracts/type/Selector.sol +5 -0
- package/contracts/type/StateId.sol +15 -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/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/product/IProductService.sol/IProductService.json +0 -400
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -470
- 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/product/IProductService.sol +0 -33
- package/contracts/product/ProductService.sol +0 -99
- package/contracts/product/ProductServiceManager.sol +0 -39
- package/contracts/shared/ComponentVerifyingService.sol +0 -117
- package/contracts/shared/InitializableCustom.sol +0 -177
- package/contracts/staking/StakeManagerLib.sol +0 -231
@@ -1,26 +1,35 @@
|
|
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";
|
7
10
|
import {IVersionable} from "../upgradeability/IVersionable.sol";
|
8
11
|
|
9
12
|
import {Amount, AmountLib} from "../type/Amount.sol";
|
13
|
+
import {Blocknumber} from "../type/Blocknumber.sol";
|
14
|
+
import {ChainId, ChainIdLib} from "../type/ChainId.sol";
|
10
15
|
import {Component} from "../shared/Component.sol";
|
11
16
|
import {IComponent} from "../shared/IComponent.sol";
|
17
|
+
import {IComponentService} from "../shared/IComponentService.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, COMPONENT, STAKE, STAKING, TARGET} from "../type/ObjectType.sol";
|
20
|
+
import {Seconds, SecondsLib} from "../type/Seconds.sol";
|
21
|
+
import {Registerable} from "../shared/Registerable.sol";
|
22
|
+
import {ReleaseRegistry} from "../registry/ReleaseRegistry.sol";
|
23
|
+
import {StakingLib} from "./StakingLib.sol";
|
16
24
|
import {StakingReader} from "./StakingReader.sol";
|
17
25
|
import {StakingStore} from "./StakingStore.sol";
|
18
26
|
import {TargetManagerLib} from "./TargetManagerLib.sol";
|
19
27
|
import {Timestamp} from "../type/Timestamp.sol";
|
20
28
|
import {TokenHandler} from "../shared/TokenHandler.sol";
|
29
|
+
import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
|
21
30
|
import {TokenRegistry} from "../registry/TokenRegistry.sol";
|
22
31
|
import {UFixed} from "../type/UFixed.sol";
|
23
|
-
import {Version, VersionLib} from "../type/Version.sol";
|
32
|
+
import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
|
24
33
|
import {Versionable} from "../upgradeability/Versionable.sol";
|
25
34
|
|
26
35
|
contract Staking is
|
@@ -29,15 +38,14 @@ contract Staking is
|
|
29
38
|
IStaking
|
30
39
|
{
|
31
40
|
string public constant CONTRACT_NAME = "Staking";
|
32
|
-
uint8 private constant GIF_MAJOR_VERSION = 3;
|
33
41
|
|
34
42
|
// keccak256(abi.encode(uint256(keccak256("gif-next.contracts.component.Staking.sol")) - 1)) & ~bytes32(uint256(0xff));
|
35
43
|
bytes32 public constant STAKING_LOCATION_V1 = 0xafe8d4462b2ed26a47154f4b8f6d1497d2f772496965791d25bd456e342b7f00;
|
36
44
|
|
37
45
|
struct StakingStorage {
|
38
|
-
IRegistryService _registryService;
|
39
46
|
TokenRegistry _tokenRegistry;
|
40
47
|
TokenHandler _tokenHandler;
|
48
|
+
IStakingService _stakingService;
|
41
49
|
StakingStore _store;
|
42
50
|
StakingReader _reader;
|
43
51
|
NftId _protocolNftId;
|
@@ -45,83 +53,289 @@ contract Staking is
|
|
45
53
|
|
46
54
|
|
47
55
|
modifier onlyStake(NftId stakeNftId) {
|
48
|
-
|
49
|
-
|
50
|
-
|
56
|
+
_checkTypeAndOwner(stakeNftId, STAKE(), false);
|
57
|
+
_;
|
58
|
+
}
|
59
|
+
|
60
|
+
|
61
|
+
modifier onlyStakeOwner(NftId stakeNftId) {
|
62
|
+
_checkTypeAndOwner(stakeNftId, STAKE(), true);
|
51
63
|
_;
|
52
64
|
}
|
53
65
|
|
54
66
|
|
55
67
|
modifier onlyTarget(NftId targetNftId) {
|
56
|
-
|
57
|
-
|
58
|
-
|
68
|
+
_checkTypeAndOwner(targetNftId, TARGET(), false);
|
69
|
+
_;
|
70
|
+
}
|
71
|
+
|
72
|
+
|
73
|
+
modifier onlyTargetOwner(NftId targetNftId) {
|
74
|
+
_checkTypeAndOwner(targetNftId, TARGET(), true);
|
59
75
|
_;
|
60
76
|
}
|
61
77
|
|
62
|
-
|
78
|
+
//--- contract intitialization -------------------------------------------
|
79
|
+
|
80
|
+
function initializeTokenHandler()
|
81
|
+
external
|
82
|
+
virtual
|
83
|
+
{
|
84
|
+
if (msg.sender != address(getRegistry())) {
|
85
|
+
revert ErrorStakingNotRegistry(msg.sender);
|
86
|
+
}
|
87
|
+
|
88
|
+
StakingStorage storage $ = _getStakingStorage();
|
89
|
+
address dipToken = _getStakingStorage()._tokenRegistry.getDipTokenAddress();
|
90
|
+
$._tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
|
91
|
+
address(getRegistry()),
|
92
|
+
address(this),
|
93
|
+
dipToken,
|
94
|
+
getRegistry().getAuthority());
|
95
|
+
}
|
96
|
+
|
97
|
+
//--- staking owner functions -------------------------------------------//
|
98
|
+
|
99
|
+
// TODO also make sure that protocol rewards can be refilled and withdrawn
|
100
|
+
|
101
|
+
/// @inheritdoc IStaking
|
102
|
+
function setProtocolLockingPeriod(Seconds newLockingPeriod)
|
103
|
+
external
|
104
|
+
virtual
|
105
|
+
restricted()
|
106
|
+
onlyOwner()
|
107
|
+
{
|
108
|
+
NftId protocolNftId = getRegistry().getProtocolNftId();
|
109
|
+
(
|
110
|
+
Seconds oldLockingPeriod,
|
111
|
+
Blocknumber lastUpdatedIn
|
112
|
+
) = _getStakingStorage()._store.setLockingPeriod(protocolNftId, newLockingPeriod);
|
113
|
+
|
114
|
+
emit LogStakingProtocolLockingPeriodSet(protocolNftId, newLockingPeriod, oldLockingPeriod, lastUpdatedIn);
|
115
|
+
}
|
116
|
+
|
117
|
+
|
118
|
+
/// @inheritdoc IStaking
|
119
|
+
function setProtocolRewardRate(UFixed newRewardRate)
|
120
|
+
external
|
121
|
+
virtual
|
122
|
+
restricted()
|
123
|
+
onlyOwner()
|
124
|
+
{
|
125
|
+
NftId protocolNftId = getRegistry().getProtocolNftId();
|
126
|
+
(
|
127
|
+
UFixed oldRewardRate,
|
128
|
+
Blocknumber lastUpdatedIn
|
129
|
+
) = _getStakingStorage()._store.setRewardRate(protocolNftId, newRewardRate);
|
130
|
+
|
131
|
+
emit LogStakingProtocolRewardRateSet(protocolNftId, newRewardRate, oldRewardRate, lastUpdatedIn);
|
132
|
+
}
|
133
|
+
|
134
|
+
|
135
|
+
/// @inheritdoc IStaking
|
136
|
+
function setStakingRate(
|
137
|
+
ChainId chainId,
|
138
|
+
address token,
|
139
|
+
UFixed stakingRate
|
140
|
+
)
|
141
|
+
external
|
142
|
+
virtual
|
143
|
+
restricted()
|
144
|
+
onlyOwner()
|
145
|
+
{
|
146
|
+
(
|
147
|
+
UFixed oldStakingRate,
|
148
|
+
Blocknumber lastUpdateIn
|
149
|
+
) = _getStakingStorage()._store.setStakingRate(chainId, token, stakingRate);
|
150
|
+
|
151
|
+
emit LogStakingStakingRateSet(chainId, token, stakingRate, oldStakingRate, lastUpdateIn);
|
152
|
+
}
|
153
|
+
|
154
|
+
|
155
|
+
/// @inheritdoc IStaking
|
156
|
+
function setStakingService(VersionPart release)
|
157
|
+
external
|
158
|
+
virtual
|
159
|
+
restricted()
|
160
|
+
onlyOwner()
|
161
|
+
{
|
162
|
+
// checks
|
163
|
+
if (!ReleaseRegistry(getRegistry().getReleaseRegistryAddress()).isActiveRelease(release)) {
|
164
|
+
revert ErrorStakingReleaseNotActive(release);
|
165
|
+
}
|
166
|
+
|
167
|
+
address stakingServiceAddress = getRegistry().getServiceAddress(STAKING(), release);
|
168
|
+
if (stakingServiceAddress == address(0)) {
|
169
|
+
revert ErrorStakingServiceNotFound(release);
|
170
|
+
}
|
171
|
+
|
172
|
+
// effects
|
173
|
+
address oldStakingService = address(_getStakingStorage()._stakingService);
|
174
|
+
_getStakingStorage()._stakingService = IStakingService(stakingServiceAddress);
|
175
|
+
|
176
|
+
emit LogStakingStakingServiceSet(stakingServiceAddress, release, oldStakingService);
|
177
|
+
}
|
178
|
+
|
179
|
+
|
180
|
+
/// @inheritdoc IStaking
|
63
181
|
function setStakingReader(StakingReader stakingReader)
|
64
182
|
external
|
65
183
|
virtual
|
184
|
+
restricted()
|
66
185
|
onlyOwner()
|
67
186
|
{
|
68
187
|
if(stakingReader.getStaking() != IStaking(this)) {
|
69
188
|
revert ErrorStakingStakingReaderStakingMismatch(address(stakingReader.getStaking()));
|
70
189
|
}
|
71
190
|
|
191
|
+
address oldReader = address(_getStakingStorage()._reader);
|
72
192
|
_getStakingStorage()._reader = stakingReader;
|
193
|
+
|
194
|
+
emit LogStakingStakingReaderSet(address(stakingReader), oldReader);
|
73
195
|
}
|
74
196
|
|
75
197
|
|
76
|
-
|
77
|
-
function
|
198
|
+
/// @inheritdoc IStaking
|
199
|
+
function addToken(
|
200
|
+
ChainId chainId,
|
201
|
+
address token
|
202
|
+
)
|
78
203
|
external
|
79
204
|
virtual
|
205
|
+
restricted()
|
80
206
|
onlyOwner()
|
81
207
|
{
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
208
|
+
_addToken(
|
209
|
+
_getStakingStorage(), chainId, token);
|
210
|
+
}
|
211
|
+
|
212
|
+
|
213
|
+
/// @inheritdoc IStaking
|
214
|
+
function approveTokenHandler(IERC20Metadata token, Amount amount)
|
215
|
+
public
|
216
|
+
virtual
|
217
|
+
restricted()
|
218
|
+
onlyOwner()
|
219
|
+
{
|
220
|
+
Amount oldAllowanceAmount = AmountLib.toAmount(
|
221
|
+
token.allowance(
|
222
|
+
address(this),
|
223
|
+
address(_getStakingStorage()._tokenHandler)));
|
224
|
+
|
225
|
+
// staking token handler approval via its own implementation in staking service
|
226
|
+
IComponentService(_getServiceAddress(STAKING())).approveTokenHandler(
|
227
|
+
token,
|
228
|
+
amount);
|
229
|
+
|
230
|
+
emit LogStakingTokenHandlerApproved(address(token), amount, oldAllowanceAmount);
|
231
|
+
}
|
232
|
+
|
233
|
+
//--- target management -------------------------------------------------//
|
234
|
+
|
235
|
+
|
236
|
+
/// @inheritdoc IStaking
|
237
|
+
function refillRewardReserves(NftId targetNftId, Amount dipAmount)
|
238
|
+
external
|
239
|
+
virtual
|
240
|
+
restricted()
|
241
|
+
onlyTarget(targetNftId)
|
242
|
+
returns (Amount newBalance)
|
243
|
+
{
|
244
|
+
address transferFrom = msg.sender;
|
245
|
+
_refillRewardReserves(targetNftId, dipAmount, transferFrom);
|
246
|
+
}
|
247
|
+
|
248
|
+
|
249
|
+
/// @inheritdoc IStaking
|
250
|
+
function withdrawRewardReserves(NftId targetNftId, Amount dipAmount)
|
251
|
+
external
|
252
|
+
virtual
|
253
|
+
restricted()
|
254
|
+
onlyTarget(targetNftId)
|
255
|
+
returns (Amount newBalance)
|
256
|
+
{
|
257
|
+
// special case 1: protocol target: staking owner is recipient
|
258
|
+
if (targetNftId == getRegistry().getProtocolNftId()) {
|
259
|
+
// verify that the caller is the staking owner
|
260
|
+
if (msg.sender != getOwner()) {
|
261
|
+
revert ErrorStakingNotStakingOwner();
|
262
|
+
}
|
263
|
+
|
264
|
+
return _withdrawRewardReserves(targetNftId, dipAmount, getOwner());
|
265
|
+
}
|
266
|
+
|
267
|
+
// special case 2: off-chain targets
|
268
|
+
// TODO decide how to handle and implement
|
269
|
+
|
270
|
+
// default: on-chain target owner is recipient
|
271
|
+
address targetOwner = getRegistry().ownerOf(targetNftId);
|
272
|
+
// verify that the caller is the target owner
|
273
|
+
if (msg.sender != targetOwner) {
|
274
|
+
revert ErrorStakingNotNftOwner(targetNftId);
|
275
|
+
}
|
276
|
+
|
277
|
+
return _withdrawRewardReserves(targetNftId, dipAmount, targetOwner);
|
278
|
+
}
|
279
|
+
|
280
|
+
|
281
|
+
/// @inheritdoc IStaking
|
282
|
+
function refillRewardReservesByService(NftId targetNftId, Amount dipAmount, address transferFrom)
|
283
|
+
external
|
284
|
+
virtual
|
285
|
+
restricted()
|
286
|
+
onlyTarget(targetNftId)
|
287
|
+
returns (Amount newBalance)
|
288
|
+
{
|
289
|
+
address fundingBy = msg.sender;
|
290
|
+
_refillRewardReserves(targetNftId, dipAmount, transferFrom);
|
291
|
+
}
|
292
|
+
|
293
|
+
|
294
|
+
/// @inheritdoc IStaking
|
295
|
+
function withdrawRewardReservesByService(NftId targetNftId, Amount dipAmount, address transferTo)
|
296
|
+
external
|
297
|
+
virtual
|
298
|
+
restricted()
|
299
|
+
onlyTarget(targetNftId)
|
300
|
+
returns (Amount newBalance)
|
301
|
+
{
|
302
|
+
// special case 1: protocol target: staking owner is recipient
|
303
|
+
if (targetNftId == getRegistry().getProtocolNftId()) {
|
304
|
+
return _withdrawRewardReserves(targetNftId, dipAmount, transferTo);
|
86
305
|
}
|
87
306
|
|
88
|
-
|
89
|
-
|
307
|
+
// special case 2: off-chain targets
|
308
|
+
// TODO decide how to handle and implement
|
90
309
|
|
91
|
-
|
310
|
+
// default: on-chain target owner is recipient
|
311
|
+
address targetOwner = getRegistry().ownerOf(targetNftId);
|
312
|
+
return _withdrawRewardReserves(targetNftId, dipAmount, targetOwner);
|
92
313
|
}
|
93
314
|
|
94
|
-
// target management
|
95
315
|
|
316
|
+
/// @inheritdoc IStaking
|
96
317
|
function registerTarget(
|
97
318
|
NftId targetNftId,
|
98
319
|
ObjectType expectedObjectType,
|
99
|
-
uint256 chainId,
|
100
320
|
Seconds initialLockingPeriod,
|
101
321
|
UFixed initialRewardRate
|
102
322
|
)
|
103
323
|
external
|
104
324
|
virtual
|
105
|
-
restricted()
|
325
|
+
restricted() // staking service
|
106
326
|
{
|
107
|
-
|
108
|
-
getRegistry(),
|
109
|
-
_getStakingStorage()._reader,
|
110
|
-
targetNftId,
|
111
|
-
expectedObjectType,
|
112
|
-
initialLockingPeriod,
|
113
|
-
initialRewardRate);
|
114
|
-
|
327
|
+
// checks done by staking store
|
115
328
|
_getStakingStorage()._store.createTarget(
|
116
329
|
targetNftId,
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
330
|
+
expectedObjectType,
|
331
|
+
initialLockingPeriod,
|
332
|
+
initialRewardRate);
|
333
|
+
|
334
|
+
emit LogStakingTargetCreated(targetNftId, expectedObjectType, initialLockingPeriod, initialRewardRate, AmountLib.max());
|
122
335
|
}
|
123
336
|
|
124
337
|
|
338
|
+
/// @inheritdoc IStaking
|
125
339
|
function setLockingPeriod(
|
126
340
|
NftId targetNftId,
|
127
341
|
Seconds lockingPeriod
|
@@ -131,66 +345,76 @@ contract Staking is
|
|
131
345
|
restricted()
|
132
346
|
onlyTarget(targetNftId)
|
133
347
|
{
|
134
|
-
(
|
135
|
-
Seconds oldLockingPeriod,
|
136
|
-
TargetInfo memory targetInfo
|
137
|
-
) = TargetManagerLib.updateLockingPeriod(
|
138
|
-
this,
|
139
|
-
targetNftId,
|
140
|
-
lockingPeriod);
|
141
|
-
|
142
|
-
_getStakingStorage()._store.updateTarget(targetNftId, targetInfo);
|
348
|
+
(Seconds oldLockingPeriod, ) = _getStakingStorage()._store.setLockingPeriod(targetNftId, lockingPeriod);
|
143
349
|
|
144
|
-
emit
|
350
|
+
emit LogStakingTargetLockingPeriodSet(targetNftId, lockingPeriod, oldLockingPeriod);
|
145
351
|
}
|
146
352
|
|
147
|
-
// TODO add function to set protocol reward rate: onlyOwner
|
148
|
-
// get protocol nft id (from where)
|
149
353
|
|
354
|
+
/// @inheritdoc IStaking
|
150
355
|
function setRewardRate(NftId targetNftId, UFixed rewardRate)
|
151
356
|
external
|
152
357
|
virtual
|
153
358
|
restricted()
|
154
359
|
onlyTarget(targetNftId)
|
155
360
|
{
|
156
|
-
(
|
157
|
-
|
158
|
-
TargetInfo memory targetInfo
|
159
|
-
) = TargetManagerLib.updateRewardRate(
|
160
|
-
this,
|
161
|
-
targetNftId,
|
162
|
-
rewardRate);
|
163
|
-
|
164
|
-
_getStakingStorage()._store.updateTarget(targetNftId, targetInfo);
|
165
|
-
|
166
|
-
emit LogStakingRewardRateSet(targetNftId, oldRewardRate, rewardRate);
|
361
|
+
(UFixed oldRewardRate,) = _getStakingStorage()._store.setRewardRate(targetNftId, rewardRate);
|
362
|
+
emit LogStakingTargetRewardRateSet(targetNftId, rewardRate, oldRewardRate);
|
167
363
|
}
|
168
364
|
|
169
365
|
|
170
|
-
|
366
|
+
/// @inheritdoc IStaking
|
367
|
+
function setMaxStakedAmount(NftId targetNftId, Amount maxStakedAmount)
|
171
368
|
external
|
172
369
|
virtual
|
173
370
|
restricted()
|
174
|
-
|
371
|
+
onlyTarget(targetNftId)
|
175
372
|
{
|
176
|
-
|
177
|
-
|
178
|
-
newBalance = $._store.increaseReserves(targetNftId, dipAmount);
|
373
|
+
_getStakingStorage()._store.setMaxStakedAmount(targetNftId, maxStakedAmount);
|
374
|
+
emit LogStakingTargetMaxStakedAmountSet(targetNftId, maxStakedAmount);
|
179
375
|
}
|
180
376
|
|
181
|
-
|
182
|
-
|
377
|
+
// TODO cleanup
|
378
|
+
// /// @inheritdoc IStaking
|
379
|
+
// function refillRewardReservesByService(NftId targetNftId, Amount dipAmount, address from)
|
380
|
+
// external
|
381
|
+
// virtual
|
382
|
+
// restricted()
|
383
|
+
// returns (Amount newBalance)
|
384
|
+
// {
|
385
|
+
// _refillRewardReserves(targetNftId, dipAmount, from);
|
386
|
+
// }
|
387
|
+
|
388
|
+
|
389
|
+
// /// @inheritdoc IStaking
|
390
|
+
// function withdrawRewardReservesByService(NftId targetNftId, Amount dipAmount, address to)
|
391
|
+
// external
|
392
|
+
// virtual
|
393
|
+
// restricted()
|
394
|
+
// returns (Amount newBalance)
|
395
|
+
// {
|
396
|
+
// _withdrawRewardReserves(targetNftId, dipAmount, to);
|
397
|
+
// }
|
398
|
+
|
399
|
+
|
400
|
+
/// @inheritdoc IStaking
|
401
|
+
function addTargetToken(NftId targetNftId, address token)
|
183
402
|
external
|
184
403
|
virtual
|
185
404
|
restricted()
|
186
|
-
|
405
|
+
onlyTarget(targetNftId)
|
187
406
|
{
|
188
|
-
// update book keeping of reward reserves
|
189
407
|
StakingStorage storage $ = _getStakingStorage();
|
190
|
-
|
408
|
+
ChainId chainId = ChainIdLib.fromNftId(targetNftId);
|
409
|
+
_addToken($, chainId, token);
|
410
|
+
|
411
|
+
$._store.addTargetToken(targetNftId, token);
|
412
|
+
|
413
|
+
emit LogStakingTargetTokenAdded(targetNftId, chainId, token);
|
191
414
|
}
|
192
415
|
|
193
416
|
|
417
|
+
/// @inheritdoc IStaking
|
194
418
|
function increaseTotalValueLocked(NftId targetNftId, address token, Amount amount)
|
195
419
|
external
|
196
420
|
virtual
|
@@ -198,12 +422,13 @@ contract Staking is
|
|
198
422
|
returns (Amount newBalance)
|
199
423
|
{
|
200
424
|
StakingStorage storage $ = _getStakingStorage();
|
201
|
-
|
202
|
-
|
203
|
-
|
425
|
+
newBalance = $._store.increaseTotalValueLocked(targetNftId, token, amount);
|
426
|
+
|
427
|
+
emit LogStakingTotalValueLockedIncreased(targetNftId, token, amount, newBalance);
|
204
428
|
}
|
205
429
|
|
206
430
|
|
431
|
+
/// @inheritdoc IStaking
|
207
432
|
function decreaseTotalValueLocked(NftId targetNftId, address token, Amount amount)
|
208
433
|
external
|
209
434
|
virtual
|
@@ -211,12 +436,14 @@ contract Staking is
|
|
211
436
|
returns (Amount newBalance)
|
212
437
|
{
|
213
438
|
StakingStorage storage $ = _getStakingStorage();
|
214
|
-
|
215
|
-
|
216
|
-
|
439
|
+
newBalance = $._store.decreaseTotalValueLocked(targetNftId, token, amount);
|
440
|
+
|
441
|
+
emit LogStakingTotalValueLockedDecreased(targetNftId, token, amount, newBalance);
|
217
442
|
}
|
218
443
|
|
219
444
|
|
445
|
+
// TODO add to interface and implement
|
446
|
+
/// inheritdoc IStaking
|
220
447
|
function registerRemoteTarget(NftId targetNftId, TargetInfo memory targetInfo)
|
221
448
|
external
|
222
449
|
virtual
|
@@ -226,6 +453,8 @@ contract Staking is
|
|
226
453
|
|
227
454
|
}
|
228
455
|
|
456
|
+
// TODO add to interface and implement
|
457
|
+
/// @inheritdoc IStaking
|
229
458
|
function updateRemoteTvl(NftId targetNftId, address token, Amount amount)
|
230
459
|
external
|
231
460
|
virtual
|
@@ -237,189 +466,216 @@ contract Staking is
|
|
237
466
|
|
238
467
|
//--- staking functions -------------------------------------------------//
|
239
468
|
|
469
|
+
/// @inheritdoc IStaking
|
240
470
|
function createStake(
|
241
|
-
NftId stakeNftId,
|
242
471
|
NftId targetNftId,
|
243
|
-
Amount stakeAmount
|
472
|
+
Amount stakeAmount,
|
473
|
+
address stakeOwner
|
244
474
|
)
|
245
475
|
external
|
246
476
|
virtual
|
247
|
-
restricted()
|
477
|
+
restricted()
|
478
|
+
onlyTarget(targetNftId)
|
479
|
+
returns (NftId stakeNftId)
|
248
480
|
{
|
249
481
|
StakingStorage storage $ = _getStakingStorage();
|
250
|
-
Timestamp lockedUntil = StakeManagerLib.checkCreateParameters(
|
251
|
-
$._reader,
|
252
|
-
targetNftId,
|
253
|
-
stakeAmount);
|
254
482
|
|
255
|
-
//
|
256
|
-
$.
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
//
|
262
|
-
$.
|
263
|
-
stakeNftId,
|
264
|
-
targetNftId,
|
265
|
-
stakeAmount);
|
483
|
+
// effects (includes further checks in service)
|
484
|
+
stakeNftId = $._stakingService.createStakeObject(targetNftId, stakeOwner);
|
485
|
+
Timestamp lockedUntil = $._store.createStake(stakeNftId, targetNftId, stakeAmount);
|
486
|
+
|
487
|
+
emit LogStakingStakeCreated(stakeNftId, targetNftId, stakeAmount, lockedUntil, stakeOwner);
|
488
|
+
|
489
|
+
// interactions
|
490
|
+
$._stakingService.pullDipToken(stakeAmount, stakeOwner);
|
266
491
|
}
|
267
492
|
|
268
493
|
|
494
|
+
/// @inheritdoc IStaking
|
269
495
|
function stake(
|
270
496
|
NftId stakeNftId,
|
271
497
|
Amount stakeAmount
|
272
498
|
)
|
273
499
|
external
|
274
500
|
virtual
|
275
|
-
restricted()
|
276
|
-
|
277
|
-
returns (Amount
|
501
|
+
restricted()
|
502
|
+
onlyStakeOwner(stakeNftId)
|
503
|
+
returns (Amount newStakeBalance)
|
278
504
|
{
|
279
505
|
StakingStorage storage $ = _getStakingStorage();
|
280
|
-
stakeBalance = StakeManagerLib.stake(
|
281
|
-
getRegistry(),
|
282
|
-
$._reader,
|
283
|
-
$._store,
|
284
|
-
stakeNftId,
|
285
|
-
stakeAmount);
|
286
|
-
}
|
287
506
|
|
507
|
+
// update rewards for stake (add rewards since last update)
|
508
|
+
(
|
509
|
+
Amount rewardIncreaseAmount,
|
510
|
+
Seconds targetLockingPeriod,
|
511
|
+
Amount stakeBalance,
|
512
|
+
Amount rewardBalance,
|
513
|
+
Timestamp lockedUntil
|
514
|
+
) = _updateRewards($, stakeNftId);
|
515
|
+
|
516
|
+
// no additional locking duration if no additional stakes
|
517
|
+
if (stakeAmount.eqz()) {
|
518
|
+
targetLockingPeriod = SecondsLib.zero();
|
519
|
+
}
|
288
520
|
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
virtual
|
295
|
-
restricted() // only staking service
|
296
|
-
onlyStake(stakeNftId)
|
297
|
-
returns (NftId newStakeNftId)
|
298
|
-
{
|
299
|
-
// TODO add check that allows additional staking amount
|
300
|
-
StakingStorage storage $ = _getStakingStorage();
|
521
|
+
// increase stakes and restake rewards
|
522
|
+
bool restakeRewards = true;
|
523
|
+
if (restakeRewards && rewardBalance.gtz()) {
|
524
|
+
emit LogStakingRewardsRestaked(stakeNftId, rewardBalance + rewardBalance, stakeBalance, AmountLib.zero(), lockedUntil);
|
525
|
+
}
|
301
526
|
|
302
|
-
|
303
|
-
|
527
|
+
(
|
528
|
+
stakeBalance,
|
529
|
+
rewardBalance,
|
530
|
+
lockedUntil
|
531
|
+
) = $._store.increaseStakes(
|
532
|
+
stakeNftId,
|
533
|
+
stakeAmount,
|
534
|
+
targetLockingPeriod,
|
535
|
+
restakeRewards);
|
304
536
|
|
537
|
+
// collect staked DIP token by staking service
|
538
|
+
if (stakeAmount.gtz()) {
|
539
|
+
emit LogStakingStaked(stakeNftId, stakeAmount, stakeBalance, rewardBalance, lockedUntil);
|
305
540
|
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
onlyStake(stakeNftId)
|
311
|
-
{
|
312
|
-
StakingStorage storage $ = _getStakingStorage();
|
313
|
-
_updateRewards($._reader, $._store, stakeNftId);
|
541
|
+
// interactions
|
542
|
+
address stakeOwner = getRegistry().ownerOf(stakeNftId);
|
543
|
+
$._stakingService.pullDipToken(stakeAmount, stakeOwner);
|
544
|
+
}
|
314
545
|
}
|
315
546
|
|
316
547
|
|
317
|
-
|
548
|
+
/// @inheritdoc IStaking
|
549
|
+
function unstake(NftId stakeNftId)
|
318
550
|
external
|
319
551
|
virtual
|
320
552
|
restricted() // only staking service
|
321
|
-
|
553
|
+
onlyStakeOwner(stakeNftId)
|
322
554
|
returns (
|
555
|
+
Amount unstakedAmount,
|
323
556
|
Amount rewardsClaimedAmount
|
324
557
|
)
|
325
558
|
{
|
326
559
|
StakingStorage storage $ = _getStakingStorage();
|
560
|
+
bool restakeRewards = true;
|
561
|
+
Timestamp lockedUntil;
|
327
562
|
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
563
|
+
(
|
564
|
+
unstakedAmount,
|
565
|
+
rewardsClaimedAmount,
|
566
|
+
lockedUntil
|
567
|
+
) = _unstakeAll(
|
568
|
+
$,
|
333
569
|
stakeNftId,
|
334
|
-
|
335
|
-
|
570
|
+
restakeRewards); // restake rewards
|
571
|
+
|
572
|
+
// collect staked DIP token by staking service
|
573
|
+
Amount collectedAmount = unstakedAmount + rewardsClaimedAmount;
|
574
|
+
if (collectedAmount.gtz()) {
|
336
575
|
|
337
|
-
|
338
|
-
|
576
|
+
// interactions
|
577
|
+
address stakeOwner = getRegistry().ownerOf(stakeNftId);
|
578
|
+
$._stakingService.pushDipToken(collectedAmount, stakeOwner);
|
579
|
+
}
|
339
580
|
}
|
340
581
|
|
341
582
|
|
342
|
-
|
583
|
+
/// @inheritdoc IStaking
|
584
|
+
function restake(
|
585
|
+
NftId stakeNftId,
|
586
|
+
NftId newTargetNftId
|
587
|
+
)
|
343
588
|
external
|
344
589
|
virtual
|
345
590
|
restricted() // only staking service
|
346
|
-
|
591
|
+
onlyStakeOwner(stakeNftId)
|
592
|
+
onlyTarget(newTargetNftId)
|
347
593
|
returns (
|
348
|
-
|
349
|
-
Amount
|
594
|
+
NftId newStakeNftId,
|
595
|
+
Amount newStakedAmount
|
350
596
|
)
|
351
597
|
{
|
352
|
-
// TODO add check that stake locking is in the past
|
353
598
|
StakingStorage storage $ = _getStakingStorage();
|
599
|
+
address stakeOwner = msg.sender;
|
354
600
|
|
355
|
-
// update rewards since last update
|
356
|
-
NftId targetNftId = _updateRewards($._reader, $._store, stakeNftId);
|
357
|
-
|
358
|
-
// unstake all available dips
|
359
601
|
(
|
360
|
-
unstakedAmount,
|
361
|
-
rewardsClaimedAmount
|
362
|
-
) =
|
363
|
-
stakeNftId,
|
364
|
-
targetNftId,
|
365
|
-
AmountLib.max(), // unstake all stakes
|
366
|
-
AmountLib.max()); // claim all rewards
|
367
|
-
|
368
|
-
// update reward reserves
|
369
|
-
$._store.decreaseReserves(targetNftId, rewardsClaimedAmount);
|
370
|
-
}
|
602
|
+
Amount unstakedAmount,
|
603
|
+
Amount rewardsClaimedAmount,
|
604
|
+
) = _unstakeAll($, stakeNftId, true); // restake rewards
|
371
605
|
|
606
|
+
newStakeNftId = $._stakingService.createStakeObject(newTargetNftId, stakeOwner);
|
607
|
+
newStakedAmount = unstakedAmount + rewardsClaimedAmount;
|
608
|
+
$._store.createStake(
|
609
|
+
newStakeNftId,
|
610
|
+
newTargetNftId,
|
611
|
+
newStakedAmount);
|
372
612
|
|
613
|
+
emit LogStakingStakeRestaked(newStakeNftId, newTargetNftId, newStakedAmount, stakeOwner, stakeNftId);
|
614
|
+
}
|
373
615
|
|
374
|
-
//--- other functions ---------------------------------------------------//
|
375
616
|
|
376
|
-
function
|
617
|
+
function updateRewards(NftId stakeNftId)
|
377
618
|
external
|
619
|
+
virtual
|
378
620
|
restricted() // only staking service
|
621
|
+
onlyStake(stakeNftId)
|
622
|
+
returns (Amount newRewardAmount)
|
379
623
|
{
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
StakeManagerLib.checkDipBalanceAndAllowance(
|
384
|
-
getToken(),
|
385
|
-
from,
|
386
|
-
address(tokenHandler),
|
387
|
-
dipAmount);
|
388
|
-
|
389
|
-
// TODO: centralize token handling (issue #471)
|
390
|
-
tokenHandler.transfer(from, stakingWallet, dipAmount);
|
624
|
+
_updateRewards(
|
625
|
+
_getStakingStorage(),
|
626
|
+
stakeNftId);
|
391
627
|
}
|
392
628
|
|
393
629
|
|
394
|
-
function
|
630
|
+
function claimRewards(NftId stakeNftId)
|
395
631
|
external
|
632
|
+
virtual
|
396
633
|
restricted() // only staking service
|
634
|
+
onlyStake(stakeNftId)
|
635
|
+
returns (
|
636
|
+
Amount rewardsClaimedAmount
|
637
|
+
)
|
397
638
|
{
|
398
|
-
|
399
|
-
address stakingWallet = getWallet();
|
639
|
+
StakingStorage storage $ = _getStakingStorage();
|
400
640
|
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
641
|
+
// update rewards since last update
|
642
|
+
_updateRewards($, stakeNftId);
|
643
|
+
|
644
|
+
(
|
645
|
+
Amount restakedRewardAmount,
|
646
|
+
Amount unstakedAmount,
|
647
|
+
Amount claimedAmount,
|
648
|
+
Amount stakedBalance,
|
649
|
+
Amount rewardBalance,
|
650
|
+
Timestamp lockedUntil
|
651
|
+
) = $._store.decreaseStakes(
|
652
|
+
stakeNftId,
|
653
|
+
AmountLib.zero(), // unstake dip amount
|
654
|
+
AmountLib.max(), // unstake reward amount
|
655
|
+
false); // restake rewards
|
656
|
+
|
657
|
+
// collect staked DIP token by staking service
|
658
|
+
if (claimedAmount.gtz()) {
|
659
|
+
emit LogStakingRewardsClaimed(stakeNftId, claimedAmount, stakedBalance, rewardBalance, lockedUntil);
|
660
|
+
|
661
|
+
// interactions
|
662
|
+
address stakeOwner = getRegistry().ownerOf(stakeNftId);
|
663
|
+
$._stakingService.pushDipToken(claimedAmount, stakeOwner);
|
664
|
+
}
|
409
665
|
}
|
410
666
|
|
411
667
|
|
412
668
|
//--- view functions ----------------------------------------------------//
|
413
669
|
|
414
|
-
function getStakingReader() public view returns (StakingReader reader) {
|
670
|
+
function getStakingReader() public virtual view returns (StakingReader reader) {
|
415
671
|
return _getStakingStorage()._reader;
|
416
672
|
}
|
417
673
|
|
418
|
-
function getStakingStore() external view returns (StakingStore stakingStore) {
|
674
|
+
function getStakingStore() external virtual view returns (StakingStore stakingStore) {
|
419
675
|
return _getStakingStorage()._store;
|
420
676
|
}
|
421
677
|
|
422
|
-
function getTokenRegistryAddress() external view returns (address tokenRegistry) {
|
678
|
+
function getTokenRegistryAddress() external virtual view returns (address tokenRegistry) {
|
423
679
|
return address(_getStakingStorage()._tokenRegistry);
|
424
680
|
}
|
425
681
|
|
@@ -427,84 +683,234 @@ contract Staking is
|
|
427
683
|
return _getStakingStorage()._tokenHandler;
|
428
684
|
}
|
429
685
|
|
430
|
-
// from
|
686
|
+
// from IRegisterable
|
687
|
+
function getRelease()
|
688
|
+
public
|
689
|
+
pure
|
690
|
+
virtual override (IRelease, Registerable)
|
691
|
+
returns(VersionPart)
|
692
|
+
{
|
693
|
+
return VersionPartLib.toVersionPart(3);
|
694
|
+
}
|
695
|
+
|
696
|
+
// from IVersionable
|
431
697
|
function getVersion()
|
432
698
|
public
|
433
699
|
pure
|
434
|
-
virtual override (IVersionable, Versionable)
|
700
|
+
virtual override (Component, IVersionable, Versionable)
|
435
701
|
returns(Version)
|
436
702
|
{
|
437
|
-
return VersionLib.toVersion(
|
703
|
+
return VersionLib.toVersion(3,0,0);
|
438
704
|
}
|
439
705
|
|
440
706
|
//--- internal functions ------------------------------------------------//
|
441
707
|
|
708
|
+
|
709
|
+
function _refillRewardReserves(NftId targetNftId, Amount dipAmount, address transferFrom)
|
710
|
+
internal
|
711
|
+
virtual
|
712
|
+
returns (Amount newBalance)
|
713
|
+
{
|
714
|
+
// checks + effects
|
715
|
+
StakingStorage storage $ = _getStakingStorage();
|
716
|
+
newBalance = $._store.refillRewardReserves(targetNftId, dipAmount);
|
717
|
+
|
718
|
+
// interactions
|
719
|
+
// collect DIP token from target owner
|
720
|
+
if (dipAmount.gtz()) {
|
721
|
+
$._stakingService.pullDipToken(dipAmount, transferFrom);
|
722
|
+
}
|
723
|
+
}
|
724
|
+
|
725
|
+
|
726
|
+
function _withdrawRewardReserves(NftId targetNftId, Amount dipAmount, address transferTo)
|
727
|
+
internal
|
728
|
+
virtual
|
729
|
+
returns (Amount newBalance)
|
730
|
+
{
|
731
|
+
// checks + effects
|
732
|
+
StakingStorage storage $ = _getStakingStorage();
|
733
|
+
newBalance = $._store.withdrawRewardReserves(targetNftId, dipAmount);
|
734
|
+
|
735
|
+
// interactions
|
736
|
+
// transfer DIP token to designated address
|
737
|
+
if (dipAmount.gtz()) {
|
738
|
+
$._stakingService.pushDipToken(dipAmount, transferTo);
|
739
|
+
}
|
740
|
+
}
|
741
|
+
|
742
|
+
|
442
743
|
function _updateRewards(
|
443
|
-
|
444
|
-
StakingStore store,
|
744
|
+
StakingStorage storage $,
|
445
745
|
NftId stakeNftId
|
746
|
+
)
|
747
|
+
internal
|
748
|
+
virtual
|
749
|
+
returns (
|
750
|
+
Amount rewardIncreaseAmount,
|
751
|
+
Seconds targetLockingPeriod,
|
752
|
+
Amount stakeBalance,
|
753
|
+
Amount rewardBalance,
|
754
|
+
Timestamp lockedUntil
|
755
|
+
)
|
756
|
+
{
|
757
|
+
(
|
758
|
+
rewardIncreaseAmount,
|
759
|
+
targetLockingPeriod,
|
760
|
+
stakeBalance,
|
761
|
+
rewardBalance,
|
762
|
+
lockedUntil
|
763
|
+
) = $._store.updateRewards(stakeNftId);
|
764
|
+
|
765
|
+
if (rewardIncreaseAmount.gtz()) {
|
766
|
+
emit LogStakingStakeRewardsUpdated(stakeNftId, rewardIncreaseAmount, stakeBalance, rewardBalance, lockedUntil);
|
767
|
+
}
|
768
|
+
}
|
769
|
+
|
770
|
+
|
771
|
+
function _unstakeAll(
|
772
|
+
StakingStorage storage $,
|
773
|
+
NftId stakeNftId,
|
774
|
+
bool restakeRewards
|
446
775
|
)
|
447
776
|
internal
|
448
777
|
virtual
|
449
|
-
returns (
|
778
|
+
returns (
|
779
|
+
Amount unstakedAmount,
|
780
|
+
Amount claimedAmount,
|
781
|
+
Timestamp lockedUntil
|
782
|
+
)
|
450
783
|
{
|
451
|
-
|
784
|
+
// additional checks (most checks are done prior to calling this function)
|
785
|
+
if ($._store.isStakeLocked(stakeNftId)) {
|
786
|
+
revert ErrorStakingStakeLocked(stakeNftId, $._store.getStakeInfo(stakeNftId).lockedUntil);
|
787
|
+
}
|
788
|
+
|
789
|
+
// update rewards since last update
|
790
|
+
(,,,, lockedUntil) = _updateRewards($, stakeNftId);
|
791
|
+
Amount restakedRewardAmount;
|
792
|
+
Amount stakeBalance;
|
793
|
+
Amount rewardBalance;
|
452
794
|
|
453
|
-
(
|
454
|
-
|
455
|
-
|
795
|
+
(
|
796
|
+
restakedRewardAmount,
|
797
|
+
unstakedAmount,
|
798
|
+
claimedAmount,
|
799
|
+
stakeBalance,
|
800
|
+
rewardBalance,
|
801
|
+
) = $._store.decreaseStakes(
|
456
802
|
stakeNftId,
|
457
|
-
|
803
|
+
AmountLib.max(), // unstake all stakes
|
804
|
+
AmountLib.max(), // claim all rewards
|
805
|
+
restakeRewards);
|
458
806
|
|
459
|
-
|
460
|
-
stakeNftId,
|
461
|
-
|
462
|
-
|
807
|
+
if (restakedRewardAmount.gtz()) {
|
808
|
+
emit LogStakingRewardsRestaked(stakeNftId, restakedRewardAmount, stakeBalance + unstakedAmount, rewardBalance + claimedAmount, lockedUntil);
|
809
|
+
}
|
810
|
+
|
811
|
+
if (unstakedAmount.gtz() || claimedAmount.gtz()) {
|
812
|
+
emit LogStakingUnstaked(stakeNftId, unstakedAmount + claimedAmount, stakeBalance, rewardBalance, lockedUntil);
|
813
|
+
}
|
814
|
+
}
|
815
|
+
|
816
|
+
|
817
|
+
function _addToken(
|
818
|
+
StakingStorage storage $,
|
819
|
+
ChainId chainId,
|
820
|
+
address token
|
821
|
+
)
|
822
|
+
internal
|
823
|
+
virtual
|
824
|
+
{
|
825
|
+
if ($._store.getTokenInfo(chainId, token).lastUpdateIn.eqz()) {
|
826
|
+
$._store.addToken(chainId, token);
|
827
|
+
|
828
|
+
emit LogStakingTokenAdded(chainId, token);
|
829
|
+
}
|
463
830
|
}
|
464
831
|
|
465
832
|
|
833
|
+
/// @dev top level initializer (upgradable contract)
|
466
834
|
function _initialize(
|
467
835
|
address owner,
|
468
836
|
bytes memory data
|
469
837
|
)
|
470
838
|
internal
|
471
839
|
virtual override
|
472
|
-
|
840
|
+
onlyInitializing()
|
473
841
|
{
|
474
842
|
(
|
475
843
|
address registryAddress,
|
476
844
|
address tokenRegistryAddress,
|
477
|
-
address stakingStoreAddress
|
478
|
-
|
479
|
-
) = abi.decode(data, (address, address, address, address));
|
845
|
+
address stakingStoreAddress
|
846
|
+
) = abi.decode(data, (address, address, address));
|
480
847
|
|
481
|
-
//
|
848
|
+
// wiring to external contracts
|
482
849
|
IRegistry registry = IRegistry(registryAddress);
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
850
|
+
StakingStorage storage $ = _getStakingStorage();
|
851
|
+
$._protocolNftId = registry.getProtocolNftId();
|
852
|
+
$._store = StakingStore(stakingStoreAddress);
|
853
|
+
$._reader = StakingStore(stakingStoreAddress).getStakingReader();
|
854
|
+
$._tokenRegistry = TokenRegistry(tokenRegistryAddress);
|
855
|
+
// staking service has to be set via setStakingService after deploying the first GIF release
|
856
|
+
|
857
|
+
__Component_init(
|
858
|
+
registry.getAuthority(),
|
859
|
+
address(registry),
|
860
|
+
registry.getNftId(), // parent nft id
|
491
861
|
CONTRACT_NAME,
|
492
|
-
dipTokenAddress,
|
493
862
|
STAKING(),
|
494
863
|
false, // is interceptor
|
495
|
-
|
864
|
+
owner,
|
496
865
|
"", // registry data
|
497
866
|
""); // component data
|
498
867
|
|
499
|
-
//
|
868
|
+
// Protocol target is created in the StakingStore constructor.
|
869
|
+
// This allows setting up the protocol target before the full
|
870
|
+
// staking authorization setup is in place.
|
871
|
+
_checkAndLogProtocolTargetCreation();
|
872
|
+
|
873
|
+
_registerInterface(type(IStaking).interfaceId);
|
874
|
+
}
|
875
|
+
|
876
|
+
|
877
|
+
function _checkAndLogProtocolTargetCreation()
|
878
|
+
internal
|
879
|
+
virtual
|
880
|
+
{
|
500
881
|
StakingStorage storage $ = _getStakingStorage();
|
501
|
-
|
502
|
-
$._store = StakingStore(stakingStoreAddress);
|
503
|
-
$._reader = StakingStore(stakingStoreAddress).getStakingReader();
|
504
|
-
$._tokenRegistry = TokenRegistry(tokenRegistryAddress);
|
505
|
-
$._tokenHandler = new TokenHandler(address(getToken()));
|
882
|
+
TargetInfo memory protocolInfo = $._store.getTargetInfo($._protocolNftId);
|
506
883
|
|
507
|
-
|
884
|
+
if (protocolInfo.lastUpdateIn.eqz()) {
|
885
|
+
revert ErrorStakingTargetNotFound($._protocolNftId);
|
886
|
+
}
|
887
|
+
|
888
|
+
emit LogStakingTargetCreated($._protocolNftId, protocolInfo.objectType, protocolInfo.lockingPeriod, protocolInfo.rewardRate, protocolInfo.maxStakedAmount);
|
889
|
+
}
|
890
|
+
|
891
|
+
|
892
|
+
function _checkTypeAndOwner(NftId nftId, ObjectType expectedObjectType, bool checkOwner)
|
893
|
+
internal
|
894
|
+
view
|
895
|
+
{
|
896
|
+
if (expectedObjectType == STAKE()) {
|
897
|
+
if (!_getStakingStorage()._store.exists(nftId)) {
|
898
|
+
revert ErrorStakingNotStake(nftId);
|
899
|
+
}
|
900
|
+
} else {
|
901
|
+
if (expectedObjectType == TARGET()) {
|
902
|
+
if (!_getStakingStorage()._store.getTargetSet().exists(nftId)) {
|
903
|
+
revert ErrorStakingNotTarget(nftId);
|
904
|
+
}
|
905
|
+
}
|
906
|
+
}
|
907
|
+
|
908
|
+
if (checkOwner) {
|
909
|
+
address nftOwner = getRegistry().ownerOf(nftId);
|
910
|
+
if (msg.sender != nftOwner) {
|
911
|
+
revert ErrorStakingNotOwner(nftId, nftOwner, msg.sender);
|
912
|
+
}
|
913
|
+
}
|
508
914
|
}
|
509
915
|
|
510
916
|
|