@etherisc/gif-next 0.0.2-f1b01e0-214 → 0.0.2-f1e6957-384
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 +76 -341
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +1 -1
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +100 -32
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +111 -45
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +1 -1
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +52 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +367 -126
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +1546 -211
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +2 -2
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +261 -59
- 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 +258 -82
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +97 -14
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +256 -16
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +426 -27
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +52 -27
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +264 -64
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +20 -11
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +368 -139
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +160 -78
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +19 -10
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +228 -15
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +81 -52
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +263 -63
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +109 -68
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +263 -63
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +74 -33
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +263 -63
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +35 -26
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +85 -60
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +263 -63
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +264 -78
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +263 -63
- package/artifacts/contracts/instance/BaseStore.sol/BaseStore.dbg.json +4 -0
- package/artifacts/contracts/{shared/IKeyValueStore.sol/IKeyValueStore.json → instance/BaseStore.sol/BaseStore.json} +51 -229
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
- package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.dbg.json +4 -0
- package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.json +304 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +359 -33
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +297 -3
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +407 -97
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +756 -392
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +231 -75
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +492 -424
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +323 -29
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +100 -42
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1444 -2133
- package/artifacts/contracts/instance/ProductStore.sol/ProductStore.dbg.json +4 -0
- package/artifacts/contracts/instance/ProductStore.sol/ProductStore.json +3427 -0
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +1 -1
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +101 -88
- 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 +2 -2
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +2 -2
- 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 +25 -16
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +277 -60
- 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 +19 -10
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +29 -0
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +19 -10
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +83 -38
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +116 -50
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +37 -36
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +263 -63
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +294 -117
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +144 -58
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +180 -27
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +19 -10
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +220 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +19 -10
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +88 -22
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +324 -65
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +141 -63
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +216 -59
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +113 -43
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +19 -10
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +263 -63
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +142 -102
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +128 -70
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +166 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +50 -10
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +55 -0
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +29 -0
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +19 -10
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +203 -18
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +157 -86
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +508 -18
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +138 -72
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +93 -72
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +120 -50
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +19 -10
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +231 -46
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +101 -43
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +33 -22
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +29 -0
- package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +71 -60
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +537 -300
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +330 -71
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +41 -12
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +96 -38
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +543 -226
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +167 -103
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +459 -26
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +119 -59
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +19 -10
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +169 -174
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +130 -64
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +76 -41
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +2 -2
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +19 -10
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +84 -105
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -10
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +19 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +19 -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 +29 -0
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -10
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +21 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -0
- 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 +29 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +2 -2
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +2 -2
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1384 -128
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +94 -114
- 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 +1472 -185
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +73 -72
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +139 -64
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +293 -149
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +128 -164
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +96 -46
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +1617 -817
- 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 +140 -78
- 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 +2 -2
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +64 -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 +2 -2
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +1 -1
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +2 -2
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +6 -6
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +39 -218
- 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/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/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 +2 -2
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- 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 +81 -27
- 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 +15 -3
- package/contracts/accounting/IAccountingService.sol +2 -0
- package/contracts/authorization/AccessAdmin.sol +292 -317
- package/contracts/authorization/AccessAdminLib.sol +517 -22
- package/contracts/authorization/AccessManagerCloneable.sol +0 -18
- package/contracts/authorization/Authorization.sol +64 -239
- package/contracts/authorization/IAccess.sol +23 -14
- package/contracts/authorization/IAccessAdmin.sol +25 -53
- package/contracts/authorization/IAuthorization.sol +3 -57
- package/contracts/authorization/IServiceAuthorization.sol +55 -17
- package/contracts/authorization/ServiceAuthorization.sol +228 -34
- package/contracts/distribution/BasicDistribution.sol +3 -4
- package/contracts/distribution/BasicDistributionAuthorization.sol +11 -4
- package/contracts/distribution/Distribution.sol +9 -8
- package/contracts/distribution/DistributionService.sol +98 -35
- package/contracts/distribution/IDistributionComponent.sol +3 -1
- package/contracts/distribution/IDistributionService.sol +20 -8
- package/contracts/examples/fire/FireProduct.sol +6 -6
- package/contracts/examples/unpermissioned/SimpleProduct.sol +83 -19
- package/contracts/instance/BaseStore.sol +93 -0
- package/contracts/instance/IBaseStore.sol +37 -0
- package/contracts/instance/IInstance.sol +55 -5
- package/contracts/instance/IInstanceService.sol +37 -6
- package/contracts/instance/Instance.sol +103 -56
- package/contracts/instance/InstanceAdmin.sol +151 -294
- package/contracts/instance/InstanceAuthorizationV3.sol +106 -66
- package/contracts/instance/InstanceReader.sol +350 -394
- package/contracts/instance/InstanceService.sol +180 -125
- package/contracts/instance/InstanceStore.sol +153 -128
- package/contracts/instance/ProductStore.sol +290 -0
- package/contracts/instance/RiskSet.sol +10 -2
- package/contracts/instance/TargetNames.sol +10 -0
- package/contracts/instance/base/BalanceStore.sol +4 -6
- package/contracts/instance/base/ObjectLifecycle.sol +2 -6
- package/contracts/instance/module/IComponents.sol +0 -2
- package/contracts/oracle/BasicOracle.sol +2 -3
- package/contracts/oracle/BasicOracleAuthorization.sol +18 -2
- package/contracts/oracle/Oracle.sol +4 -6
- package/contracts/oracle/OracleService.sol +8 -8
- package/contracts/pool/BasicPool.sol +4 -16
- package/contracts/pool/BasicPoolAuthorization.sol +10 -5
- package/contracts/pool/BundleService.sol +34 -43
- package/contracts/pool/IBundleService.sol +14 -13
- package/contracts/pool/IPoolService.sol +7 -2
- package/contracts/pool/Pool.sol +6 -18
- package/contracts/pool/PoolLib.sol +127 -2
- package/contracts/pool/PoolService.sol +40 -181
- package/contracts/product/ApplicationService.sol +64 -11
- package/contracts/product/BasicProduct.sol +2 -3
- package/contracts/product/BasicProductAuthorization.sol +11 -4
- package/contracts/product/ClaimService.sol +99 -105
- package/contracts/product/IApplicationService.sol +21 -2
- package/contracts/product/IClaimService.sol +5 -4
- package/contracts/product/IPolicyService.sol +9 -2
- package/contracts/product/IRiskService.sol +18 -3
- package/contracts/product/PolicyService.sol +40 -59
- package/contracts/product/PolicyServiceLib.sol +79 -5
- package/contracts/product/PricingService.sol +22 -25
- package/contracts/product/Product.sol +40 -16
- package/contracts/product/RiskService.sol +50 -15
- package/contracts/registry/IRegistry.sol +11 -9
- package/contracts/registry/IRelease.sol +6 -3
- package/contracts/registry/Registry.sol +15 -9
- package/contracts/registry/RegistryAdmin.sol +33 -118
- package/contracts/registry/RegistryAuthorization.sol +139 -69
- package/contracts/registry/RegistryService.sol +1 -1
- package/contracts/registry/ReleaseAdmin.sol +52 -106
- package/contracts/registry/ReleaseRegistry.sol +20 -12
- package/contracts/registry/ServiceAuthorizationV3.sol +43 -32
- package/contracts/registry/TokenRegistry.sol +56 -52
- package/contracts/shared/Component.sol +8 -8
- package/contracts/shared/ComponentService.sol +245 -262
- package/contracts/shared/ContractLib.sol +106 -75
- package/contracts/shared/IComponent.sol +1 -1
- package/contracts/shared/IComponentService.sol +12 -13
- package/contracts/shared/INftOwnable.sol +2 -0
- package/contracts/shared/IRegisterable.sol +0 -1
- package/contracts/shared/InstanceLinkedComponent.sol +6 -9
- package/contracts/shared/NftOwnable.sol +3 -1
- package/contracts/shared/PolicyHolder.sol +3 -2
- package/contracts/shared/Service.sol +6 -4
- package/contracts/staking/IStaking.sol +261 -70
- package/contracts/staking/IStakingService.sol +39 -84
- package/contracts/staking/ITargetLimitHandler.sol +17 -0
- package/contracts/staking/Staking.sol +468 -217
- package/contracts/staking/StakingLib.sol +38 -124
- package/contracts/staking/StakingManager.sol +4 -3
- package/contracts/staking/StakingReader.sol +62 -71
- package/contracts/staking/StakingService.sol +42 -185
- package/contracts/staking/StakingServiceManager.sol +1 -0
- package/contracts/staking/StakingStore.sol +1093 -331
- package/contracts/staking/TargetHandler.sol +132 -0
- package/contracts/staking/TargetManagerLib.sol +69 -46
- package/contracts/type/Amount.sol +4 -0
- package/contracts/type/Blocknumber.sol +17 -22
- package/contracts/type/ChainId.sol +101 -0
- package/contracts/type/NftId.sol +3 -3
- package/contracts/type/ObjectType.sol +16 -3
- package/contracts/type/RoleId.sol +57 -59
- package/contracts/type/Seconds.sol +19 -0
- package/contracts/type/String.sol +12 -0
- package/contracts/type/Timestamp.sol +4 -2
- package/contracts/type/UFixed.sol +1 -0
- package/contracts/upgradeability/IVersionable.sol +3 -0
- package/contracts/upgradeability/ProxyManager.sol +26 -12
- package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +12 -2
- package/contracts/upgradeability/Versionable.sol +6 -3
- package/package.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +0 -4
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +0 -24
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +0 -485
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +0 -538
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +0 -4
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +0 -205
- package/contracts/shared/ComponentVerifyingService.sol +0 -128
- package/contracts/shared/IKeyValueStore.sol +0 -54
- package/contracts/shared/KeyValueStore.sol +0 -131
- package/contracts/staking/StakingLifecycle.sol +0 -23
| @@ -0,0 +1,132 @@ | |
| 1 | 
            +
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 | 
            +
            pragma solidity ^0.8.20;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
         | 
| 5 | 
            +
            import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; 
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 8 | 
            +
            import {ITargetLimitHandler} from "./ITargetLimitHandler.sol";
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 11 | 
            +
            import {Blocknumber, BlocknumberLib} from "../type/Blocknumber.sol";
         | 
| 12 | 
            +
            import {NftId} from "../type/NftId.sol";
         | 
| 13 | 
            +
            import {StakingStore} from "./StakingStore.sol";
         | 
| 14 | 
            +
            import {UFixed, UFixedLib} from "../type/UFixed.sol";
         | 
| 15 | 
            +
             | 
| 16 | 
            +
             | 
| 17 | 
            +
            contract TargetHandler is
         | 
| 18 | 
            +
                Initializable,
         | 
| 19 | 
            +
                AccessManaged,
         | 
| 20 | 
            +
                ITargetLimitHandler
         | 
| 21 | 
            +
            {
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                event LogTargetHandlerUpdateTriggersSet(uint16 tvlUpdatesTrigger, UFixed minTvlRatioTrigger, Blocknumber lastUpdateIn);
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                IRegistry private _registry;
         | 
| 26 | 
            +
                StakingStore private _store;
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                /// @dev Update trigger value: Number of TVL updates below which limit updates are suppressed
         | 
| 29 | 
            +
                uint16 private _tvlUpdatesTrigger; 
         | 
| 30 | 
            +
                /// @dev Maximum TVL ratio: Any ratio above this value will trigger a limit update
         | 
| 31 | 
            +
                UFixed private _minTvlRatioTrigger;
         | 
| 32 | 
            +
                Blocknumber private _lastUpdateIn;
         | 
| 33 | 
            +
             | 
| 34 | 
            +
             | 
| 35 | 
            +
                constructor (
         | 
| 36 | 
            +
                    IRegistry registry,
         | 
| 37 | 
            +
                    StakingStore stakingStore
         | 
| 38 | 
            +
                )
         | 
| 39 | 
            +
                    AccessManaged(msg.sender)
         | 
| 40 | 
            +
                {
         | 
| 41 | 
            +
                    // set final authority and registry
         | 
| 42 | 
            +
                    setAuthority(registry.getAuthority());
         | 
| 43 | 
            +
                    _registry = registry;
         | 
| 44 | 
            +
                    _store = stakingStore;
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                    // set default trigger values
         | 
| 47 | 
            +
                    _setUpdateTriggers(
         | 
| 48 | 
            +
                        10, // check after 2 TVL updates
         | 
| 49 | 
            +
                        UFixedLib.toUFixed(1, -1)); // 10% deviation from baseline TVL
         | 
| 50 | 
            +
                }
         | 
| 51 | 
            +
             | 
| 52 | 
            +
             | 
| 53 | 
            +
                // TODO do we really need this?
         | 
| 54 | 
            +
                // if so: add onlyDeployer (new base contract? also for reader)
         | 
| 55 | 
            +
                // if not: remove oz intializer/initializable
         | 
| 56 | 
            +
                function initialize()
         | 
| 57 | 
            +
                    external
         | 
| 58 | 
            +
                    initializer()
         | 
| 59 | 
            +
                { }
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                //--- staking functions -------------------------------------------------------//
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                /// @dev Sets the TVL update triggers.
         | 
| 64 | 
            +
                function setUpdateTriggers(
         | 
| 65 | 
            +
                    uint16 tvlUpdatesTrigger,
         | 
| 66 | 
            +
                    UFixed minTvlRatioTrigger
         | 
| 67 | 
            +
                )
         | 
| 68 | 
            +
                    external
         | 
| 69 | 
            +
                    restricted()
         | 
| 70 | 
            +
                {
         | 
| 71 | 
            +
                    _setUpdateTriggers(tvlUpdatesTrigger, minTvlRatioTrigger);
         | 
| 72 | 
            +
                }
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                //--- ITargetLimitHandler -----------------------------------------------------//
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                /// @inheritdoc ITargetLimitHandler
         | 
| 77 | 
            +
                // Current implementation only considers the TVL amounts. 
         | 
| 78 | 
            +
                // Future implementations may also consider target or token specific factors. 
         | 
| 79 | 
            +
                function isLimitUpdateRequired(
         | 
| 80 | 
            +
                    NftId, // targetNftId
         | 
| 81 | 
            +
                    address , // token
         | 
| 82 | 
            +
                    uint16 tvlUpdatesCount,
         | 
| 83 | 
            +
                    Amount baselineTvlAmount, 
         | 
| 84 | 
            +
                    Amount currentTvlAmount
         | 
| 85 | 
            +
                )
         | 
| 86 | 
            +
                    external 
         | 
| 87 | 
            +
                    virtual
         | 
| 88 | 
            +
                    view
         | 
| 89 | 
            +
                    returns (bool updateIsRequired)
         | 
| 90 | 
            +
                {
         | 
| 91 | 
            +
                    // no update required if below the TVL updates trigger
         | 
| 92 | 
            +
                    if (tvlUpdatesCount < _tvlUpdatesTrigger) {
         | 
| 93 | 
            +
                        return false;
         | 
| 94 | 
            +
                    }
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                    // no update required if both amounts are zero
         | 
| 97 | 
            +
                    Amount zero = AmountLib.zero();
         | 
| 98 | 
            +
                    if (baselineTvlAmount == zero && currentTvlAmount == zero) {
         | 
| 99 | 
            +
                        return false;
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                    // update required if one amount is zero
         | 
| 102 | 
            +
                    } else if (baselineTvlAmount == zero || currentTvlAmount == zero) {
         | 
| 103 | 
            +
                        return true;
         | 
| 104 | 
            +
                    }
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                    // calculate the ratio of the current TVL amount to the baseline TVL amount
         | 
| 107 | 
            +
                    UFixed baseline = baselineTvlAmount.toUFixed();
         | 
| 108 | 
            +
                    UFixed current = currentTvlAmount.toUFixed();
         | 
| 109 | 
            +
                    UFixed ratio;
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                    if (baseline > current) { ratio = baseline / current; }
         | 
| 112 | 
            +
                    else { ratio = current / baseline; }
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                    // update required if the ratio is above the maximum TVL ratio
         | 
| 115 | 
            +
                    return ratio >= _minTvlRatioTrigger;
         | 
| 116 | 
            +
                }
         | 
| 117 | 
            +
             | 
| 118 | 
            +
             | 
| 119 | 
            +
                function _setUpdateTriggers(
         | 
| 120 | 
            +
                    uint16 tvlUpdatesTrigger,
         | 
| 121 | 
            +
                    UFixed minTvlRatioTrigger
         | 
| 122 | 
            +
                )
         | 
| 123 | 
            +
                    internal
         | 
| 124 | 
            +
                {
         | 
| 125 | 
            +
                    Blocknumber lastUpdateIn = _lastUpdateIn;
         | 
| 126 | 
            +
                    _tvlUpdatesTrigger = tvlUpdatesTrigger;
         | 
| 127 | 
            +
                    _minTvlRatioTrigger = minTvlRatioTrigger;
         | 
| 128 | 
            +
                    _lastUpdateIn = BlocknumberLib.current();
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                    emit LogTargetHandlerUpdateTriggersSet(tvlUpdatesTrigger, minTvlRatioTrigger, lastUpdateIn);
         | 
| 131 | 
            +
                }
         | 
| 132 | 
            +
            }
         | 
| @@ -3,8 +3,10 @@ pragma solidity ^0.8.20; | |
| 3 3 |  | 
| 4 4 | 
             
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 5 5 |  | 
| 6 | 
            +
            import {IStaking} from "./IStaking.sol";
         | 
| 7 | 
            +
             | 
| 6 8 | 
             
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 7 | 
            -
            import { | 
| 9 | 
            +
            import {ChainIdLib} from "../type/ChainId.sol";
         | 
| 8 10 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 9 11 | 
             
            import {IRegistryService} from "../registry/IRegistryService.sol";
         | 
| 10 12 | 
             
            import {IStaking} from "./IStaking.sol";
         | 
| @@ -37,7 +39,8 @@ library TargetManagerLib { | |
| 37 39 | 
             
                        revert IStaking.ErrorStakingTargetNotFound(targetNftId);
         | 
| 38 40 | 
             
                    }
         | 
| 39 41 |  | 
| 40 | 
            -
                     | 
| 42 | 
            +
                    ObjectType targetType = reader.getTargetInfo(targetNftId).objectType;
         | 
| 43 | 
            +
                    checkLockingPeriod(reader, targetNftId, targetType, lockingPeriod);
         | 
| 41 44 |  | 
| 42 45 | 
             
                    targetInfo = reader.getTargetInfo(targetNftId);
         | 
| 43 46 | 
             
                    oldLockingPeriod = targetInfo.lockingPeriod;
         | 
| @@ -65,7 +68,8 @@ library TargetManagerLib { | |
| 65 68 | 
             
                        revert IStaking.ErrorStakingTargetNotFound(targetNftId);
         | 
| 66 69 | 
             
                    }
         | 
| 67 70 |  | 
| 68 | 
            -
                     | 
| 71 | 
            +
                    ObjectType targetType = reader.getTargetInfo(targetNftId).objectType;
         | 
| 72 | 
            +
                    checkRewardRate(reader, targetNftId, targetType, rewardRate);
         | 
| 69 73 |  | 
| 70 74 | 
             
                    targetInfo = reader.getTargetInfo(targetNftId);
         | 
| 71 75 | 
             
                    oldRewardRate = targetInfo.rewardRate;
         | 
| @@ -79,8 +83,8 @@ library TargetManagerLib { | |
| 79 83 | 
             
                    StakingReader stakingReader,
         | 
| 80 84 | 
             
                    NftId targetNftId,
         | 
| 81 85 | 
             
                    ObjectType expectedObjectType,
         | 
| 82 | 
            -
                    Seconds  | 
| 83 | 
            -
                    UFixed  | 
| 86 | 
            +
                    Seconds lockingPeriod,
         | 
| 87 | 
            +
                    UFixed rewardRate
         | 
| 84 88 | 
             
                )
         | 
| 85 89 | 
             
                    external
         | 
| 86 90 | 
             
                    view
         | 
| @@ -95,63 +99,54 @@ library TargetManagerLib { | |
| 95 99 | 
             
                        revert IStaking.ErrorStakingTargetAlreadyRegistered(targetNftId);
         | 
| 96 100 | 
             
                    }
         | 
| 97 101 |  | 
| 98 | 
            -
                    //  | 
| 99 | 
            -
                     | 
| 102 | 
            +
                    // get setup info for additional checks
         | 
| 103 | 
            +
                    IStaking.SupportInfo memory supportInfo = stakingReader.getSupportInfo(expectedObjectType);
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                    // check if type is supported and new targets of that type are allowed
         | 
| 106 | 
            +
                    if (!(supportInfo.isSupported && supportInfo.allowNewTargets)) {
         | 
| 100 107 | 
             
                        revert IStaking.ErrorStakingTargetTypeNotSupported(targetNftId, expectedObjectType);
         | 
| 101 108 | 
             
                    }
         | 
| 102 109 |  | 
| 103 | 
            -
                     | 
| 104 | 
            -
                     | 
| 110 | 
            +
                    // check if cross chain targets are allowed (if applicable)
         | 
| 111 | 
            +
                    bool isCurrentChain = ChainIdLib.isCurrentChain(targetNftId);
         | 
| 112 | 
            +
                    if (!supportInfo.allowCrossChain && !isCurrentChain) {
         | 
| 113 | 
            +
                        revert IStaking.ErrorStakingCrossChainTargetsNotSupported(targetNftId, expectedObjectType);
         | 
| 114 | 
            +
                    }
         | 
| 105 115 |  | 
| 106 | 
            -
                    // target nft id must be known and registered with the expected object type
         | 
| 107 | 
            -
                    if ( | 
| 108 | 
            -
                         | 
| 109 | 
            -
             | 
| 110 | 
            -
                         | 
| 111 | 
            -
             | 
| 112 | 
            -
             | 
| 113 | 
            -
                             | 
| 116 | 
            +
                    // additional check for current chain target: target nft id must be known and registered with the expected object type
         | 
| 117 | 
            +
                    if (isCurrentChain) {
         | 
| 118 | 
            +
                        if (!registry.isRegistered(targetNftId)) {
         | 
| 119 | 
            +
                            revert IStaking.ErrorStakingTargetNotFound(targetNftId);
         | 
| 120 | 
            +
                        } else {
         | 
| 121 | 
            +
                            // check that expected object type matches with registered object type
         | 
| 122 | 
            +
                            ObjectType actualObjectType = registry.getObjectInfo(targetNftId).objectType;
         | 
| 123 | 
            +
                            if (actualObjectType != expectedObjectType) {
         | 
| 124 | 
            +
                                revert IStaking.ErrorStakingTargetUnexpectedObjectType(targetNftId, expectedObjectType, actualObjectType);
         | 
| 125 | 
            +
                            }
         | 
| 114 126 | 
             
                        }
         | 
| 115 127 | 
             
                    }
         | 
| 116 | 
            -
                }
         | 
| 117 128 |  | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
                     | 
| 121 | 
            -
                    pure 
         | 
| 122 | 
            -
                    returns (bool isSupported)
         | 
| 123 | 
            -
                {
         | 
| 124 | 
            -
                    if(objectType == PROTOCOL()) { return true; }
         | 
| 125 | 
            -
                    if(objectType == INSTANCE()) { return true; }
         | 
| 126 | 
            -
             | 
| 127 | 
            -
                    return false;
         | 
| 129 | 
            +
                    // check locking period and reward rate
         | 
| 130 | 
            +
                    _checkLockingPeriod(targetNftId, lockingPeriod, supportInfo);
         | 
| 131 | 
            +
                    _checkRewardRate(targetNftId, rewardRate, supportInfo);
         | 
| 128 132 | 
             
                }
         | 
| 129 133 |  | 
| 130 134 |  | 
| 131 | 
            -
                function checkLockingPeriod(NftId targetNftId, Seconds lockingPeriod)
         | 
| 135 | 
            +
                function checkLockingPeriod(StakingReader reader, NftId targetNftId, ObjectType targetType, Seconds lockingPeriod)
         | 
| 132 136 | 
             
                    public 
         | 
| 133 | 
            -
                     | 
| 137 | 
            +
                    view
         | 
| 134 138 | 
             
                {
         | 
| 135 | 
            -
                     | 
| 136 | 
            -
                     | 
| 137 | 
            -
                        revert IStaking.ErrorStakingLockingPeriodTooShort(targetNftId, getMinimumLockingPeriod(), lockingPeriod);
         | 
| 138 | 
            -
                    }
         | 
| 139 | 
            -
             | 
| 140 | 
            -
                    // check locking period <= max locking period
         | 
| 141 | 
            -
                    if (lockingPeriod > getMaxLockingPeriod()) {
         | 
| 142 | 
            -
                        revert IStaking.ErrorStakingLockingPeriodTooLong(targetNftId, getMaxLockingPeriod(), lockingPeriod);
         | 
| 143 | 
            -
                    }
         | 
| 139 | 
            +
                    IStaking.SupportInfo memory supportInfo = reader.getSupportInfo(targetType);
         | 
| 140 | 
            +
                    _checkLockingPeriod(targetNftId, lockingPeriod, supportInfo);
         | 
| 144 141 | 
             
                }
         | 
| 145 142 |  | 
| 146 143 |  | 
| 147 | 
            -
                function checkRewardRate(NftId targetNftId, UFixed rewardRate)
         | 
| 144 | 
            +
                function checkRewardRate(StakingReader reader, NftId targetNftId, ObjectType targetType, UFixed rewardRate)
         | 
| 148 145 | 
             
                    public
         | 
| 149 | 
            -
                     | 
| 146 | 
            +
                    view
         | 
| 150 147 | 
             
                {
         | 
| 151 | 
            -
                     | 
| 152 | 
            -
                     | 
| 153 | 
            -
                        revert IStaking.ErrorStakingRewardRateTooHigh(targetNftId, getMaxRewardRate(), rewardRate);
         | 
| 154 | 
            -
                    }
         | 
| 148 | 
            +
                    IStaking.SupportInfo memory supportInfo = reader.getSupportInfo(targetType);
         | 
| 149 | 
            +
                    _checkRewardRate(targetNftId, rewardRate, supportInfo);
         | 
| 155 150 | 
             
                }
         | 
| 156 151 |  | 
| 157 152 |  | 
| @@ -160,7 +155,7 @@ library TargetManagerLib { | |
| 160 155 | 
             
                    UFixed stakingRate
         | 
| 161 156 | 
             
                )
         | 
| 162 157 | 
             
                    public
         | 
| 163 | 
            -
                     | 
| 158 | 
            +
                    pure
         | 
| 164 159 | 
             
                    returns (Amount dipAmount)
         | 
| 165 160 | 
             
                {
         | 
| 166 161 | 
             
                    dipAmount = tokenAmount.multiplyWith(stakingRate);
         | 
| @@ -208,4 +203,32 @@ library TargetManagerLib { | |
| 208 203 | 
             
                function toTargetKey(NftId targetNftId) public pure returns (Key32 targetKey) {
         | 
| 209 204 | 
             
                    return targetNftId.toKey32(TARGET());
         | 
| 210 205 | 
             
                }
         | 
| 206 | 
            +
             | 
| 207 | 
            +
             | 
| 208 | 
            +
                function _checkLockingPeriod(NftId targetNftId, Seconds lockingPeriod, IStaking.SupportInfo memory supportInfo)
         | 
| 209 | 
            +
                    private
         | 
| 210 | 
            +
                    pure
         | 
| 211 | 
            +
                {
         | 
| 212 | 
            +
                    if (lockingPeriod < supportInfo.minLockingPeriod || lockingPeriod > supportInfo.maxLockingPeriod) {
         | 
| 213 | 
            +
                        revert IStaking.ErrorStakingLockingPeriodInvalid(
         | 
| 214 | 
            +
                            targetNftId, 
         | 
| 215 | 
            +
                            lockingPeriod, 
         | 
| 216 | 
            +
                            supportInfo.minLockingPeriod,
         | 
| 217 | 
            +
                            supportInfo.maxLockingPeriod);
         | 
| 218 | 
            +
                    }
         | 
| 219 | 
            +
                }
         | 
| 220 | 
            +
             | 
| 221 | 
            +
             | 
| 222 | 
            +
                function _checkRewardRate(NftId targetNftId, UFixed rewardRate, IStaking.SupportInfo memory supportInfo) 
         | 
| 223 | 
            +
                    private
         | 
| 224 | 
            +
                    pure
         | 
| 225 | 
            +
                {
         | 
| 226 | 
            +
                    if (rewardRate < supportInfo.minRewardRate || rewardRate > supportInfo.maxRewardRate) {
         | 
| 227 | 
            +
                        revert IStaking.ErrorStakingRewardRateInvalid(
         | 
| 228 | 
            +
                            targetNftId, 
         | 
| 229 | 
            +
                            rewardRate,
         | 
| 230 | 
            +
                            supportInfo.minRewardRate,
         | 
| 231 | 
            +
                            supportInfo.maxRewardRate);
         | 
| 232 | 
            +
                    }
         | 
| 233 | 
            +
                }
         | 
| 211 234 | 
             
            }
         | 
| @@ -3,6 +3,10 @@ pragma solidity ^0.8.20; | |
| 3 3 |  | 
| 4 4 | 
             
            import {UFixed, UFixedLib} from "./UFixed.sol";
         | 
| 5 5 |  | 
| 6 | 
            +
            /// @dev Targets: 100 trillion (worlds GDP) with 6 decimal places
         | 
| 7 | 
            +
            /// 3 trillion USD (total crypto market cap) with 12 decimal places.
         | 
| 8 | 
            +
            /// 2023 100 trillion USD => 100e12 * 1e6 = 1e20
         | 
| 9 | 
            +
            /// 2024 2 trillion crypto market cap => 2e12 * 1e18 = 2e30
         | 
| 6 10 | 
             
            type Amount is uint96;
         | 
| 7 11 |  | 
| 8 12 | 
             
            using {
         | 
| @@ -1,7 +1,9 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
             | 
| 4 | 
            +
            /// @dev Target: Cover 10 years with 1 ms block times.
         | 
| 5 | 
            +
            /// Typical block times are a few seconds.
         | 
| 6 | 
            +
            type Blocknumber is uint40;
         | 
| 5 7 |  | 
| 6 8 | 
             
            using {
         | 
| 7 9 | 
             
                gtBlocknumber as >,
         | 
| @@ -51,30 +53,23 @@ function neBlocknumber(Blocknumber a, Blocknumber b) pure returns (bool) { | |
| 51 53 | 
             
                return Blocknumber.unwrap(a) != Blocknumber.unwrap(b);
         | 
| 52 54 | 
             
            }
         | 
| 53 55 |  | 
| 54 | 
            -
            /// @dev Converts the uint256 to a Blocknumber.
         | 
| 55 | 
            -
            function toBlocknumber(uint256 blocknum) pure returns (Blocknumber) {
         | 
| 56 | 
            -
                return Blocknumber.wrap(uint32(blocknum));
         | 
| 57 | 
            -
            }
         | 
| 58 56 |  | 
| 59 | 
            -
             | 
| 60 | 
            -
                return BlocknumberLib.currentBlocknumber();
         | 
| 61 | 
            -
            }
         | 
| 57 | 
            +
            library BlocknumberLib {
         | 
| 62 58 |  | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
                return toBlocknumber(0);
         | 
| 67 | 
            -
            }
         | 
| 59 | 
            +
                function zero() public pure returns (Blocknumber) {
         | 
| 60 | 
            +
                    return Blocknumber.wrap(0);
         | 
| 61 | 
            +
                }
         | 
| 68 62 |  | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
                 | 
| 72 | 
            -
            }
         | 
| 63 | 
            +
                function max() public pure returns (Blocknumber) {
         | 
| 64 | 
            +
                    return Blocknumber.wrap(type(uint40).max);
         | 
| 65 | 
            +
                }
         | 
| 73 66 |  | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
                 | 
| 77 | 
            -
             | 
| 67 | 
            +
                function current() public view returns (Blocknumber) {
         | 
| 68 | 
            +
                    return Blocknumber.wrap(uint40(block.number));
         | 
| 69 | 
            +
                }
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                function toBlocknumber(uint256 blocknum) public pure returns (Blocknumber) {
         | 
| 72 | 
            +
                    return Blocknumber.wrap(uint32(blocknum));
         | 
| 78 73 | 
             
                }
         | 
| 79 74 |  | 
| 80 75 | 
             
                /// @dev return true iff blocknumber is 0
         | 
| @@ -82,7 +77,7 @@ library BlocknumberLib { | |
| 82 77 | 
             
                    return Blocknumber.unwrap(blocknumber) == 0;
         | 
| 83 78 | 
             
                }
         | 
| 84 79 |  | 
| 85 | 
            -
                /// @dev return true iff blocknumber is 0
         | 
| 80 | 
            +
                /// @dev return true iff blocknumber is > 0
         | 
| 86 81 | 
             
                function gtz(Blocknumber blocknumber) public pure returns (bool) {
         | 
| 87 82 | 
             
                    return Blocknumber.unwrap(blocknumber) > 0;
         | 
| 88 83 | 
             
                }
         | 
| @@ -0,0 +1,101 @@ | |
| 1 | 
            +
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 | 
            +
            pragma solidity ^0.8.20;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            import {NftId} from "./NftId.sol";
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            /// @dev Target: Cover chain IDs up to 26 decimal places.
         | 
| 7 | 
            +
            /// Current longest chain ID seems to be DCHAIN Testnet: 2713017997578000 with 16 decimal places 
         | 
| 8 | 
            +
            type ChainId is uint96;
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            using {
         | 
| 11 | 
            +
                eqChainId as ==,
         | 
| 12 | 
            +
                neChainId as !=,
         | 
| 13 | 
            +
                ChainIdLib.toInt,
         | 
| 14 | 
            +
                ChainIdLib.eqz,
         | 
| 15 | 
            +
                ChainIdLib.gtz
         | 
| 16 | 
            +
            } for ChainId global;
         | 
| 17 | 
            +
             | 
| 18 | 
            +
             | 
| 19 | 
            +
            /// @dev return true if ChainId a is equal to ChainId b
         | 
| 20 | 
            +
            function eqChainId(ChainId a, ChainId b) pure returns (bool) {
         | 
| 21 | 
            +
                return ChainId.unwrap(a) == ChainId.unwrap(b);
         | 
| 22 | 
            +
            }
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            /// @dev return true if ChainId a is not equal to ChainId b
         | 
| 25 | 
            +
            function neChainId(ChainId a, ChainId b) pure returns (bool) {
         | 
| 26 | 
            +
                return ChainId.unwrap(a) != ChainId.unwrap(b);
         | 
| 27 | 
            +
            }
         | 
| 28 | 
            +
             | 
| 29 | 
            +
             | 
| 30 | 
            +
            library ChainIdLib {
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                error ErrorChainIdLibValueTooBig(uint256 chainId);
         | 
| 33 | 
            +
             | 
| 34 | 
            +
             | 
| 35 | 
            +
                function zero() public pure returns (ChainId) {
         | 
| 36 | 
            +
                    return ChainId.wrap(0);
         | 
| 37 | 
            +
                }
         | 
| 38 | 
            +
             | 
| 39 | 
            +
             | 
| 40 | 
            +
                function max() public pure returns (ChainId) {
         | 
| 41 | 
            +
                    return ChainId.wrap(_max());
         | 
| 42 | 
            +
                }
         | 
| 43 | 
            +
             | 
| 44 | 
            +
             | 
| 45 | 
            +
                function current() public view returns (ChainId) {
         | 
| 46 | 
            +
                    return toChainId(block.chainid);
         | 
| 47 | 
            +
                }
         | 
| 48 | 
            +
             | 
| 49 | 
            +
             | 
| 50 | 
            +
                /// @dev return true iff chainId is 0
         | 
| 51 | 
            +
                function eqz(ChainId chainId) public pure returns (bool) {
         | 
| 52 | 
            +
                    return ChainId.unwrap(chainId) == 0;
         | 
| 53 | 
            +
                }
         | 
| 54 | 
            +
             | 
| 55 | 
            +
             | 
| 56 | 
            +
                /// @dev return true iff chainId is > 0
         | 
| 57 | 
            +
                function gtz(ChainId chainId) public pure returns (bool) {
         | 
| 58 | 
            +
                    return ChainId.unwrap(chainId) > 0;
         | 
| 59 | 
            +
                }
         | 
| 60 | 
            +
             | 
| 61 | 
            +
             | 
| 62 | 
            +
                /// @dev converts the uint into ChainId
         | 
| 63 | 
            +
                /// function reverts if value is exceeding max ChainId value
         | 
| 64 | 
            +
                function toChainId(uint256 chainId) public pure returns (ChainId) {
         | 
| 65 | 
            +
                    if(chainId > _max()) {
         | 
| 66 | 
            +
                        revert ErrorChainIdLibValueTooBig(chainId);
         | 
| 67 | 
            +
                    }
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                    return ChainId.wrap(uint96(chainId));
         | 
| 70 | 
            +
                }
         | 
| 71 | 
            +
             | 
| 72 | 
            +
             | 
| 73 | 
            +
                /// @dev returns true iff NFT ID is from the current chain.
         | 
| 74 | 
            +
                function isCurrentChain(NftId nftId) public view returns (bool) {
         | 
| 75 | 
            +
                    return _fromNftId(nftId) == block.chainid;
         | 
| 76 | 
            +
                }
         | 
| 77 | 
            +
             | 
| 78 | 
            +
             | 
| 79 | 
            +
                function fromNftId(NftId nftId) public pure returns (ChainId) {
         | 
| 80 | 
            +
                    return toChainId(_fromNftId(nftId));
         | 
| 81 | 
            +
                }
         | 
| 82 | 
            +
             | 
| 83 | 
            +
             | 
| 84 | 
            +
                /// @dev converts the ChainId to a uint256
         | 
| 85 | 
            +
                function toInt(ChainId chainId) public pure returns (uint256) {
         | 
| 86 | 
            +
                    return uint256(uint96(ChainId.unwrap(chainId)));
         | 
| 87 | 
            +
                }
         | 
| 88 | 
            +
             | 
| 89 | 
            +
             | 
| 90 | 
            +
                function _fromNftId(NftId nftId) internal pure returns (uint256 chainIdInt) {
         | 
| 91 | 
            +
                    uint256 nftIdInt = nftId.toInt();
         | 
| 92 | 
            +
                    uint256 chainIdDigits = nftIdInt % 100; // Extract the last two digits
         | 
| 93 | 
            +
                    chainIdInt = nftIdInt % 10**(chainIdDigits + 2) / 100; // Extract the chainId
         | 
| 94 | 
            +
                }
         | 
| 95 | 
            +
             | 
| 96 | 
            +
             | 
| 97 | 
            +
                function _max() internal pure returns (uint96) {
         | 
| 98 | 
            +
                    // IMPORTANT: type nees to match with actual definition for Amount
         | 
| 99 | 
            +
                    return type(uint96).max;
         | 
| 100 | 
            +
                }
         | 
| 101 | 
            +
            }
         | 
    
        package/contracts/type/NftId.sol
    CHANGED
    
    | @@ -78,8 +78,8 @@ library NftIdLib { | |
| 78 78 | 
             
                }
         | 
| 79 79 |  | 
| 80 80 | 
             
                function toNftId(KeyId keyId) public pure returns (NftId nftId) {
         | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 81 | 
            +
                    uint248 keyIdInt = uint248(bytes31(KeyId.unwrap(keyId)));
         | 
| 82 | 
            +
                    assert(keyIdInt < type(uint96).max);
         | 
| 83 | 
            +
                    return NftId.wrap(uint96(keyIdInt));
         | 
| 84 84 | 
             
                }
         | 
| 85 85 | 
             
            }
         | 
| @@ -10,6 +10,7 @@ using { | |
| 10 10 | 
             
                eqObjectType as ==,
         | 
| 11 11 | 
             
                neObjectType as !=,
         | 
| 12 12 | 
             
                ObjectTypeLib.toInt,
         | 
| 13 | 
            +
                ObjectTypeLib.toName,
         | 
| 13 14 | 
             
                ObjectTypeLib.eqz,
         | 
| 14 15 | 
             
                ObjectTypeLib.eq,
         | 
| 15 16 | 
             
                ObjectTypeLib.gtz
         | 
| @@ -143,7 +144,16 @@ function REFERRAL() pure returns (ObjectType) { | |
| 143 144 | 
             
                return ObjectType.wrap(49);
         | 
| 144 145 | 
             
            }
         | 
| 145 146 |  | 
| 147 | 
            +
            /// @dev Object type for GIF core target roles.
         | 
| 148 | 
            +
            function CORE() pure returns (ObjectType) {
         | 
| 149 | 
            +
                return ObjectType.wrap(97);
         | 
| 150 | 
            +
            }
         | 
| 146 151 |  | 
| 152 | 
            +
            /// @dev Object type for target roles of contracts outside the GIF framework.
         | 
| 153 | 
            +
            /// Example: Custom supporting contracts for a product component.
         | 
| 154 | 
            +
            function CUSTOM() pure returns (ObjectType) {
         | 
| 155 | 
            +
                return ObjectType.wrap(98);
         | 
| 156 | 
            +
            }
         | 
| 147 157 |  | 
| 148 158 | 
             
            /// @dev Object type that includes any other object type.
         | 
| 149 159 | 
             
            /// Note that eq()/'==' does not take this property into account.
         | 
| @@ -203,6 +213,8 @@ library ObjectTypeLib { | |
| 203 213 | 
             
                        return "Registry";
         | 
| 204 214 | 
             
                    } else if (objectType == STAKING()) {
         | 
| 205 215 | 
             
                        return "Staking";
         | 
| 216 | 
            +
                    } else if (objectType == RELEASE()) {
         | 
| 217 | 
            +
                        return "Release";
         | 
| 206 218 | 
             
                    } else if (objectType == INSTANCE()) {
         | 
| 207 219 | 
             
                        return "Instance";
         | 
| 208 220 | 
             
                    } else if (objectType == COMPONENT()) {
         | 
| @@ -239,6 +251,7 @@ library ObjectTypeLib { | |
| 239 251 | 
             
                                toInt(objectType))));
         | 
| 240 252 | 
             
                }
         | 
| 241 253 |  | 
| 254 | 
            +
                // TODO move to IService
         | 
| 242 255 | 
             
                function toVersionedName(
         | 
| 243 256 | 
             
                    string memory name, 
         | 
| 244 257 | 
             
                    string memory suffix, 
         | 
| @@ -248,10 +261,10 @@ library ObjectTypeLib { | |
| 248 261 | 
             
                    pure
         | 
| 249 262 | 
             
                    returns (string memory versionedName)
         | 
| 250 263 | 
             
                {
         | 
| 251 | 
            -
                    string memory versionName = " | 
| 264 | 
            +
                    string memory versionName = "V0";
         | 
| 252 265 |  | 
| 253 266 | 
             
                    if (release.toInt() >= 10) {
         | 
| 254 | 
            -
                        versionName = " | 
| 267 | 
            +
                        versionName = "V";
         | 
| 255 268 | 
             
                    }
         | 
| 256 269 |  | 
| 257 270 | 
             
                    versionedName = string(
         | 
| @@ -277,7 +290,7 @@ library ObjectTypeLib { | |
| 277 290 | 
             
                    }
         | 
| 278 291 |  | 
| 279 292 | 
             
                    bytes memory buffer = new bytes(digits);
         | 
| 280 | 
            -
                     | 
| 293 | 
            +
                    uint256 index = digits - 1;
         | 
| 281 294 |  | 
| 282 295 | 
             
                    temp = value;
         | 
| 283 296 | 
             
                    while (temp != 0) {
         |